| /******************************************************************************* |
| * 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>"); |
| } |
| } |
| } |