You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2014/11/02 13:03:10 UTC

svn commit: r1636102 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: ModelActionVisitor.java ModelWidget.java ModelWidgetVisitor.java artifact/ArtifactInfoGatherer.java menu/ModelMenu.java menu/ModelMenuAction.java menu/ModelMenuItem.java

Author: adrianc
Date: Sun Nov  2 12:03:09 2014
New Revision: 1636102

URL: http://svn.apache.org/r1636102
Log:
Delegate most menu widget actions to ModelWidgetAction.

Modified:
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidget.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetVisitor.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java?rev=1636102&r1=1636101&r2=1636102&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java Sun Nov  2 12:03:09 2014
@@ -19,6 +19,7 @@
 package org.ofbiz.widget;
 
 import org.ofbiz.widget.form.ModelFormAction;
+import org.ofbiz.widget.menu.ModelMenuAction;
 
 /**
  *  A <code>ModelWidgetAction</code> visitor.
@@ -52,4 +53,6 @@ public interface ModelActionVisitor {
     void visit(ModelFormAction.EntityAnd entityAnd);
 
     void visit(ModelFormAction.EntityCondition entityCondition);
+
+    void visit(ModelMenuAction.SetField setField);
 }

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidget.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidget.java?rev=1636102&r1=1636101&r2=1636102&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidget.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidget.java Sun Nov  2 12:03:09 2014
@@ -44,6 +44,17 @@ public abstract class ModelWidget implem
 
     /**
      * Derived classes must call this constructor.
+     * @param name The widget name
+     */
+    protected ModelWidget(String name) {
+        this.name = name;
+        this.systemId = "anonymous";
+        this.startColumn = 0;
+        this.startLine = 0;
+    }
+
+    /**
+     * Derived classes must call this constructor.
      * @param widgetElement The XML Element for the widget
      */
     protected ModelWidget(Element widgetElement) {

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetVisitor.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetVisitor.java?rev=1636102&r1=1636101&r2=1636102&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetVisitor.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetVisitor.java Sun Nov  2 12:03:09 2014
@@ -20,6 +20,7 @@ package org.ofbiz.widget;
 
 import org.ofbiz.widget.form.ModelForm;
 import org.ofbiz.widget.menu.ModelMenu;
+import org.ofbiz.widget.menu.ModelMenuItem;
 import org.ofbiz.widget.screen.HtmlWidget;
 import org.ofbiz.widget.screen.IterateSectionWidget;
 import org.ofbiz.widget.screen.ModelScreen;
@@ -45,6 +46,8 @@ public interface ModelWidgetVisitor {
 
     void visit(ModelMenu modelMenu);
 
+    void visit(ModelMenuItem modelMenuItem);
+
     void visit(ModelScreen modelScreen);
 
     void visit(ModelScreenWidget.ColumnContainer columnContainer);

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java?rev=1636102&r1=1636101&r2=1636102&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java Sun Nov  2 12:03:09 2014
@@ -67,6 +67,8 @@ import org.ofbiz.widget.form.ModelFormFi
 import org.ofbiz.widget.form.ModelFormField.TextFindField;
 import org.ofbiz.widget.form.ModelFormField.TextareaField;
 import org.ofbiz.widget.menu.ModelMenu;
+import org.ofbiz.widget.menu.ModelMenuAction;
+import org.ofbiz.widget.menu.ModelMenuItem;
 import org.ofbiz.widget.screen.HtmlWidget;
 import org.ofbiz.widget.screen.HtmlWidget.HtmlTemplate;
 import org.ofbiz.widget.screen.HtmlWidget.HtmlTemplateDecorator;
@@ -279,6 +281,14 @@ public final class ArtifactInfoGatherer 
     }
 
     @Override
+    public void visit(ModelMenuAction.SetField setField) {
+    }
+
+    @Override
+    public void visit(ModelMenuItem modelMenuItem) {
+    }
+
+    @Override
     public void visit(ModelScreen modelScreen) {
         String screenLocation = modelScreen.getSourceLocation().concat("#").concat(modelScreen.getName());
         infoContext.addScreenLocation(screenLocation);

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=1636102&r1=1636101&r2=1636102&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 Sun Nov  2 12:03:09 2014
@@ -30,6 +30,7 @@ import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.collections.FlexibleMapAccessor;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.widget.ModelWidget;
+import org.ofbiz.widget.ModelWidgetAction;
 import org.ofbiz.widget.ModelWidgetVisitor;
 import org.w3c.dom.Element;
 
@@ -41,35 +42,27 @@ public class ModelMenu extends ModelWidg
 
     public static final String module = ModelMenu.class.getName();
 
-    protected String menuLocation;
-    protected String type;
-    protected String target;
-    protected String id;
-    protected FlexibleStringExpander title;
-    protected String tooltip;
+    protected List<ModelWidgetAction> actions;
+    protected String defaultAlign;
+    protected String defaultAlignStyle;
+    protected FlexibleStringExpander defaultAssociatedContentId;
+    protected String defaultCellWidth;
+    protected String defaultDisabledTitleStyle;
     protected String defaultEntityName;
-    protected String defaultTitleStyle;
-    protected String defaultWidgetStyle;
-    protected String defaultTooltipStyle;
-    protected String defaultSelectedStyle;
+    protected Boolean defaultHideIfSelected;
     protected String defaultMenuItemName;
-    protected String defaultPermissionOperation;
     protected String defaultPermissionEntityAction;
-    protected FlexibleStringExpander defaultAssociatedContentId;
+    protected String defaultPermissionOperation;
     protected String defaultPermissionStatusId;
     protected String defaultPrivilegeEnumId;
-    protected String orientation = "horizontal";
-    protected String menuWidth;
-    protected String defaultCellWidth;
-    protected Boolean defaultHideIfSelected;
-    protected String defaultDisabledTitleStyle;
-    protected FlexibleMapAccessor<String> selectedMenuItemContextFieldName;
-    protected FlexibleStringExpander menuContainerStyleExdr;
-    protected String defaultAlign;
-    protected String defaultAlignStyle;
-    protected String fillStyle;
+    protected String defaultSelectedStyle;
+    protected String defaultTitleStyle;
+    protected String defaultTooltipStyle;
+    protected String defaultWidgetStyle;
     protected FlexibleStringExpander extraIndex;
-
+    protected String fillStyle;
+    protected String id;
+    protected 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
@@ -80,14 +73,19 @@ public class ModelMenu extends ModelWidg
      * list clean and implement the override features for item definitions.
      */
     protected List<ModelMenuItem> menuItemList = new ArrayList<ModelMenuItem>();
-
     /** 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 List<ModelMenuAction> actions;
+    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 =====
@@ -156,7 +154,7 @@ public class ModelMenu extends ModelWidg
                 this.selectedMenuItemContextFieldName = parent.selectedMenuItemContextFieldName;
                 this.menuContainerStyleExdr = parent.menuContainerStyleExdr;
                 if (parent.actions != null) {
-                    this.actions = new ArrayList<ModelMenuAction>();
+                    this.actions = new ArrayList<ModelWidgetAction>();
                     this.actions.addAll(parent.actions);
                 }
             }
@@ -229,7 +227,7 @@ public class ModelMenu extends ModelWidg
                 this.actions = ModelMenuAction.readSubActions(this, actionsElement);
             } else {
                 this.actions.addAll(ModelMenuAction.readSubActions(this, actionsElement));
-                ArrayList<ModelMenuAction> actionsList = (ArrayList<ModelMenuAction>)this.actions;
+                ArrayList<ModelWidgetAction> actionsList = (ArrayList<ModelWidgetAction>)this.actions;
                 actionsList.trimToSize();
             }
         }
@@ -282,7 +280,7 @@ public class ModelMenu extends ModelWidg
      *   use the same menu definitions for many types of menu UIs
      */
     public void renderMenuString(Appendable writer, Map<String, Object> context, MenuStringRenderer menuStringRenderer) throws IOException {
-        ModelMenuAction.runSubActions(this.actions, context);
+        ModelWidgetAction.runSubActions(this.actions, context);
         if ("simple".equals(this.type)) {
             this.renderSimpleMenuString(writer, context, menuStringRenderer);
         } else {

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java?rev=1636102&r1=1636101&r2=1636102&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java Sun Nov  2 12:03:09 2014
@@ -18,8 +18,8 @@
  *******************************************************************************/
 package org.ofbiz.widget.menu;
 
-import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,88 +33,37 @@ import javax.servlet.http.HttpSession;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.ObjectType;
-import org.ofbiz.base.util.ScriptUtil;
-import org.ofbiz.base.util.UtilFormatOut;
 import org.ofbiz.base.util.UtilGenerics;
-import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.collections.FlexibleMapAccessor;
-import org.ofbiz.base.util.collections.ResourceBundleMapWrapper;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
-import org.ofbiz.entity.finder.ByAndFinder;
-import org.ofbiz.entity.finder.ByConditionFinder;
-import org.ofbiz.entity.finder.PrimaryKeyFinder;
-import org.ofbiz.entity.util.EntityUtilProperties;
-import org.ofbiz.service.GenericServiceException;
-import org.ofbiz.service.ModelService;
-import org.ofbiz.widget.WidgetWorker;
+import org.ofbiz.widget.ModelActionVisitor;
+import org.ofbiz.widget.ModelWidgetAction;
 import org.w3c.dom.Element;
 
-
 /**
  * Widget Library - Screen model class
  */
 public abstract class ModelMenuAction {
-    public static final String module = ModelMenuAction.class.getName();
-
-    protected ModelMenu modelMenu;
-    protected ModelMenuItem modelMenuItem;
-
-    public ModelMenuAction(ModelMenu modelMenu, Element actionElement) {
-        this.modelMenu = modelMenu;
-        if (Debug.verboseOn()) Debug.logVerbose("Reading Screen action with name: " + actionElement.getNodeName(), module);
-    }
-
-    public ModelMenuAction(ModelMenuItem modelMenuItem, Element actionElement) {
-        this.modelMenuItem = modelMenuItem;
-        this.modelMenu = modelMenuItem.getModelMenu();
-        if (Debug.verboseOn()) Debug.logVerbose("Reading Screen action with name: " + actionElement.getNodeName(), module);
-    }
-
-    public abstract void runAction(Map<String, Object> context);
 
-    public static List<ModelMenuAction> readSubActions(ModelMenuItem modelMenuItem, Element parentElement) {
-        return readSubActions(modelMenuItem.getModelMenu(), parentElement);
-    }
+    public static final String module = ModelMenuAction.class.getName();
 
-    public static List<ModelMenuAction> readSubActions(ModelMenu modelMenu, Element parentElement) {
+    public static List<ModelWidgetAction> readSubActions(ModelMenu modelMenu, Element parentElement) {
         List<? extends Element> actionElementList = UtilXml.childElementList(parentElement);
-        ArrayList<ModelMenuAction> actions = new ArrayList<ModelMenuAction>(actionElementList.size());
+        List<ModelWidgetAction> actions = new ArrayList<ModelWidgetAction>(actionElementList.size());
         for (Element actionElement : actionElementList) {
             if ("set".equals(actionElement.getNodeName())) {
                 actions.add(new SetField(modelMenu, actionElement));
-            } else if ("property-map".equals(actionElement.getNodeName())) {
-                actions.add(new PropertyMap(modelMenu, actionElement));
-            } else if ("property-to-field".equals(actionElement.getNodeName())) {
-                actions.add(new PropertyToField(modelMenu, actionElement));
-            } else if ("script".equals(actionElement.getNodeName())) {
-                actions.add(new Script(modelMenu, actionElement));
-            } else if ("service".equals(actionElement.getNodeName())) {
-                actions.add(new Service(modelMenu, actionElement));
-            } else if ("entity-one".equals(actionElement.getNodeName())) {
-                actions.add(new EntityOne(modelMenu, actionElement));
-            } else if ("entity-and".equals(actionElement.getNodeName())) {
-                actions.add(new EntityAnd(modelMenu, actionElement));
-            } else if ("entity-condition".equals(actionElement.getNodeName())) {
-                actions.add(new EntityCondition(modelMenu, actionElement));
             } else {
-                throw new IllegalArgumentException("Action element not supported with name: " + actionElement.getNodeName());
+                actions.add(ModelWidgetAction.toModelWidgetAction(modelMenu, actionElement));
             }
         }
-        actions.trimToSize();
-        return actions;
+        return Collections.unmodifiableList(actions);
     }
 
-    public static void runSubActions(List<ModelMenuAction> actions, Map<String, Object> context) {
-        if (actions == null) return;
-        for (ModelMenuAction action : actions) {
-            if (Debug.verboseOn()) Debug.logVerbose("Running screen action " + action.getClass().getName(), module);
-            action.runAction(context);
-        }
-    }
-
-    public static class SetField extends ModelMenuAction {
+    @SuppressWarnings("serial")
+    public static class SetField extends ModelWidgetAction {
         protected FlexibleMapAccessor<Object> field;
         protected FlexibleMapAccessor<Object> fromField;
         protected FlexibleStringExpander valueExdr;
@@ -236,257 +185,10 @@ public abstract class ModelMenuAction {
                 this.field.put(page, newValue);
             }
         }
-    }
-
-    public static class PropertyMap extends ModelMenuAction {
-        protected FlexibleStringExpander resourceExdr;
-        protected FlexibleMapAccessor<ResourceBundleMapWrapper> mapNameAcsr;
-        protected FlexibleStringExpander globalExdr;
-
-        public PropertyMap(ModelMenu modelMenu, Element setElement) {
-            super (modelMenu, setElement);
-            this.resourceExdr = FlexibleStringExpander.getInstance(setElement.getAttribute("resource"));
-            this.mapNameAcsr = FlexibleMapAccessor.getInstance(setElement.getAttribute("map-name"));
-            this.globalExdr = FlexibleStringExpander.getInstance(setElement.getAttribute("global"));
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            String globalStr = this.globalExdr.expandString(context);
-            // default to false
-            boolean global = "true".equals(globalStr);
-
-            Locale locale = (Locale) context.get("locale");
-            String resource = this.resourceExdr.expandString(context, locale);
-
-            ResourceBundleMapWrapper existingPropMap = this.mapNameAcsr.get(context);
-            if (existingPropMap == null) {
-                this.mapNameAcsr.put(context, UtilProperties.getResourceBundleMap(resource, locale, context));
-            } else {
-                try {
-                    existingPropMap.addBottomResourceBundle(resource);
-                } catch (IllegalArgumentException e) {
-                    // log the error, but don't let it kill everything just for a typo or bad char in an l10n file
-                    Debug.logError(e, "Error adding resource bundle [" + resource + "]: " + e.toString(), module);
-                }
-            }
-
-            if (global) {
-                Map<String, Object> globalCtx = UtilGenerics.checkMap(context.get("globalContext"));
-                if (globalCtx != null) {
-                    ResourceBundleMapWrapper globalExistingPropMap = this.mapNameAcsr.get(globalCtx);
-                    if (globalExistingPropMap == null) {
-                        this.mapNameAcsr.put(globalCtx, UtilProperties.getResourceBundleMap(resource, locale, context));
-                    } else {
-                        // is it the same object? if not add it in here too...
-                        if (existingPropMap != globalExistingPropMap) {
-                            try {
-                                globalExistingPropMap.addBottomResourceBundle(resource);
-                            } catch (IllegalArgumentException e) {
-                                // log the error, but don't let it kill everything just for a typo or bad char in an l10n file
-                                Debug.logError(e, "Error adding resource bundle [" + resource + "]: " + e.toString(), module);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    public static class PropertyToField extends ModelMenuAction {
-
-        protected FlexibleStringExpander resourceExdr;
-        protected FlexibleStringExpander propertyExdr;
-        protected FlexibleMapAccessor<Object> fieldAcsr;
-        protected FlexibleStringExpander defaultExdr;
-        protected boolean noLocale;
-        protected FlexibleMapAccessor<List<? extends Object>> argListAcsr;
-        protected FlexibleStringExpander globalExdr;
-
-        public PropertyToField(ModelMenu modelMenu, Element setElement) {
-            super (modelMenu, setElement);
-            this.resourceExdr = FlexibleStringExpander.getInstance(setElement.getAttribute("resource"));
-            this.propertyExdr = FlexibleStringExpander.getInstance(setElement.getAttribute("property"));
-            this.fieldAcsr = FlexibleMapAccessor.getInstance(setElement.getAttribute("field"));
-            this.defaultExdr = FlexibleStringExpander.getInstance(setElement.getAttribute("default"));
-            noLocale = "true".equals(setElement.getAttribute("no-locale"));
-            this.argListAcsr = FlexibleMapAccessor.getInstance(setElement.getAttribute("arg-list-name"));
-            this.globalExdr = FlexibleStringExpander.getInstance(setElement.getAttribute("global"));
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            // default to false
-
-            Locale locale = (Locale) context.get("locale");
-            String resource = this.resourceExdr.expandString(context, locale);
-            String property = this.propertyExdr.expandString(context, locale);
-
-            String value = null;
-            if (noLocale) {
-                value = EntityUtilProperties.getPropertyValue(resource, property, WidgetWorker.getDelegator(context));
-            } else {
-                value = EntityUtilProperties.getMessage(resource, property, locale, WidgetWorker.getDelegator(context));
-            }
-            if (UtilValidate.isEmpty(value)) {
-                value = this.defaultExdr.expandString(context);
-            }
-
-            // note that expanding the value string here will handle defaultValue and the string from
-            //  the properties file; if we decide later that we don't want the string from the properties
-            //  file to be expanded we should just expand the defaultValue at the beginning of this method.
-            value = FlexibleStringExpander.expandString(value, context);
-
-            if (!argListAcsr.isEmpty()) {
-                List<? extends Object> argList = argListAcsr.get(context);
-                if (UtilValidate.isNotEmpty(argList)) {
-                    value = MessageFormat.format(value, argList.toArray());
-                }
-            }
-
-            fieldAcsr.put(context, value);
-        }
-    }
-
-    public static class Script extends ModelMenuAction {
-        protected String location;
-        protected String method;
-
-        public Script(ModelMenu modelMenu, Element scriptElement) {
-            super (modelMenu, scriptElement);
-            String scriptLocation = scriptElement.getAttribute("location");
-            this.location = WidgetWorker.getScriptLocation(scriptLocation);
-            this.method = WidgetWorker.getScriptMethodName(scriptLocation);
-        }
 
         @Override
-        public void runAction(Map<String, Object> context) {
-            ScriptUtil.executeScript(this.location, this.method, context);
-        }
-    }
-
-    public static class Service extends ModelMenuAction {
-        protected FlexibleStringExpander serviceNameExdr;
-        protected FlexibleMapAccessor<Map<String, Object>> resultMapNameAcsr;
-        protected FlexibleStringExpander autoFieldMapExdr;
-        protected Map<FlexibleMapAccessor<Object>, FlexibleMapAccessor<Object>> fieldMap;
-
-        public Service(ModelMenu modelMenu, Element serviceElement) {
-            super (modelMenu, serviceElement);
-            this.serviceNameExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("service-name"));
-            this.resultMapNameAcsr = FlexibleMapAccessor.getInstance(serviceElement.getAttribute("result-map-name"));
-            this.autoFieldMapExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("auto-field-map"));
-
-            List<? extends Element> fieldMapElementList = UtilXml.childElementList(serviceElement, "field-map");
-            if (fieldMapElementList.size() > 0) {
-                this.fieldMap = new HashMap<FlexibleMapAccessor<Object>, FlexibleMapAccessor<Object>>();
-                for (Element fieldMapElement: fieldMapElementList) {
-                    // set the env-name for each field-name, noting that if no field-name is specified it defaults to the env-name
-                    this.fieldMap.put(
-                            FlexibleMapAccessor.getInstance(UtilFormatOut.checkEmpty(fieldMapElement.getAttribute("field-name"), fieldMapElement.getAttribute("env-name"))),
-                            FlexibleMapAccessor.getInstance(fieldMapElement.getAttribute("env-name")));
-                }
-            }
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            String serviceNameExpanded = this.serviceNameExdr.expandString(context);
-            if (UtilValidate.isEmpty(serviceNameExpanded)) {
-                throw new IllegalArgumentException("Service name was empty, expanded from: " + this.serviceNameExdr.getOriginal());
-            }
-
-            String autoFieldMapString = this.autoFieldMapExdr.expandString(context);
-            boolean autoFieldMapBool = !"false".equals(autoFieldMapString);
-
-            try {
-                Map<String, Object> serviceContext = null;
-                if (autoFieldMapBool) {
-                    serviceContext = WidgetWorker.getDispatcher(context).getDispatchContext().makeValidContext(serviceNameExpanded, ModelService.IN_PARAM, context);
-                } else {
-                    serviceContext = new HashMap<String, Object>();
-                }
-
-                if (this.fieldMap != null) {
-                    for (Map.Entry<FlexibleMapAccessor<Object>, FlexibleMapAccessor<Object>> entry: this.fieldMap.entrySet()) {
-                        FlexibleMapAccessor<Object> serviceContextFieldAcsr = entry.getKey();
-                        FlexibleMapAccessor<Object> contextEnvAcsr = entry.getValue();
-                        serviceContextFieldAcsr.put(serviceContext, contextEnvAcsr.get(context));
-                    }
-                }
-
-                Map<String, Object> result = WidgetWorker.getDispatcher(context).runSync(serviceNameExpanded, serviceContext);
-
-                if (!this.resultMapNameAcsr.isEmpty()) {
-                    this.resultMapNameAcsr.put(context, result);
-                } else {
-                    context.putAll(result);
-                }
-            } catch (GenericServiceException e) {
-                String errMsg = "Error calling service with name " + serviceNameExpanded + ": " + e.toString();
-                Debug.logError(e, errMsg, module);
-                throw new IllegalArgumentException(errMsg);
-            }
-        }
-    }
-
-    public static class EntityOne extends ModelMenuAction {
-        protected PrimaryKeyFinder finder;
-
-        public EntityOne(ModelMenu modelMenu, Element entityOneElement) {
-            super (modelMenu, entityOneElement);
-            finder = new PrimaryKeyFinder(entityOneElement);
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            try {
-                finder.runFind(context, WidgetWorker.getDelegator(context));
-            } catch (GeneralException e) {
-                String errMsg = "Error doing entity query by condition: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                throw new IllegalArgumentException(errMsg);
-            }
-        }
-    }
-
-    public static class EntityAnd extends ModelMenuAction {
-        protected ByAndFinder finder;
-
-        public EntityAnd(ModelMenu modelMenu, Element entityAndElement) {
-            super (modelMenu, entityAndElement);
-            finder = new ByAndFinder(entityAndElement);
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            try {
-                finder.runFind(context, WidgetWorker.getDelegator(context));
-            } catch (GeneralException e) {
-                String errMsg = "Error doing entity query by condition: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                throw new IllegalArgumentException(errMsg);
-            }
-        }
-    }
-
-    public static class EntityCondition extends ModelMenuAction {
-        ByConditionFinder finder;
-
-        public EntityCondition(ModelMenu modelMenu, Element entityConditionElement) {
-            super (modelMenu, entityConditionElement);
-            finder = new ByConditionFinder(entityConditionElement);
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            try {
-                finder.runFind(context, WidgetWorker.getDelegator(context));
-            } catch (GeneralException e) {
-                String errMsg = "Error doing entity query by condition: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                throw new IllegalArgumentException(errMsg);
-            }
+        public void accept(ModelActionVisitor visitor) {
+            visitor.visit(this);
         }
     }
 }

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java?rev=1636102&r1=1636101&r2=1636102&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java Sun Nov  2 12:03:09 2014
@@ -37,6 +37,9 @@ import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.collections.FlexibleMapAccessor;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericValue;
+import org.ofbiz.widget.ModelWidget;
+import org.ofbiz.widget.ModelWidgetAction;
+import org.ofbiz.widget.ModelWidgetVisitor;
 import org.ofbiz.widget.PortalPageWorker;
 import org.ofbiz.widget.WidgetWorker;
 import org.w3c.dom.Element;
@@ -45,78 +48,94 @@ import org.xml.sax.SAXException;
 /**
  * Widget Library - Form model class
  */
-public class ModelMenuItem {
+@SuppressWarnings("serial")
+public class ModelMenuItem extends ModelWidget {
 
     public static final String module = ModelMenuItem.class.getName();
 
-    protected ModelMenu modelMenu;
-
-    protected Map<String, Object> dataMap = new HashMap<String, Object>();
-    protected String name;
-    protected String entityName;
-    protected FlexibleStringExpander title;
-    protected FlexibleStringExpander tooltip;
-    protected FlexibleStringExpander parentPortalPageId;
-    protected String titleStyle;
-    protected String disabledTitleStyle;
-    protected String widgetStyle;
-    protected String tooltipStyle;
-    protected String selectedStyle;
-    protected Integer position = null;
-
+    protected List<ModelWidgetAction> actions;
+    protected String align;
+    protected String alignStyle;
     protected FlexibleStringExpander associatedContentId;
     protected String cellWidth;
-    protected Boolean hideIfSelected;
-    protected Boolean hasPermission;
+    protected ModelMenuCondition condition;
+    protected Map<String, Object> dataMap = new HashMap<String, Object>();
+    protected boolean disabled = false;
+    protected String disabledTitleStyle;
     protected String disableIfEmpty;
-    protected ModelMenu subMenu;
+    protected String entityName;
+    protected Boolean hasPermission;
+    protected Boolean hideIfSelected;
     protected Link link;
-
+    /** 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
+     * item name.
+     *
+     * When rendering the menu the order in this list should be following and it should not be
+     * 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 LinkedList<ModelMenuItem>();
+    /** 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 ModelMenu modelMenu;
+    protected String overrideName = null;
     protected ModelMenuItem parentMenuItem;
-    protected ModelMenuCondition condition;
-    protected boolean disabled = false;
-    protected List<ModelMenuAction> actions;
-    protected String align;
-    protected String alignStyle;
+    protected FlexibleStringExpander parentPortalPageId;
+    protected Integer position = null;
+    protected String selectedStyle;
+    protected ModelMenu subMenu;
+    protected FlexibleStringExpander title;
+    protected String titleStyle;
+    protected FlexibleStringExpander tooltip;
+    protected String tooltipStyle;
+    protected String widgetStyle;
 
     // ===== CONSTRUCTORS =====
-    /** Default Constructor */
-    public ModelMenuItem(ModelMenu modelMenu) {
-        this.modelMenu = modelMenu;
+    public ModelMenuItem(String name) {
+        super(name);
     }
 
-    /** XML Constructor */
-    public ModelMenuItem(Element fieldElement, ModelMenuItem modelMenuItem) {
-        parentMenuItem = modelMenuItem;
-        loadMenuItem(fieldElement, modelMenuItem.getModelMenu());
+    public ModelMenuItem(Element menuItemElement) {
+        super(menuItemElement);
+        loadMenuItem(menuItemElement);
     }
 
+    public ModelMenuItem(Element menuItemElement, ModelMenu modelMenu) {
+        super(menuItemElement);
+        loadMenuItem(menuItemElement, modelMenu);
+    }
 
-    public ModelMenuItem(Element fieldElement, ModelMenu modelMenu) {
-        loadMenuItem(fieldElement, modelMenu);
+    public ModelMenuItem(Element menuItemElement, ModelMenuItem modelMenuItem) {
+        super(menuItemElement);
+        parentMenuItem = modelMenuItem;
+        loadMenuItem(menuItemElement, modelMenuItem.getModelMenu());
     }
 
-    public void loadMenuItem(Element fieldElement, ModelMenu modelMenu) {
+    private void loadMenuItem(Element menuItemElement, ModelMenu modelMenu) {
         this.modelMenu = modelMenu;
-        this.name = fieldElement.getAttribute("name");
-        this.entityName = fieldElement.getAttribute("entity-name");
-        this.setTitle(fieldElement.getAttribute("title"));
-        this.setTooltip(fieldElement.getAttribute("tooltip"));
-        this.setParentPortalPageId(fieldElement.getAttribute("parent-portal-page-value"));
-        this.titleStyle = fieldElement.getAttribute("title-style");
-        this.disabledTitleStyle = fieldElement.getAttribute("disabled-title-style");
-        this.widgetStyle = fieldElement.getAttribute("widget-style");
-        this.tooltipStyle = fieldElement.getAttribute("tooltip-style");
-        this.selectedStyle = fieldElement.getAttribute("selected-style");
-        this.setHideIfSelected(fieldElement.getAttribute("hide-if-selected"));
-        this.disableIfEmpty = fieldElement.getAttribute("disable-if-empty");
-        this.align = fieldElement.getAttribute("align");
-        this.alignStyle = fieldElement.getAttribute("align-style");
+        loadMenuItem(menuItemElement);
+    }
 
-        String positionStr = fieldElement.getAttribute("position");
+    private void loadMenuItem(Element menuItemElement) {
+        this.entityName = menuItemElement.getAttribute("entity-name");
+        this.setTitle(menuItemElement.getAttribute("title"));
+        this.setTooltip(menuItemElement.getAttribute("tooltip"));
+        this.setParentPortalPageId(menuItemElement.getAttribute("parent-portal-page-value"));
+        this.titleStyle = menuItemElement.getAttribute("title-style");
+        this.disabledTitleStyle = menuItemElement.getAttribute("disabled-title-style");
+        this.widgetStyle = menuItemElement.getAttribute("widget-style");
+        this.tooltipStyle = menuItemElement.getAttribute("tooltip-style");
+        this.selectedStyle = menuItemElement.getAttribute("selected-style");
+        this.setHideIfSelected(menuItemElement.getAttribute("hide-if-selected"));
+        this.disableIfEmpty = menuItemElement.getAttribute("disable-if-empty");
+        this.align = menuItemElement.getAttribute("align");
+        this.alignStyle = menuItemElement.getAttribute("align-style");
+        String positionStr = menuItemElement.getAttribute("position");
         try {
             if (UtilValidate.isNotEmpty(positionStr)) {
                 position = Integer.valueOf(positionStr);
@@ -126,12 +145,12 @@ public class ModelMenuItem {
                     positionStr + "], using the default of the menu renderer", module);
         }
 
-        this.setAssociatedContentId(fieldElement.getAttribute("associated-content-id"));
-        this.cellWidth = fieldElement.getAttribute("cell-width");
+        this.setAssociatedContentId(menuItemElement.getAttribute("associated-content-id"));
+        this.cellWidth = menuItemElement.getAttribute("cell-width");
 
-        dataMap.put("name", this.name);
+        dataMap.put("name", getName());
 
-        Element subMenuElement = UtilXml.firstChildElement(fieldElement, "sub-menu");
+        Element subMenuElement = UtilXml.firstChildElement(menuItemElement, "sub-menu");
         if (subMenuElement != null) {
             String subMenuLocation = subMenuElement.getAttribute("location");
             String subMenuName = subMenuElement.getAttribute("name");
@@ -152,26 +171,26 @@ public class ModelMenuItem {
             }
         }
 
-        Element linkElement = UtilXml.firstChildElement(fieldElement, "link");
+        Element linkElement = UtilXml.firstChildElement(menuItemElement, "link");
         if (linkElement != null) {
             link = new Link(linkElement, this);
         }
 
         // read in add item defs, add/override one by one using the menuItemList and menuItemMap
-        List<? extends Element> itemElements = UtilXml.childElementList(fieldElement, "menu-item");
+        List<? extends Element> itemElements = UtilXml.childElementList(menuItemElement, "menu-item");
         for (Element itemElement: itemElements) {
             ModelMenuItem modelMenuItem = new ModelMenuItem(itemElement, this);
             modelMenuItem = this.addUpdateMenuItem(modelMenuItem);
         }
         // read condition under the "condition" element
-        Element conditionElement = UtilXml.firstChildElement(fieldElement, "condition");
+        Element conditionElement = UtilXml.firstChildElement(menuItemElement, "condition");
         if (conditionElement != null) {
             this.condition = new ModelMenuCondition(this, conditionElement);
         }
         // read all actions under the "actions" element
         Element actionsElement = UtilXml.firstChildElement(conditionElement, "actions");
         if (actionsElement != null) {
-            this.actions = ModelMenuAction.readSubActions(this, actionsElement);
+            this.actions = ModelWidgetAction.readSubActions(this, actionsElement);
         }
 
     }
@@ -215,13 +234,21 @@ public class ModelMenuItem {
          return this.disabled;
     }
 
+    @Override
+    public String getName() {
+        if (this.overrideName != null) {
+            return this.overrideName;
+        }
+        return super.getName();
+    }
+
     public void mergeOverrideModelMenuItem(ModelMenuItem overrideMenuItem) {
         if (overrideMenuItem == null)
             return;
 
         // incorporate updates for values that are not empty in the overrideMenuItem
-        if (UtilValidate.isNotEmpty(overrideMenuItem.name))
-            this.name = overrideMenuItem.name;
+        if (UtilValidate.isNotEmpty(overrideMenuItem.getName()))
+            this.overrideName = overrideMenuItem.getName();
         if (UtilValidate.isNotEmpty(overrideMenuItem.entityName))
             this.entityName = overrideMenuItem.entityName;
         if (UtilValidate.isNotEmpty(overrideMenuItem.parentPortalPageId))
@@ -262,15 +289,15 @@ public class ModelMenuItem {
         Locale locale = (Locale) context.get("locale");
            //Debug.logInfo("in ModelMenu, name:" + this.getName(), module);
         if (passed) {
-            ModelMenuAction.runSubActions(this.actions, context);
+            ModelWidgetAction.runSubActions(this.actions, context);
             String parentPortalPageId = this.getParentPortalPageId(context);
             if (UtilValidate.isNotEmpty(parentPortalPageId)) {
                 List<GenericValue> portalPages = PortalPageWorker.getPortalPages(parentPortalPageId, context);
                 if (UtilValidate.isNotEmpty(portalPages)) {
                     for (GenericValue portalPage : portalPages) {
                         if (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
-                            ModelMenuItem localItem = new ModelMenuItem(this.getModelMenu());
-                            localItem.name =  portalPage.getString("portalPageId");
+                            String itemName =  portalPage.getString("portalPageId");
+                            ModelMenuItem localItem = new ModelMenuItem(itemName);
                             localItem.setTitle((String) portalPage.get("portalPageName", locale));
                             localItem.link = new Link(this);
                             List<WidgetWorker.Parameter> linkParams = localItem.link.getParameterList();
@@ -298,7 +325,7 @@ public class ModelMenuItem {
         return modelMenu;
     }
 
-    public List<ModelMenuAction> getActions() {
+    public List<ModelWidgetAction> getActions() {
         return actions;
     }
 
@@ -322,11 +349,6 @@ public class ModelMenuItem {
         }
     }
 
-
-    public String getName() {
-        return name;
-    }
-
     public int getPosition() {
         if (this.position == null) {
             return 1;
@@ -427,13 +449,6 @@ public class ModelMenuItem {
     }
 
     /**
-     * @param string
-     */
-    public void setName(String string) {
-        name = string;
-    }
-
-    /**
      * @param i
      */
     public void setPosition(int i) {
@@ -546,7 +561,7 @@ public class ModelMenuItem {
     }
 
     public boolean isSelected(Map<String, Object> context) {
-        return this.name.equals(modelMenu.getSelectedMenuItemContextFieldName(context));
+        return getName().equals(modelMenu.getSelectedMenuItemContextFieldName(context));
     }
 
     public static class Link {
@@ -905,4 +920,9 @@ public class ModelMenuItem {
         }
 
     }
+
+    @Override
+    public void accept(ModelWidgetVisitor visitor) {
+        visitor.visit(this);
+    }
 }