blob: 9dfdfea08f005f16f193ebe677245a4bad1c5a91 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.apache.ofbiz.widget.model;
import java.util.Collection;
import java.util.Map;
import org.apache.ofbiz.widget.model.HtmlWidget.HtmlTemplate;
import org.apache.ofbiz.widget.model.HtmlWidget.HtmlTemplateDecorator;
import org.apache.ofbiz.widget.model.HtmlWidget.HtmlTemplateDecoratorSection;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Column;
import org.apache.ofbiz.widget.model.ModelScreenWidget.ColumnContainer;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Container;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Content;
import org.apache.ofbiz.widget.model.ModelScreenWidget.DecoratorScreen;
import org.apache.ofbiz.widget.model.ModelScreenWidget.DecoratorSection;
import org.apache.ofbiz.widget.model.ModelScreenWidget.DecoratorSectionInclude;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Form;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Grid;
import org.apache.ofbiz.widget.model.ModelScreenWidget.HorizontalSeparator;
import org.apache.ofbiz.widget.model.ModelScreenWidget.IncludeScreen;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Label;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Menu;
import org.apache.ofbiz.widget.model.ModelScreenWidget.PlatformSpecific;
import org.apache.ofbiz.widget.model.ModelScreenWidget.PortalPage;
import org.apache.ofbiz.widget.model.ModelScreenWidget.ScreenImage;
import org.apache.ofbiz.widget.model.ModelScreenWidget.ScreenLink;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Screenlet;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Section;
import org.apache.ofbiz.widget.model.ModelScreenWidget.Tree;
import org.apache.ofbiz.widget.model.ModelTree.ModelNode;
import org.apache.ofbiz.widget.model.ModelTree.ModelNode.ModelSubNode;
/**
* An object that generates an XML representation from widget models.
* The generated XML is unformatted - if you want to
* "pretty print" the XML, then use a transformer.
*
*/
public class XmlWidgetVisitor extends XmlAbstractWidgetVisitor implements ModelWidgetVisitor {
private final ModelFieldVisitor fieldVisitor;
private final ModelActionVisitor actionVisitor;
private final ModelConditionVisitor conditionVisitor;
public XmlWidgetVisitor(Appendable writer) {
super(writer);
this.fieldVisitor = new XmlWidgetFieldVisitor(writer);
this.actionVisitor = new XmlWidgetActionVisitor(writer);
this.conditionVisitor = new XmlWidgetConditionVisitor(writer);
}
@Override
public void visit(Column column) throws Exception {
writer.append("<column");
visitModelWidget(column);
visitAttribute("id", column.getIdExdr());
visitAttribute("style", column.getStyleExdr());
writer.append(">");
visitSubWidgets(column.getSubWidgets());
writer.append("</column>");
}
@Override
public void visit(ColumnContainer columnContainer) throws Exception {
writer.append("<column-container");
visitModelWidget(columnContainer);
visitAttribute("id", columnContainer.getIdExdr());
visitAttribute("style", columnContainer.getStyleExdr());
writer.append(">");
visitSubWidgets(columnContainer.getColumns());
writer.append("</column-container>");
}
@Override
public void visit(Container container) throws Exception {
writer.append("<container");
visitModelWidget(container);
visitAttribute("auto-update-interval", container.getAutoUpdateInterval());
visitAttribute("auto-update-target", container.getAutoUpdateTargetExdr());
visitAttribute("id", container.getIdExdr());
visitAttribute("style", container.getStyleExdr());
writer.append(">");
visitSubWidgets(container.getSubWidgets());
writer.append("</container>");
}
@Override
public void visit(Content content) throws Exception {
writer.append("<content");
visitModelWidget(content);
visitAttribute("border", content.getBorder());
visitAttribute("content-id", content.getContentId());
visitAttribute("dataresource-id", content.getDataResourceId());
visitAttribute("edit-container-style", content.getEditContainerStyle());
visitAttribute("edit-request", content.getEditRequest());
visitAttribute("enable-edit-name", content.getEnableEditName());
visitAttribute("height", content.getHeight());
visitAttribute("width", content.getWidth());
visitAttribute("xml-escape", content.xmlEscape());
writer.append("/>");
}
@Override
public void visit(DecoratorScreen decoratorScreen) throws Exception {
writer.append("<decorator-screen");
visitModelWidget(decoratorScreen);
visitAttribute("location", decoratorScreen.getLocationExdr());
writer.append(">");
visitSubWidgets(decoratorScreen.getSectionMap().values());
writer.append("</decorator-screen>");
}
@Override
public void visit(DecoratorSection decoratorSection) throws Exception {
writer.append("<decorator-section");
visitModelWidget(decoratorSection);
writer.append(">");
visitSubWidgets(decoratorSection.getSubWidgets());
writer.append("</decorator-screen>");
}
@Override
public void visit(DecoratorSectionInclude decoratorSectionInclude) throws Exception {
writer.append("<decorator-section-include");
visitModelWidget(decoratorSectionInclude);
writer.append("/>");
}
@Override
public void visit(Form form) throws Exception {
writer.append("<include-form");
visitModelWidget(form);
visitAttribute("location", form.getLocationExdr());
visitAttribute("share-scope", form.getShareScopeExdr());
writer.append("/>");
}
@Override
public void visit(HorizontalSeparator horizontalSeparator) throws Exception {
writer.append("<horizontal-separator");
visitModelWidget(horizontalSeparator);
visitAttribute("id", horizontalSeparator.getIdExdr());
visitAttribute("style", horizontalSeparator.getStyleExdr());
writer.append("/>");
}
@Override
public void visit(HtmlTemplate htmlTemplate) throws Exception {
writer.append("<html-template");
visitModelWidget(htmlTemplate);
visitAttribute("location", htmlTemplate.getLocationExdr());
writer.append("/>");
}
@Override
public void visit(HtmlTemplateDecorator htmlTemplateDecorator) throws Exception {
writer.append("<html-template-decorator");
visitModelWidget(htmlTemplateDecorator);
visitAttribute("location", htmlTemplateDecorator.getLocationExdr());
writer.append(">");
visitSubWidgets(htmlTemplateDecorator.getSectionMap().values());
writer.append("</html-template-decorator>");
}
@Override
public void visit(HtmlTemplateDecoratorSection htmlTemplateDecoratorSection) throws Exception {
writer.append("<html-template-decorator-section");
visitModelWidget(htmlTemplateDecoratorSection);
writer.append(">");
visitSubWidgets(htmlTemplateDecoratorSection.getSubWidgets());
writer.append("</html-template-decorator-section>");
}
@Override
public void visit(HtmlWidget htmlWidget) throws Exception {
visitSubWidgets(htmlWidget.getSubWidgets());
}
@Override
public void visit(IncludeScreen includeScreen) throws Exception {
writer.append("<include-screen");
visitModelWidget(includeScreen);
visitAttribute("location", includeScreen.getLocationExdr());
visitAttribute("share-scope", includeScreen.getShareScopeExdr());
writer.append("/>");
}
@Override
public void visit(IterateSectionWidget iterateSectionWidget) throws Exception {
writer.append("<iterate-section");
visitModelWidget(iterateSectionWidget);
visitAttribute("entry", iterateSectionWidget.getEntryNameExdr());
visitAttribute("key", iterateSectionWidget.getKeyNameExdr());
visitAttribute("list", iterateSectionWidget.getListNameExdr());
visitAttribute("paginate", iterateSectionWidget.getPaginate());
visitAttribute("paginate-target", iterateSectionWidget.getPaginateTarget());
visitAttribute("view-size", iterateSectionWidget.getViewSize());
writer.append(">");
visitSubWidgets(iterateSectionWidget.getSectionList());
writer.append("</iterate-section>");
}
@Override
public void visit(Label label) throws Exception {
writer.append("<label");
visitModelWidget(label);
visitAttribute("id", label.getIdExdr());
visitAttribute("style", label.getStyleExdr());
writer.append(">");
writer.append(label.getTextExdr().getOriginal());
writer.append("</label>");
}
@Override
public void visit(Menu menu) throws Exception {
writer.append("<include-menu");
visitModelWidget(menu);
visitAttribute("location", menu.getLocationExdr());
writer.append("/>");
}
@Override
public void visit(ModelSingleForm modelForm) throws Exception {
writer.append("<form");
visitModelForm(modelForm);
writer.append("</form>");
}
@Override
public void visit(ModelGrid modelGrid) throws Exception {
writer.append("<grid");
visitModelForm(modelGrid);
writer.append("</grid>");
}
@Override
public void visit(Grid grid) throws Exception {
writer.append("<include-grid");
visitModelWidget(grid);
visitAttribute("location", grid.getLocationExdr());
visitAttribute("share-scope", grid.getShareScopeExdr());
writer.append("/>");
}
@Override
public void visit(ModelMenu modelMenu) throws Exception {
writer.append("<menu");
visitModelWidget(modelMenu);
if (modelMenu.getParentMenu() != null) {
visitAttribute("extends", modelMenu.getParentMenu().getName());
visitAttribute("extends-resource", modelMenu.getParentMenu().getMenuLocation());
}
visitAttribute("type", modelMenu.getType());
visitAttribute("target", modelMenu.getTarget());
visitAttribute("id", modelMenu.getId());
visitAttribute("title", modelMenu.getTitle());
visitAttribute("tooltip", modelMenu.getTooltip());
visitAttribute("default-entity-name", modelMenu.getDefaultEntityName());
visitAttribute("default-title-style", modelMenu.getDefaultTitleStyle());
visitAttribute("default-selected-style", modelMenu.getDefaultSelectedStyle());
visitAttribute("default-widget-style", modelMenu.getDefaultWidgetStyle());
visitAttribute("default-tooltip-style", modelMenu.getDefaultTooltipStyle());
visitAttribute("default-menu-item-name", modelMenu.getDefaultMenuItemName());
visitAttribute("default-permission-operation", modelMenu.getDefaultPermissionOperation());
visitAttribute("default-permission-entity-action", modelMenu.getDefaultPermissionEntityAction());
visitAttribute("default-associated-content-id", modelMenu.getDefaultAssociatedContentId());
visitAttribute("orientation", modelMenu.getOrientation());
visitAttribute("menu-width", modelMenu.getMenuWidth());
visitAttribute("default-cell-width", modelMenu.getDefaultCellWidth());
visitAttribute("default-hide-if-selected", modelMenu.getDefaultHideIfSelected());
visitAttribute("default-disabled-title-style", modelMenu.getDefaultDisabledTitleStyle());
visitAttribute("selected-menuitem-context-field-name", modelMenu.getSelectedMenuItemContextFieldName());
visitAttribute("menu-container-style", modelMenu.getMenuContainerStyleExdr());
visitAttribute("default-align", modelMenu.getDefaultAlign());
visitAttribute("default-align-style", modelMenu.getDefaultAlignStyle());
visitAttribute("fill-style", modelMenu.getFillStyle());
visitAttribute("extra-index", modelMenu.getExtraIndex());
writer.append(">");
if (!modelMenu.getActions().isEmpty()) {
writer.append("<actions>");
visitActions(modelMenu.getActions());
writer.append("</actions>");
}
for (ModelMenuItem menuItem : modelMenu.getMenuItemList()) {
menuItem.accept(this);
}
writer.append("</menu>");
}
@Override
public void visit(ModelMenuItem modelMenuItem) throws Exception {
writer.append("<menu-item");
visitModelWidget(modelMenuItem);
visitAttribute("entity-name", modelMenuItem.getEntityName());
visitAttribute("title", modelMenuItem.getTitle());
visitAttribute("tooltip", modelMenuItem.getTooltip());
visitAttribute("parent-portal-page-value", modelMenuItem.getParentPortalPageId());
visitAttribute("title-style", modelMenuItem.getTitleStyle());
visitAttribute("disabled-title-style", modelMenuItem.getDisabledTitleStyle());
visitAttribute("widget-style", modelMenuItem.getWidgetStyle());
visitAttribute("tooltip-style", modelMenuItem.getTooltipStyle());
visitAttribute("selected-style", modelMenuItem.getSelectedStyle());
visitAttribute("hide-if-selected", modelMenuItem.getHideIfSelected());
visitAttribute("disable-if-empty", modelMenuItem.getDisableIfEmpty());
visitAttribute("align", modelMenuItem.getAlign());
visitAttribute("align-style", modelMenuItem.getAlignStyle());
visitAttribute("position", modelMenuItem.getPosition());
visitAttribute("associated-content-id", modelMenuItem.getAssociatedContentId());
visitAttribute("cell-width", modelMenuItem.getCellWidth());
visitAttribute("sub-menu", modelMenuItem.getSubMenu());
writer.append(">");
if (modelMenuItem.getCondition() != null) {
modelMenuItem.getCondition().getCondition().accept(conditionVisitor);
}
if (!modelMenuItem.getActions().isEmpty()) {
writer.append("<actions>");
visitActions(modelMenuItem.getActions());
writer.append("</actions>");
}
if (modelMenuItem.getLink() != null) {
visitLink(modelMenuItem.getLink().getLink());
}
for (ModelMenuItem menuItem : modelMenuItem.getMenuItemList()) {
menuItem.accept(this);
;
}
writer.append("</menu-item>");
}
@Override
public void visit(ModelNode modelNode) throws Exception {
writer.append("<node");
visitModelWidget(modelNode);
visitAttribute("expand-collapse-style", modelNode.getExpandCollapseStyle());
visitAttribute("wrap-style", modelNode.getWrapStyleExdr());
visitAttribute("render-style", modelNode.getRenderStyle());
visitAttribute("entry-name", modelNode.getEntryName());
visitAttribute("entity-name", modelNode.getEntityName());
visitAttribute("join-field-name", modelNode.getPkName());
writer.append(">");
if (modelNode.getCondition() != null) {
modelNode.getCondition().getCondition().accept(conditionVisitor);
}
if (!modelNode.getActions().isEmpty()) {
writer.append("<actions>");
visitActions(modelNode.getActions());
writer.append("</actions>");
}
if (!modelNode.getScreenNameExdr().isEmpty()) {
writer.append("<include-screen");
visitAttribute("name", modelNode.getScreenNameExdr());
visitAttribute("location", modelNode.getScreenLocationExdr());
visitAttribute("share-scope", modelNode.getShareScope());
visitAttribute("name", modelNode.getScreenNameExdr());
writer.append("/>");
}
if (modelNode.getLabel() != null) {
ModelNode.Label label = modelNode.getLabel();
writer.append("<label");
visitAttribute("id", label.getIdExdr());
visitAttribute("style", label.getStyleExdr());
writer.append(">");
writer.append(label.getTextExdr().getOriginal());
writer.append("</label>");
}
if (modelNode.getLink() != null) {
ModelNode.Link link = modelNode.getLink();
writer.append("<link");
visitAttribute("encode", link.getEncode());
visitAttribute("full-path", link.getFullPath());
visitAttribute("id", link.getIdExdr());
visitAttribute("link-type", link.getLinkType());
visitAttribute("prefix", link.getPrefixExdr());
visitAttribute("secure", link.getSecure());
visitAttribute("style", link.getStyleExdr());
visitAttribute("target", link.getTargetExdr());
visitAttribute("target-window", link.getTargetWindowExdr());
visitAttribute("text", link.getTextExdr());
visitAttribute("url-mode", link.getUrlMode());
if (!link.getParameterList().isEmpty()) {
writer.append(">");
visitParameters(link.getParameterList());
writer.append("</link>");
} else {
writer.append("/>");
}
}
writer.append("</node>");
}
@Override
public void visit(ModelScreen modelScreen) throws Exception {
writer.append("<screen");
visitModelWidget(modelScreen);
visitAttribute("transaction-timeout", modelScreen.getTransactionTimeout());
visitAttribute("use-transaction", modelScreen.getUseTransaction());
visitAttribute("use-cache", modelScreen.getUseCache());
writer.append(">");
modelScreen.getSection().accept(this);
writer.append("</screen>");
}
@Override
public void visit(ModelSubNode modelSubNode) throws Exception {
writer.append("<sub-node");
visitModelWidget(modelSubNode);
visitAttribute("node-name", modelSubNode.getNodeNameExdr());
writer.append(">");
if (!modelSubNode.getActions().isEmpty()) {
writer.append("<actions>");
visitActions(modelSubNode.getActions());
writer.append("</actions>");
}
writer.append("</sub-node>");
}
@Override
public void visit(ModelTree modelTree) throws Exception {
writer.append("<tree");
visitModelWidget(modelTree);
visitAttribute("root-node-name", modelTree.getRootNodeName());
visitAttribute("default-render-style", modelTree.getDefaultRenderStyle());
visitAttribute("render-style", modelTree.getDefaultRenderStyle());
visitAttribute("default-wrap-style", modelTree.getDefaultWrapStyleExdr());
visitAttribute("expand-collapse-request", modelTree.getExpandCollapseRequestExdr());
visitAttribute("trail-name", modelTree.getTrailNameExdr());
visitAttribute("force-child-check", modelTree.getForceChildCheck());
visitAttribute("entity-name", modelTree.getDefaultEntityName());
visitAttribute("open-depth", modelTree.getOpenDepth());
visitAttribute("post-trail-open-depth", modelTree.getPostTrailOpenDepth());
writer.append(">");
visitSubWidgets(modelTree.getNodeMap().values());
writer.append("</tree>");
}
@Override
public void visit(PlatformSpecific platformSpecific) throws Exception {
writer.append("<platform-specific>");
for (Map.Entry<String, ModelScreenWidget> entry : platformSpecific.getSubWidgets().entrySet()) {
writer.append("<").append(entry.getKey()).append(">");
entry.getValue().accept(this);
writer.append("</").append(entry.getKey()).append(">");
}
writer.append("</platform-specific>");
}
@Override
public void visit(PortalPage portalPage) throws Exception {
writer.append("<include-portal-page");
visitModelWidget(portalPage);
visitAttribute("id", portalPage.getIdExdr());
visitAttribute("conf-mode", portalPage.getConfModeExdr());
visitAttribute("use-private", portalPage.getUsePrivate());
writer.append("/>");
}
@Override
public void visit(ScreenImage image) throws Exception {
visitImage(image.getImage());
}
@Override
public void visit(Screenlet screenlet) throws Exception {
writer.append("<screenlet");
visitModelWidget(screenlet);
visitAttribute("id", screenlet.getIdExdr());
visitAttribute("collapsible", screenlet.getCollapsible());
visitAttribute("initially-collapsed", screenlet.getInitiallyCollapsed());
visitAttribute("save-collapsed", screenlet.getSaveCollapsed());
visitAttribute("padded", screenlet.getPadded());
visitAttribute("title", screenlet.getTitleExdr());
writer.append(">");
visitSubWidgets(screenlet.getSubWidgets());
writer.append("</screenlet>");
}
@Override
public void visit(ScreenLink link) throws Exception {
visitLink(link.getLink());
}
@Override
public void visit(Section section) throws Exception {
writer.append("<section");
visitModelWidget(section);
writer.append(">");
if (section.getCondition() != null) {
writer.append("<condition>");
section.getCondition().accept(conditionVisitor);
writer.append("</condition>");
}
if (!section.getActions().isEmpty()) {
writer.append("<actions>");
visitActions(section.getActions());
writer.append("</actions>");
}
if (!section.getSubWidgets().isEmpty()) {
writer.append("<widgets>");
visitSubWidgets(section.getSubWidgets());
writer.append("</widgets>");
}
if (!section.getFailWidgets().isEmpty()) {
writer.append("<fail-widgets>");
visitSubWidgets(section.getFailWidgets());
writer.append("</fail-widgets>");
}
writer.append("</section>");
}
@Override
public void visit(Tree tree) throws Exception {
writer.append("<include-tree");
visitModelWidget(tree);
visitAttribute("location", tree.getLocationExdr());
visitAttribute("share-scope", tree.getShareScopeExdr());
writer.append("/>");
}
private void visitActions(Collection<? extends ModelAction> actions) throws Exception {
for (ModelAction action : actions) {
action.accept(actionVisitor);
}
}
public void visitModelForm(ModelForm modelForm) throws Exception {
visitModelWidget(modelForm);
if (modelForm.getParentModelForm() != null) {
visitAttribute("extends", modelForm.getParentModelForm().getName());
visitAttribute("extends-resource", modelForm.getParentModelForm().getFormLocation());
}
visitAttribute("view-size", modelForm.getDefaultViewSize());
visitAttribute("type", modelForm.getType());
visitAttribute("target", modelForm.getTarget());
visitAttribute("id", modelForm.getContainerId());
visitAttribute("style", modelForm.getContainerStyle());
visitAttribute("title", modelForm.getTitle());
visitAttribute("tooltip", modelForm.getTooltip());
visitAttribute("list-name", modelForm.getListName());
visitAttribute("list-entry-name", modelForm.getListEntryName());
visitAttribute("default-entity-name", modelForm.getDefaultEntityName());
visitAttribute("default-service-name", modelForm.getDefaultServiceName());
visitAttribute("form-title-area-style", modelForm.getFormTitleAreaStyle());
visitAttribute("form-widget-area-style", modelForm.getFormWidgetAreaStyle());
visitAttribute("default-title-area-style", modelForm.getDefaultTitleAreaStyle());
visitAttribute("default-widget-area-style", modelForm.getDefaultWidgetAreaStyle());
visitAttribute("odd-row-style", modelForm.getOddRowStyle());
visitAttribute("even-row-style", modelForm.getEvenRowStyle());
visitAttribute("default-table-style", modelForm.getDefaultTableStyle());
visitAttribute("header-row-style", modelForm.getHeaderRowStyle());
visitAttribute("default-title-style", modelForm.getDefaultTitleStyle());
visitAttribute("default-widget-style", modelForm.getDefaultWidgetStyle());
visitAttribute("default-tooltip-style", modelForm.getDefaultTooltipStyle());
visitAttribute("item-index-separator", modelForm.getItemIndexSeparator());
visitAttribute("separate-columns", modelForm.getSeparateColumns());
visitAttribute("group-columns", modelForm.getGroupColumns());
visitAttribute("target-type", modelForm.getTargetType());
visitAttribute("default-map-name", modelForm.getDefaultMapName());
visitAttribute("target-window", modelForm.getTargetWindow());
visitAttribute("hide-header", modelForm.getHideHeader());
visitAttribute("client-autocomplete-fields", modelForm.getClientAutocompleteFields());
visitAttribute("paginate-target", modelForm.getPaginateTarget());
visitAttribute("sort-field-parameter-name", modelForm.getSortFieldParameterName());
visitAttribute("default-required-field-style", modelForm.getDefaultRequiredFieldStyle());
visitAttribute("default-sort-field-style", modelForm.getDefaultSortFieldStyle());
visitAttribute("default-sort-field-asc-style", modelForm.getDefaultSortFieldAscStyle());
visitAttribute("default-sort-field-desc-style", modelForm.getDefaultSortFieldDescStyle());
visitAttribute("paginate-target-anchor", modelForm.getPaginateTargetAnchor());
visitAttribute("paginate-index-field", modelForm.getPaginateIndexField());
visitAttribute("paginate-size-field", modelForm.getPaginateSizeField());
visitAttribute("override-list-size", modelForm.getOverrideListSize());
visitAttribute("paginate-first-label", modelForm.getPaginateFirstLabel());
visitAttribute("paginate-previous-label", modelForm.getPaginatePreviousLabel());
visitAttribute("paginate-next-label", modelForm.getPaginateNextLabel());
visitAttribute("paginate-last-label", modelForm.getPaginateLastLabel());
visitAttribute("paginate-viewsize-label", modelForm.getPaginateViewSizeLabel());
visitAttribute("paginate-style", modelForm.getPaginateStyle());
visitAttribute("paginate", modelForm.getPaginate());
visitAttribute("skip-start", modelForm.getSkipStart());
visitAttribute("skip-end", modelForm.getSkipEnd());
visitAttribute("use-row-submit", modelForm.getUseRowSubmit());
visitAttribute("row-count", modelForm.getRowCount());
visitAttribute("focus-field-name", modelForm.getFocusFieldName());
writer.append(">");
if (!modelForm.getActions().isEmpty()) {
writer.append("<actions>");
visitActions(modelForm.getActions());
writer.append("</actions>");
}
if (!modelForm.getRowActions().isEmpty()) {
writer.append("<row-actions>");
visitActions(modelForm.getRowActions());
writer.append("</row-actions>");
}
for (ModelForm.AltRowStyle rowStyle : modelForm.getAltRowStyles()) {
writer.append("<alt-row-style");
visitAttribute("use-when", rowStyle.useWhen);
visitAttribute("style", rowStyle.style);
writer.append("/>");
}
for (ModelForm.AltTarget target : modelForm.getAltTargets()) {
writer.append("<alt-target");
visitAttribute("use-when", target.useWhen);
visitAttribute("target", target.targetExdr);
writer.append("/>");
}
for (ModelForm.AutoFieldsService service : modelForm.getAutoFieldsServices()) {
writer.append("<auto-fields-service");
visitAttribute("service-name", service.serviceName);
visitAttribute("map-name", service.mapName);
visitAttribute("default-field-type", service.defaultFieldType);
visitAttribute("default-position", service.defaultPosition);
writer.append("/>");
}
for (ModelForm.AutoFieldsEntity entity : modelForm.getAutoFieldsEntities()) {
writer.append("<auto-fields-entity");
visitAttribute("entity-name", entity.entityName);
visitAttribute("map-name", entity.mapName);
visitAttribute("default-field-type", entity.defaultFieldType);
visitAttribute("default-position", entity.defaultPosition);
writer.append("/>");
}
for (ModelFormField field : modelForm.getFieldList()) {
field.getFieldInfo().accept(fieldVisitor);
}
visitUpdateAreas(modelForm.getOnPaginateUpdateAreas());
visitUpdateAreas(modelForm.getOnSortColumnUpdateAreas());
visitUpdateAreas(modelForm.getOnSubmitUpdateAreas());
}
private void visitSubWidgets(Collection<? extends ModelWidget> subWidgets) throws Exception {
for (ModelWidget subWidget : subWidgets) {
subWidget.accept(this);
}
}
private void visitUpdateAreas(Collection<ModelForm.UpdateArea> updateAreas) throws Exception {
for (ModelForm.UpdateArea updateArea : updateAreas) {
writer.append("<on-event-update-area");
visitAttribute("event-type", updateArea.getEventType());
visitAttribute("area-id", updateArea.getAreaId());
visitAttribute("area-target", updateArea.getAreaTarget());
writer.append(">");
visitAutoEntityParameters(updateArea.getAutoEntityParameters());
visitAutoServiceParameters(updateArea.getAutoServiceParameters());
visitParameters(updateArea.getParameterList());
writer.append("</on-event-update-area>");
}
}
}