Author: adrianc
Date: Sat Dec 27 19:18:12 2014 New Revision: 1648093 URL: http://svn.apache.org/r1648093 Log: Begin work on ModelMenu.java thread safety. Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java?rev=1648093&r1=1648092&r2=1648093&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/MenuFactory.java Sat Dec 27 19:18:12 2014 @@ -84,8 +84,7 @@ public class MenuFactory { // read document and construct ModelMenu for each menu element Element rootElement = menuFileDoc.getDocumentElement(); for (Element menuElement: UtilXml.childElementList(rootElement, "menu")){ - ModelMenu modelMenu = new ModelMenu(menuElement); - modelMenu.setMenuLocation(menuLocation); + ModelMenu modelMenu = new ModelMenu(menuElement, menuLocation); modelMenuMap.put(modelMenu.getName(), modelMenu); } } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java?rev=1648093&r1=1648092&r2=1648093&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java Sat Dec 27 19:18:12 2014 @@ -20,6 +20,7 @@ package org.ofbiz.widget.menu; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,34 +36,36 @@ import org.ofbiz.widget.ModelWidgetVisit import org.w3c.dom.Element; /** - * Widget Library - Menu model class + * Models the <menu> element. + * + * @see <code>widget-menu.xsd</code> */ @SuppressWarnings("serial") public class ModelMenu extends ModelWidget { public static final String module = ModelMenu.class.getName(); - protected List<ModelWidgetAction> actions; - protected String defaultAlign; - protected String defaultAlignStyle; - protected FlexibleStringExpander defaultAssociatedContentId; - protected String defaultCellWidth; - protected String defaultDisabledTitleStyle; - protected String defaultEntityName; - protected Boolean defaultHideIfSelected; - protected String defaultMenuItemName; - protected String defaultPermissionEntityAction; - protected String defaultPermissionOperation; - protected String defaultPermissionStatusId; - protected String defaultPrivilegeEnumId; - protected String defaultSelectedStyle; - protected String defaultTitleStyle; - protected String defaultTooltipStyle; - protected String defaultWidgetStyle; - protected FlexibleStringExpander extraIndex; - protected String fillStyle; - protected String id; - protected FlexibleStringExpander menuContainerStyleExdr; + private final List<ModelWidgetAction> actions; + private final String defaultAlign; + private final String defaultAlignStyle; + private final FlexibleStringExpander defaultAssociatedContentId; + private final String defaultCellWidth; + private final String defaultDisabledTitleStyle; + private final String defaultEntityName; + private final Boolean defaultHideIfSelected; + private final String defaultMenuItemName; + private final String defaultPermissionEntityAction; + private final String defaultPermissionOperation; + private final String defaultPermissionStatusId; + private final String defaultPrivilegeEnumId; + private final String defaultSelectedStyle; + private final String defaultTitleStyle; + private final String defaultTooltipStyle; + private final String defaultWidgetStyle; + private final FlexibleStringExpander extraIndex; + private final String fillStyle; + private final String id; + private final FlexibleStringExpander menuContainerStyleExdr; /** This List will contain one copy of each item for each item name in the order * they were encountered in the service, entity, or menu definition; item definitions * with constraints will also be in this list but may appear multiple times for the same @@ -72,41 +75,69 @@ public class ModelMenu extends ModelWidg * necessary to use the Map. The Map is used when loading the menu definition to keep the * list clean and implement the override features for item definitions. */ - protected List<ModelMenuItem> menuItemList = new ArrayList<ModelMenuItem>(); + private final List<ModelMenuItem> menuItemList; /** This Map is keyed with the item name and has a ModelMenuItem for the value; items * with conditions will not be put in this Map so item definition overrides for items * with conditions is not possible. */ - protected Map<String, ModelMenuItem> menuItemMap = new HashMap<String, ModelMenuItem>(); - protected String menuLocation; - protected String menuWidth; - protected String orientation = "horizontal"; - protected FlexibleMapAccessor<String> selectedMenuItemContextFieldName; - protected String target; - protected FlexibleStringExpander title; - protected String tooltip; - protected String type; - - - // ===== CONSTRUCTORS ===== + private final Map<String, ModelMenuItem> menuItemMap; + private final String menuLocation; + private final String menuWidth; + private final String orientation; + private final FlexibleMapAccessor<String> selectedMenuItemContextFieldName; + private final String target; + private final FlexibleStringExpander title; + private final String tooltip; + private final String type; /** XML Constructor */ - public ModelMenu(Element menuElement) { + public ModelMenu(Element menuElement, String menuLocation) { super(menuElement); - + ArrayList<ModelWidgetAction> actions = new ArrayList<ModelWidgetAction>(); + String defaultAlign = ""; + String defaultAlignStyle = ""; + FlexibleStringExpander defaultAssociatedContentId = FlexibleStringExpander.getInstance(""); + String defaultCellWidth = ""; + String defaultDisabledTitleStyle = ""; + String defaultEntityName = ""; + Boolean defaultHideIfSelected = Boolean.FALSE; + String defaultMenuItemName = ""; + String defaultPermissionEntityAction = ""; + String defaultPermissionOperation = ""; + String defaultPermissionStatusId = ""; + String defaultPrivilegeEnumId = ""; + String defaultSelectedStyle = ""; + String defaultTitleStyle = ""; + String defaultTooltipStyle = ""; + String defaultWidgetStyle = ""; + FlexibleStringExpander extraIndex = FlexibleStringExpander.getInstance(""); + String fillStyle = ""; + String id = ""; + FlexibleStringExpander menuContainerStyleExdr = FlexibleStringExpander.getInstance(""); + ArrayList<ModelMenuItem> menuItemList = new ArrayList<ModelMenuItem>(); + Map<String, ModelMenuItem> menuItemMap = new HashMap<String, ModelMenuItem>(); + String menuWidth = ""; + String orientation = "horizontal"; + FlexibleMapAccessor<String> selectedMenuItemContextFieldName = FlexibleMapAccessor.getInstance(""); + String target = ""; + FlexibleStringExpander title = FlexibleStringExpander.getInstance(""); + String tooltip = ""; + String type = ""; // check if there is a parent menu to inherit from String parentResource = menuElement.getAttribute("extends-resource"); String parentMenu = menuElement.getAttribute("extends"); - if (parentMenu.length() > 0 && !(parentMenu.equals(menuElement.getAttribute("name")) && UtilValidate.isEmpty(parentResource))) { + if (parentMenu.length() > 0 && !(parentMenu.equals(getName()) && parentResource.isEmpty())) { ModelMenu parent = null; // check if we have a resource name (part of the string before the ?) if (UtilValidate.isNotEmpty(parentResource)) { try { parent = MenuFactory.getMenuFromLocation(parentResource, parentMenu); } catch (Exception e) { - Debug.logError(e, "Failed to load parent menu definition '" + parentMenu + "' at resource '" + parentResource + "'", module); + Debug.logError(e, "Failed to load parent menu definition '" + parentMenu + "' at resource '" + parentResource + + "'", module); } } else { + parentResource = menuLocation; // try to find a menu definition in the same file Element rootElement = menuElement.getOwnerDocument().getDocumentElement(); List<? extends Element> menuElements = UtilXml.childElementList(rootElement, "menu"); @@ -114,7 +145,7 @@ public class ModelMenu extends ModelWidg //menuElements.addAll(UtilXml.childElementList(rootElement, "abstract-menu")); for (Element menuElementEntry : menuElements) { if (menuElementEntry.getAttribute("name").equals(parentMenu)) { - parent = new ModelMenu(menuElementEntry); + parent = new ModelMenu(menuElementEntry, parentResource); break; } } @@ -122,122 +153,145 @@ public class ModelMenu extends ModelWidg Debug.logError("Failed to find parent menu definition '" + parentMenu + "' in same document.", module); } } - if (parent != null) { - this.type = parent.type; - this.target = parent.target; - this.id = parent.id; - this.title = parent.title; - this.tooltip = parent.tooltip; - this.defaultEntityName = parent.defaultEntityName; - this.defaultTitleStyle = parent.defaultTitleStyle; - this.defaultSelectedStyle = parent.defaultSelectedStyle; - this.defaultWidgetStyle = parent.defaultWidgetStyle; - this.defaultTooltipStyle = parent.defaultTooltipStyle; - this.defaultMenuItemName = parent.defaultMenuItemName; - this.menuItemList.addAll(parent.menuItemList); - this.menuItemMap.putAll(parent.menuItemMap); - this.defaultPermissionOperation = parent.defaultPermissionOperation; - this.defaultPermissionEntityAction = parent.defaultPermissionEntityAction; - this.defaultAssociatedContentId = parent.defaultAssociatedContentId; - this.defaultPermissionStatusId = parent.defaultPermissionStatusId; - this.defaultPrivilegeEnumId = parent.defaultPrivilegeEnumId; - this.defaultHideIfSelected = parent.defaultHideIfSelected; - this.orientation = parent.orientation; - this.menuWidth = parent.menuWidth; - this.defaultCellWidth = parent.defaultCellWidth; - this.defaultDisabledTitleStyle = parent.defaultDisabledTitleStyle; - this.defaultAlign = parent.defaultAlign; - this.defaultAlignStyle = parent.defaultAlignStyle; - this.fillStyle = parent.fillStyle; - this.extraIndex = parent.extraIndex; - this.selectedMenuItemContextFieldName = parent.selectedMenuItemContextFieldName; - this.menuContainerStyleExdr = parent.menuContainerStyleExdr; + type = parent.type; + target = parent.target; + id = parent.id; + title = parent.title; + tooltip = parent.tooltip; + defaultEntityName = parent.defaultEntityName; + defaultTitleStyle = parent.defaultTitleStyle; + defaultSelectedStyle = parent.defaultSelectedStyle; + defaultWidgetStyle = parent.defaultWidgetStyle; + defaultTooltipStyle = parent.defaultTooltipStyle; + defaultMenuItemName = parent.defaultMenuItemName; + menuItemList.addAll(parent.menuItemList); + menuItemMap.putAll(parent.menuItemMap); + defaultPermissionOperation = parent.defaultPermissionOperation; + defaultPermissionEntityAction = parent.defaultPermissionEntityAction; + defaultAssociatedContentId = parent.defaultAssociatedContentId; + defaultPermissionStatusId = parent.defaultPermissionStatusId; + defaultPrivilegeEnumId = parent.defaultPrivilegeEnumId; + defaultHideIfSelected = parent.defaultHideIfSelected; + orientation = parent.orientation; + menuWidth = parent.menuWidth; + defaultCellWidth = parent.defaultCellWidth; + defaultDisabledTitleStyle = parent.defaultDisabledTitleStyle; + defaultAlign = parent.defaultAlign; + defaultAlignStyle = parent.defaultAlignStyle; + fillStyle = parent.fillStyle; + extraIndex = parent.extraIndex; + selectedMenuItemContextFieldName = parent.selectedMenuItemContextFieldName; + menuContainerStyleExdr = parent.menuContainerStyleExdr; if (parent.actions != null) { - this.actions = new ArrayList<ModelWidgetAction>(); - this.actions.addAll(parent.actions); + actions.addAll(parent.actions); } } } - - if (this.type == null || menuElement.hasAttribute("type")) - this.type = menuElement.getAttribute("type"); - if (this.target == null || menuElement.hasAttribute("target")) - this.target = menuElement.getAttribute("target"); - if (this.id == null || menuElement.hasAttribute("id")) - this.id = menuElement.getAttribute("id"); - if (this.title == null || menuElement.hasAttribute("title")) - this.setTitle(menuElement.getAttribute("title")); - if (this.tooltip == null || menuElement.hasAttribute("tooltip")) - this.tooltip = menuElement.getAttribute("tooltip"); - if (this.defaultEntityName == null || menuElement.hasAttribute("default-entity-name")) - this.defaultEntityName = menuElement.getAttribute("default-entity-name"); - if (this.defaultTitleStyle == null || menuElement.hasAttribute("default-title-style")) - this.defaultTitleStyle = menuElement.getAttribute("default-title-style"); - if (this.defaultSelectedStyle == null || menuElement.hasAttribute("default-selected-style")) - this.defaultSelectedStyle = menuElement.getAttribute("default-selected-style"); - if (this.defaultWidgetStyle == null || menuElement.hasAttribute("default-widget-style")) - this.defaultWidgetStyle = menuElement.getAttribute("default-widget-style"); - if (this.defaultTooltipStyle == null || menuElement.hasAttribute("default-tooltip-style")) - this.defaultTooltipStyle = menuElement.getAttribute("default-tooltip-style"); - if (this.defaultMenuItemName == null || menuElement.hasAttribute("default-menu-item-name")) - this.defaultMenuItemName = menuElement.getAttribute("default-menu-item-name"); - if (this.defaultPermissionOperation == null || menuElement.hasAttribute("default-permission-operation")) - this.defaultPermissionOperation = menuElement.getAttribute("default-permission-operation"); - if (this.defaultPermissionEntityAction == null || menuElement.hasAttribute("default-permission-entity-action")) - this.defaultPermissionEntityAction = menuElement.getAttribute("default-permission-entity-action"); - if (this.defaultPermissionStatusId == null || menuElement.hasAttribute("defaultPermissionStatusId")) - this.defaultPermissionStatusId = menuElement.getAttribute("default-permission-status-id"); - if (this.defaultPrivilegeEnumId == null || menuElement.hasAttribute("defaultPrivilegeEnumId")) - this.defaultPrivilegeEnumId = menuElement.getAttribute("default-privilege-enum-id"); - if (this.defaultAssociatedContentId == null || menuElement.hasAttribute("defaultAssociatedContentId")) - this.setDefaultAssociatedContentId(menuElement.getAttribute("default-associated-content-id")); - if (this.orientation == null || menuElement.hasAttribute("orientation")) - this.orientation = menuElement.getAttribute("orientation"); - if (this.menuWidth == null || menuElement.hasAttribute("menu-width")) - this.menuWidth = menuElement.getAttribute("menu-width"); - if (this.defaultCellWidth == null || menuElement.hasAttribute("default-cell-width")) - this.defaultCellWidth = menuElement.getAttribute("default-cell-width"); - if (menuElement.hasAttribute("default-hide-if-selected")) { - String val = menuElement.getAttribute("default-hide-if-selected"); - if (val != null && val.equalsIgnoreCase("true")) - defaultHideIfSelected = Boolean.TRUE; - else - defaultHideIfSelected = Boolean.FALSE; - } - if (this.defaultDisabledTitleStyle == null || menuElement.hasAttribute("default-disabled-title-style")) - this.defaultDisabledTitleStyle = menuElement.getAttribute("default-disabled-title-style"); - if (this.selectedMenuItemContextFieldName == null || menuElement.hasAttribute("selected-menuitem-context-field-name")) - this.selectedMenuItemContextFieldName = FlexibleMapAccessor.getInstance(menuElement.getAttribute("selected-menuitem-context-field-name")); - if (this.menuContainerStyleExdr == null || menuElement.hasAttribute("menu-container-style")) - this.setMenuContainerStyle(menuElement.getAttribute("menu-container-style")); - if (this.defaultAlign == null || menuElement.hasAttribute("default-align")) - this.defaultAlign = menuElement.getAttribute("default-align"); - if (this.defaultAlignStyle == null || menuElement.hasAttribute("default-align-style")) - this.defaultAlignStyle = menuElement.getAttribute("default-align-style"); - if (this.fillStyle == null || menuElement.hasAttribute("fill-style")) - this.fillStyle = menuElement.getAttribute("fill-style"); - if (this.extraIndex == null || menuElement.hasAttribute("extra-index")) - this.setExtraIndex(menuElement.getAttribute("extra-index")); - + if (menuElement.hasAttribute("type")) + type = menuElement.getAttribute("type"); + if (menuElement.hasAttribute("target")) + target = menuElement.getAttribute("target"); + if (menuElement.hasAttribute("id")) + id = menuElement.getAttribute("id"); + if (menuElement.hasAttribute("title")) + title = FlexibleStringExpander.getInstance(menuElement.getAttribute("title")); + if (menuElement.hasAttribute("tooltip")) + tooltip = menuElement.getAttribute("tooltip"); + if (menuElement.hasAttribute("default-entity-name")) + defaultEntityName = menuElement.getAttribute("default-entity-name"); + if (menuElement.hasAttribute("default-title-style")) + defaultTitleStyle = menuElement.getAttribute("default-title-style"); + if (menuElement.hasAttribute("default-selected-style")) + defaultSelectedStyle = menuElement.getAttribute("default-selected-style"); + if (menuElement.hasAttribute("default-widget-style")) + defaultWidgetStyle = menuElement.getAttribute("default-widget-style"); + if (menuElement.hasAttribute("default-tooltip-style")) + defaultTooltipStyle = menuElement.getAttribute("default-tooltip-style"); + if (menuElement.hasAttribute("default-menu-item-name")) + defaultMenuItemName = menuElement.getAttribute("default-menu-item-name"); + if (menuElement.hasAttribute("default-permission-operation")) + defaultPermissionOperation = menuElement.getAttribute("default-permission-operation"); + if (menuElement.hasAttribute("default-permission-entity-action")) + defaultPermissionEntityAction = menuElement.getAttribute("default-permission-entity-action"); + if (menuElement.hasAttribute("defaultPermissionStatusId")) + defaultPermissionStatusId = menuElement.getAttribute("default-permission-status-id"); + if (menuElement.hasAttribute("defaultPrivilegeEnumId")) + defaultPrivilegeEnumId = menuElement.getAttribute("default-privilege-enum-id"); + if (menuElement.hasAttribute("defaultAssociatedContentId")) + defaultAssociatedContentId = FlexibleStringExpander.getInstance(menuElement + .getAttribute("default-associated-content-id")); + if (menuElement.hasAttribute("orientation")) + orientation = menuElement.getAttribute("orientation"); + if (menuElement.hasAttribute("menu-width")) + menuWidth = menuElement.getAttribute("menu-width"); + if (menuElement.hasAttribute("default-cell-width")) + defaultCellWidth = menuElement.getAttribute("default-cell-width"); + if (menuElement.hasAttribute("default-hide-if-selected")) + defaultHideIfSelected = "true".equals(menuElement.getAttribute("default-hide-if-selected")); + if (menuElement.hasAttribute("default-disabled-title-style")) + defaultDisabledTitleStyle = menuElement.getAttribute("default-disabled-title-style"); + if (menuElement.hasAttribute("selected-menuitem-context-field-name")) + selectedMenuItemContextFieldName = FlexibleMapAccessor.getInstance(menuElement + .getAttribute("selected-menuitem-context-field-name")); + if (menuElement.hasAttribute("menu-container-style")) + menuContainerStyleExdr = FlexibleStringExpander.getInstance(menuElement.getAttribute("menu-container-style")); + if (menuElement.hasAttribute("default-align")) + defaultAlign = menuElement.getAttribute("default-align"); + if (menuElement.hasAttribute("default-align-style")) + defaultAlignStyle = menuElement.getAttribute("default-align-style"); + if (menuElement.hasAttribute("fill-style")) + fillStyle = menuElement.getAttribute("fill-style"); + if (menuElement.hasAttribute("extra-index")) + extraIndex = FlexibleStringExpander.getInstance(menuElement.getAttribute("extra-index")); // read all actions under the "actions" element Element actionsElement = UtilXml.firstChildElement(menuElement, "actions"); if (actionsElement != null) { - if (this.actions == null) { - this.actions = ModelMenuAction.readSubActions(this, actionsElement); - } else { - this.actions.addAll(ModelMenuAction.readSubActions(this, actionsElement)); - ArrayList<ModelWidgetAction> actionsList = (ArrayList<ModelWidgetAction>)this.actions; - actionsList.trimToSize(); - } + actions.addAll(ModelMenuAction.readSubActions(this, actionsElement)); } - - // read in add item defs, add/override one by one using the menuItemList + actions.trimToSize(); + this.actions = Collections.unmodifiableList(actions); + this.defaultAlign = defaultAlign; + this.defaultAlignStyle = defaultAlignStyle; + this.defaultAssociatedContentId = defaultAssociatedContentId; + this.defaultCellWidth = defaultCellWidth; + this.defaultDisabledTitleStyle = defaultDisabledTitleStyle; + this.defaultEntityName = defaultEntityName; + this.defaultHideIfSelected = defaultHideIfSelected; + this.defaultMenuItemName = defaultMenuItemName; + this.defaultPermissionEntityAction = defaultPermissionEntityAction; + this.defaultPermissionOperation = defaultPermissionOperation; + this.defaultPermissionStatusId = defaultPermissionStatusId; + this.defaultPrivilegeEnumId = defaultPrivilegeEnumId; + this.defaultSelectedStyle = defaultSelectedStyle; + this.defaultTitleStyle = defaultTitleStyle; + this.defaultTooltipStyle = defaultTooltipStyle; + this.defaultWidgetStyle = defaultWidgetStyle; + this.extraIndex = extraIndex; + this.fillStyle = fillStyle; + this.id = id; + this.menuContainerStyleExdr = menuContainerStyleExdr; List<? extends Element> itemElements = UtilXml.childElementList(menuElement, "menu-item"); for (Element itemElement : itemElements) { ModelMenuItem modelMenuItem = new ModelMenuItem(itemElement, this); - modelMenuItem = this.addUpdateMenuItem(modelMenuItem); + modelMenuItem = this.addUpdateMenuItem(modelMenuItem, menuItemList, menuItemMap); } + menuItemList.trimToSize(); + this.menuItemList = Collections.unmodifiableList(menuItemList); + this.menuItemMap = Collections.unmodifiableMap(menuItemMap); + this.menuLocation = menuLocation; + this.menuWidth = menuWidth; + this.orientation = orientation; + this.selectedMenuItemContextFieldName = selectedMenuItemContextFieldName; + this.target = target; + this.title = title; + this.tooltip = tooltip; + this.type = type; + } + + @Override + public void accept(ModelWidgetVisitor visitor) throws Exception { + visitor.visit(this); } /** @@ -245,83 +299,33 @@ public class ModelMenu extends ModelWidg * * @return The same ModelMenuItem, or if merged with an existing item, the existing item. */ - public ModelMenuItem addUpdateMenuItem(ModelMenuItem modelMenuItem) { + private ModelMenuItem addUpdateMenuItem(ModelMenuItem modelMenuItem, List<ModelMenuItem> menuItemList, + Map<String, ModelMenuItem> menuItemMap) { // not a conditional item, see if a named item exists in Map - ModelMenuItem existingMenuItem = this.menuItemMap.get(modelMenuItem.getName()); + ModelMenuItem existingMenuItem = menuItemMap.get(modelMenuItem.getName()); if (existingMenuItem != null) { // does exist, update the item by doing a merge/override existingMenuItem.mergeOverrideModelMenuItem(modelMenuItem); return existingMenuItem; } else { // does not exist, add to List and Map - this.menuItemList.add(modelMenuItem); - this.menuItemMap.put(modelMenuItem.getName(), modelMenuItem); + menuItemList.add(modelMenuItem); + menuItemMap.put(modelMenuItem.getName(), modelMenuItem); return modelMenuItem; } } - public ModelMenuItem getModelMenuItemByName(String name) { - return this.menuItemMap.get(name); + public List<ModelWidgetAction> getActions() { + return actions; } - /** - * Renders this menu to a String, i.e. in a text format, as defined with the - * MenuStringRenderer implementation. - * - * @param writer The Writer that the menu text will be written to - * @param context Map containing the menu context; the following are - * reserved words in this context: parameters (Map), isError (Boolean), - * itemIndex (Integer, for lists only, otherwise null), bshInterpreter, - * menuName (String, optional alternate name for menu, defaults to the - * value of the name attribute) - * @param menuStringRenderer An implementation of the MenuStringRenderer - * interface that is responsible for the actual text generation for - * different menu elements; implementing you own makes it possible to - * use the same menu definitions for many types of menu UIs - */ - public void renderMenuString(Appendable writer, Map<String, Object> context, MenuStringRenderer menuStringRenderer) throws IOException { - ModelWidgetAction.runSubActions(this.actions, context); - if ("simple".equals(this.type)) { - this.renderSimpleMenuString(writer, context, menuStringRenderer); - } else { - throw new IllegalArgumentException("The type " + this.getType() + " is not supported for menu with name " + this.getName()); - } - } - - public void runActions(Map<String, Object> context) { - ModelWidgetAction.runSubActions(this.actions, context); - } - - public int renderedMenuItemCount(Map<String, Object> context) - { - int count = 0; - for (ModelMenuItem item : this.menuItemList) { - if (item.shouldBeRendered(context)) - count++; - } - return count; - } - - public void renderSimpleMenuString(Appendable writer, Map<String, Object> context, MenuStringRenderer menuStringRenderer) throws IOException { - // render menu open - menuStringRenderer.renderMenuOpen(writer, context, this); - - // render formatting wrapper open - menuStringRenderer.renderFormatSimpleWrapperOpen(writer, context, this); - - // render each menuItem row, except hidden & ignored rows - for (ModelMenuItem item : this.menuItemList) { - item.renderMenuItemString(writer, context, menuStringRenderer); - } - // render formatting wrapper close - menuStringRenderer.renderFormatSimpleWrapperClose(writer, context, this); - - // render menu close - menuStringRenderer.renderMenuClose(writer, context, this); + @Override + public String getBoundaryCommentName() { + return menuLocation + "#" + getName(); } - public String getDefaultEntityName() { - return this.defaultEntityName; + public String getCurrentMenuName(Map<String, Object> context) { + return getName(); } public String getDefaultAlign() { @@ -332,278 +336,205 @@ public class ModelMenu extends ModelWidg return this.defaultAlignStyle; } - public String getDefaultTitleStyle() { - return this.defaultTitleStyle; - } - - public String getDefaultDisabledTitleStyle() { - return this.defaultDisabledTitleStyle; - } - - public String getDefaultSelectedStyle() { - return this.defaultSelectedStyle; + public FlexibleStringExpander getDefaultAssociatedContentId() { + return defaultAssociatedContentId; } - public String getDefaultWidgetStyle() { - return this.defaultWidgetStyle; - } - - public String getDefaultTooltipStyle() { - return this.defaultTooltipStyle; - } - - public String getDefaultMenuItemName() { - return this.defaultMenuItemName; - } - - public String getFillStyle() { - return this.fillStyle; - } - - public String getSelectedMenuItemContextFieldName(Map<String, Object> context) { - String menuItemName = this.selectedMenuItemContextFieldName.get(context); - if (UtilValidate.isEmpty(menuItemName)) { - return this.defaultMenuItemName; - } - return menuItemName; - } - - public String getCurrentMenuName(Map<String, Object> context) { - return getName(); - } - - public String getId() { - return this.id; - } - - public String getTitle(Map<String, Object> context) { - return title.expandString(context); + public String getDefaultAssociatedContentId(Map<String, Object> context) { + return defaultAssociatedContentId.expandString(context); } - public String getTooltip() { - return this.tooltip; + public String getDefaultCellWidth() { + return this.defaultCellWidth; } - public String getType() { - return this.type; + public String getDefaultDisabledTitleStyle() { + return this.defaultDisabledTitleStyle; } - @Override - public String getBoundaryCommentName() { - return menuLocation + "#" + getName(); + public String getDefaultEntityName() { + return this.defaultEntityName; } - /** - * @param string - */ - public void setDefaultEntityName(String string) { - this.defaultEntityName = string; + public Boolean getDefaultHideIfSelected() { + return this.defaultHideIfSelected; } - - /** - * @param string - */ - public void setDefaultTitleStyle(String string) { - this.defaultTitleStyle = string; + public String getDefaultMenuItemName() { + return this.defaultMenuItemName; } - /** - * @param string - */ - public void setDefaultSelectedStyle(String string) { - this.defaultSelectedStyle = string; + public String getDefaultPermissionEntityAction() { + return this.defaultPermissionEntityAction; } - /** - * @param string - */ - public void setDefaultWidgetStyle(String string) { - this.defaultWidgetStyle = string; + public String getDefaultPermissionOperation() { + return this.defaultPermissionOperation; } - /** - * @param string - */ - public void setDefaultTooltipStyle(String string) { - this.defaultTooltipStyle = string; + public String getDefaultPermissionStatusId() { + return this.defaultPermissionStatusId; } - /** - * @param string - */ - public void setDefaultMenuItemName(String string) { - this.defaultMenuItemName = string; + public String getDefaultPrivilegeEnumId() { + return this.defaultPrivilegeEnumId; } - /** - * @param menuLocation the menu location to set - */ - public void setMenuLocation(String menuLocation) { - this.menuLocation = menuLocation; + public String getDefaultSelectedStyle() { + return this.defaultSelectedStyle; } - /** - * @param string - */ - public void setTarget(String string) { - this.target = string; + public String getDefaultTitleStyle() { + return this.defaultTitleStyle; } - /** - * @param string - */ - public void setId(String string) { - this.id = string; + public String getDefaultTooltipStyle() { + return this.defaultTooltipStyle; } - /** - * @param string - */ - public void setTitle(String string) { - this.title = FlexibleStringExpander.getInstance(string); + public String getDefaultWidgetStyle() { + return this.defaultWidgetStyle; } - /** - * @param string - */ - public void setTooltip(String string) { - this.tooltip = string; + public FlexibleStringExpander getExtraIndex() { + return extraIndex; } - /** - * @param string - */ - public void setType(String string) { - this.type = string; + public String getExtraIndex(Map<String, Object> context) { + try { + return extraIndex.expandString(context); + } catch (Exception ex) { + return ""; + } } - /** - * @param string - */ - public void setDefaultAssociatedContentId(String string) { - this.defaultAssociatedContentId = FlexibleStringExpander.getInstance(string); + public String getFillStyle() { + return this.fillStyle; } - /** - * @param string - */ - public void setMenuContainerStyle(String string) { - this.menuContainerStyleExdr = FlexibleStringExpander.getInstance(string); + public String getId() { + return this.id; } - public String getDefaultAssociatedContentId(Map<String, Object> context) { - return defaultAssociatedContentId.expandString(context); - } public String getMenuContainerStyle(Map<String, Object> context) { return menuContainerStyleExdr.expandString(context); } - /** - * @param string - */ - public void setDefaultPermissionOperation(String string) { - this.defaultPermissionOperation = string; + public FlexibleStringExpander getMenuContainerStyleExdr() { + return menuContainerStyleExdr; } - public String getDefaultPermissionStatusId() { - return this.defaultPermissionStatusId; + public List<ModelMenuItem> getMenuItemList() { + return menuItemList; } - /** - * @param string - */ - public void setDefaultPermissionStatusId(String string) { - this.defaultPermissionStatusId = string; + public Map<String, ModelMenuItem> getMenuItemMap() { + return menuItemMap; } - /** - * @param string - */ - public void setDefaultPrivilegeEnumId(String string) { - this.defaultPrivilegeEnumId = string; + public String getMenuLocation() { + return menuLocation; } - public String getDefaultPrivilegeEnumId() { - return this.defaultPrivilegeEnumId; + public String getMenuWidth() { + return this.menuWidth; } - /** - * @param string - */ - public void setOrientation(String string) { - this.orientation = string; + public ModelMenuItem getModelMenuItemByName(String name) { + return this.menuItemMap.get(name); } public String getOrientation() { return this.orientation; } - /** - * @param string - */ - public void setMenuWidth(String string) { - this.menuWidth = string; + public FlexibleMapAccessor<String> getSelectedMenuItemContextFieldName() { + return selectedMenuItemContextFieldName; } - public String getMenuWidth() { - return this.menuWidth; + public String getSelectedMenuItemContextFieldName(Map<String, Object> context) { + String menuItemName = this.selectedMenuItemContextFieldName.get(context); + if (UtilValidate.isEmpty(menuItemName)) { + return this.defaultMenuItemName; + } + return menuItemName; } - /** - * @param string - */ - public void setDefaultCellWidth(String string) { - this.defaultCellWidth = string; + public String getTarget() { + return target; } - public String getDefaultCellWidth() { - return this.defaultCellWidth; + public FlexibleStringExpander getTitle() { + return title; } - public String getDefaultPermissionOperation() { - return this.defaultPermissionOperation; + public String getTitle(Map<String, Object> context) { + return title.expandString(context); } - /** - * @param string - */ - public void setDefaultPermissionEntityAction(String string) { - this.defaultPermissionEntityAction = string; + public String getTooltip() { + return this.tooltip; } - public String getDefaultPermissionEntityAction() { - return this.defaultPermissionEntityAction; + public String getType() { + return this.type; + } + + public int renderedMenuItemCount(Map<String, Object> context) { + int count = 0; + for (ModelMenuItem item : this.menuItemList) { + if (item.shouldBeRendered(context)) + count++; + } + return count; } /** - * @param val + * Renders this menu to a String, i.e. in a text format, as defined with the + * MenuStringRenderer implementation. + * + * @param writer The Writer that the menu text will be written to + * @param context Map containing the menu context; the following are + * reserved words in this context: parameters (Map), isError (Boolean), + * itemIndex (Integer, for lists only, otherwise null), bshInterpreter, + * menuName (String, optional alternate name for menu, defaults to the + * value of the name attribute) + * @param menuStringRenderer An implementation of the MenuStringRenderer + * interface that is responsible for the actual text generation for + * different menu elements; implementing you own makes it possible to + * use the same menu definitions for many types of menu UIs */ - public void setDefaultHideIfSelected(Boolean val) { - this.defaultHideIfSelected = val; + public void renderMenuString(Appendable writer, Map<String, Object> context, MenuStringRenderer menuStringRenderer) + throws IOException { + ModelWidgetAction.runSubActions(this.actions, context); + if ("simple".equals(this.type)) { + this.renderSimpleMenuString(writer, context, menuStringRenderer); + } else { + throw new IllegalArgumentException("The type " + this.getType() + " is not supported for menu with name " + + this.getName()); + } } - public Boolean getDefaultHideIfSelected() { - return this.defaultHideIfSelected; - } + public void renderSimpleMenuString(Appendable writer, Map<String, Object> context, MenuStringRenderer menuStringRenderer) + throws IOException { + // render menu open + menuStringRenderer.renderMenuOpen(writer, context, this); - public List<ModelMenuItem> getMenuItemList() { - return menuItemList; - } - public String getExtraIndex(Map<String, Object> context) { - try { - return extraIndex.expandString(context); - } catch (Exception ex) { - return ""; + // render formatting wrapper open + menuStringRenderer.renderFormatSimpleWrapperOpen(writer, context, this); + + // render each menuItem row, except hidden & ignored rows + for (ModelMenuItem item : this.menuItemList) { + item.renderMenuItemString(writer, context, menuStringRenderer); } - } + // render formatting wrapper close + menuStringRenderer.renderFormatSimpleWrapperClose(writer, context, this); - public void setExtraIndex(String extraIndex) { - this.extraIndex = FlexibleStringExpander.getInstance(extraIndex); + // render menu close + menuStringRenderer.renderMenuClose(writer, context, this); } - @Override - public void accept(ModelWidgetVisitor visitor) throws Exception { - visitor.visit(this); + public void runActions(Map<String, Object> context) { + ModelWidgetAction.runSubActions(this.actions, context); } } |
Free forum by Nabble | Edit this page |