svn commit: r1649283 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: ModelActionVisitor.java artifact/ArtifactInfoGatherer.java form/ModelFormAction.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1649283 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: ModelActionVisitor.java artifact/ArtifactInfoGatherer.java form/ModelFormAction.java

adrianc
Author: adrianc
Date: Sun Jan  4 03:07:40 2015
New Revision: 1649283

URL: http://svn.apache.org/r1649283
Log:
Refactor ModelFormAction.java to reuse common widget action models.

Modified:
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.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=1649283&r1=1649282&r2=1649283&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelActionVisitor.java Sun Jan  4 03:07:40 2015
@@ -51,10 +51,6 @@ public interface ModelActionVisitor {
 
     void visit(ModelFormAction.Service service);
 
-    void visit(ModelFormAction.EntityAnd entityAnd);
-
-    void visit(ModelFormAction.EntityCondition entityCondition);
-
     void visit(ModelMenuAction.SetField setField);
 
     void visit(ModelTreeAction.Script script);

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=1649283&r1=1649282&r2=1649283&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 Jan  4 03:07:40 2015
@@ -265,16 +265,6 @@ public final class ArtifactInfoGatherer
     }
 
     @Override
-    public void visit(ModelFormAction.EntityAnd entityAnd) {
-        infoContext.addEntityName(entityAnd.getFinder().getEntityName());
-    }
-
-    @Override
-    public void visit(ModelFormAction.EntityCondition entityCondition) {
-        infoContext.addEntityName(entityCondition.getFinder().getEntityName());
-    }
-
-    @Override
     public void visit(ModelFormAction.Service service) {
         infoContext.addServiceName(service.getServiceName());
         // TODO: Look for entityName in performFind service call

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java?rev=1649283&r1=1649282&r2=1649283&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java Sun Jan  4 03:07:40 2015
@@ -27,14 +27,11 @@ import java.util.Map;
 import java.util.regex.PatternSyntaxException;
 
 import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.collections.FlexibleMapAccessor;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
-import org.ofbiz.entity.finder.ByAndFinder;
-import org.ofbiz.entity.finder.ByConditionFinder;
 import org.ofbiz.entity.finder.EntityFinderUtil;
 import org.ofbiz.service.GenericServiceException;
 import org.ofbiz.service.ModelService;
@@ -44,7 +41,7 @@ import org.ofbiz.widget.WidgetWorker;
 import org.w3c.dom.Element;
 
 /**
- * Widget Library - Screen model class
+ * Abstract form action.
  */
 public abstract class ModelFormAction {
 
@@ -56,10 +53,16 @@ public abstract class ModelFormAction {
         for (Element actionElement : UtilXml.childElementList(parentElement)) {
             if ("service".equals(actionElement.getNodeName())) {
                 actions.add(new Service(modelForm, actionElement));
-            } else if ("entity-and".equals(actionElement.getNodeName())) {
-                actions.add(new EntityAnd(modelForm, actionElement));
-            } else if ("entity-condition".equals(actionElement.getNodeName())) {
-                actions.add(new EntityCondition(modelForm, actionElement));
+            } else if ("entity-and".equals(actionElement.getNodeName()) || "entity-condition".equals(actionElement.getNodeName())
+                    || "get-related".equals(actionElement.getNodeName())) {
+                if (!actionElement.hasAttribute("list")) {
+                    String listName = modelForm.getListName();
+                    if (UtilValidate.isEmpty(listName)) {
+                        listName = ModelForm.DEFAULT_FORM_RESULT_LIST_NAME;
+                    }
+                    actionElement.setAttribute("list", listName);
+                }
+                actions.add(ModelWidgetAction.newInstance(modelForm, actionElement));
             } else if ("call-parent-actions".equals(actionElement.getNodeName())) {
                 actions.add(new CallParentActions(modelForm, actionElement));
             } else {
@@ -70,78 +73,136 @@ public abstract class ModelFormAction {
     }
 
     @SuppressWarnings("serial")
+    public static class CallParentActions extends ModelWidgetAction {
+        private final ActionsKind kind;;
+        private final ModelForm modelForm;
+
+        public CallParentActions(ModelForm modelForm, Element callParentActionsElement) {
+            super(modelForm, callParentActionsElement);
+            String parentName = callParentActionsElement.getParentNode().getNodeName();
+            if ("actions".equals(parentName)) {
+                kind = ActionsKind.ACTIONS;
+            } else if ("row-actions".equals(parentName)) {
+                kind = ActionsKind.ROW_ACTIONS;
+            } else {
+                throw new IllegalArgumentException("Action element not supported for call-parent-actions : " + parentName);
+            }
+            ModelForm parentModel = modelForm.getParentModelForm();
+            if (parentModel == null) {
+                throw new IllegalArgumentException("call-parent-actions can only be used with form extending another form");
+            }
+            this.modelForm = modelForm;
+        }
+
+        @Override
+        public void accept(ModelActionVisitor visitor) {
+            visitor.visit(this);
+        }
+
+        @Override
+        public void runAction(Map<String, Object> context) {
+            ModelForm parentModel = modelForm.getParentModelForm();
+            switch (kind) {
+            case ACTIONS:
+                parentModel.runFormActions(context);
+                break;
+            case ROW_ACTIONS:
+                ModelWidgetAction.runSubActions(parentModel.getRowActions(), context);
+                break;
+            }
+        }
+
+        protected static enum ActionsKind {
+            ACTIONS, ROW_ACTIONS
+        }
+    }
+
+    @SuppressWarnings("serial")
     public static class Service extends ModelWidgetAction {
-        protected FlexibleStringExpander serviceNameExdr;
-        protected FlexibleMapAccessor<Map<String, Object>> resultMapNameAcsr;
-        protected FlexibleStringExpander autoFieldMapExdr;
-        protected FlexibleStringExpander resultMapListNameExdr;
-        protected Map<FlexibleMapAccessor<Object>, Object> fieldMap;
-        protected boolean ignoreError = false;
+        private final FlexibleStringExpander autoFieldMapExdr;
+        private final Map<FlexibleMapAccessor<Object>, Object> fieldMap;
+        private final boolean ignoreError;
+        private final FlexibleStringExpander resultMapListNameExdr;
+        private final FlexibleMapAccessor<Map<String, Object>> resultMapNameAcsr;
+        private final FlexibleStringExpander serviceNameExdr;
 
         public Service(ModelForm modelForm, Element serviceElement) {
-            super (modelForm, serviceElement);
+            super(modelForm, serviceElement);
             this.serviceNameExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("service-name"));
             this.resultMapNameAcsr = FlexibleMapAccessor.getInstance(serviceElement.getAttribute("result-map"));
-            if (this.resultMapNameAcsr.isEmpty()) this.resultMapNameAcsr = FlexibleMapAccessor.getInstance(serviceElement.getAttribute("result-map-name"));
             this.autoFieldMapExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("auto-field-map"));
-            if (UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list")) && UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list-name"))) {
-                if (UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list-iterator")) && UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list-iterator-name"))) {
+            FlexibleStringExpander resultMapListNameExdr = FlexibleStringExpander.getInstance("");
+            if (UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list"))
+                    && UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list-name"))) {
+                if (UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list-iterator"))
+                        && UtilValidate.isEmpty(serviceElement.getAttribute("result-map-list-iterator-name"))) {
                     String lstNm = modelForm.getListName();
                     if (UtilValidate.isEmpty(lstNm)) {
                         lstNm = ModelForm.DEFAULT_FORM_RESULT_LIST_NAME;
                     }
-                    this.resultMapListNameExdr = FlexibleStringExpander.getInstance(lstNm);
+                    resultMapListNameExdr = FlexibleStringExpander.getInstance(lstNm);
                 } else {
                     // this is deprecated, but support it for now anyway
-                    this.resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("result-map-list-iterator"));
-                    if (this.resultMapListNameExdr.isEmpty()) this.resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("result-map-list-iterator-name"));
+                    resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement
+                            .getAttribute("result-map-list-iterator"));
+                    if (resultMapListNameExdr.isEmpty())
+                        resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement
+                                .getAttribute("result-map-list-iterator-name"));
                 }
             } else {
-                this.resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("result-map-list"));
-                if (this.resultMapListNameExdr.isEmpty()) this.resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("result-map-list-name"));
+                resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement.getAttribute("result-map-list"));
+                if (resultMapListNameExdr.isEmpty())
+                    resultMapListNameExdr = FlexibleStringExpander.getInstance(serviceElement
+                            .getAttribute("result-map-list-name"));
             }
-
+            this.resultMapListNameExdr = resultMapListNameExdr;
             this.fieldMap = EntityFinderUtil.makeFieldMap(serviceElement);
             this.ignoreError = "true".equals(serviceElement.getAttribute("ignore-error"));
         }
 
         @Override
+        public void accept(ModelActionVisitor visitor) {
+            visitor.visit(this);
+        }
+
+        public String getServiceName() {
+            return serviceNameExdr.getOriginal();
+        }
+
+        @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) {
-                    if (! "true".equals(autoFieldMapString)) {
+                    if (!"true".equals(autoFieldMapString)) {
                         Map<String, Object> autoFieldMap = UtilGenerics.checkMap(context.get(autoFieldMapString));
-                        serviceContext = WidgetWorker.getDispatcher(context).getDispatchContext().makeValidContext(serviceNameExpanded, ModelService.IN_PARAM, autoFieldMap);
+                        serviceContext = WidgetWorker.getDispatcher(context).getDispatchContext()
+                                .makeValidContext(serviceNameExpanded, ModelService.IN_PARAM, autoFieldMap);
                     } else {
-                        serviceContext = WidgetWorker.getDispatcher(context).getDispatchContext().makeValidContext(serviceNameExpanded, ModelService.IN_PARAM, context);
+                        serviceContext = WidgetWorker.getDispatcher(context).getDispatchContext()
+                                .makeValidContext(serviceNameExpanded, ModelService.IN_PARAM, context);
                     }
                 } else {
                     serviceContext = new HashMap<String, Object>();
                 }
-
                 if (this.fieldMap != null) {
                     EntityFinderUtil.expandFieldMapToContext(this.fieldMap, context, serviceContext);
                 }
-
                 Map<String, Object> result = null;
                 if (this.ignoreError) {
                     result = WidgetWorker.getDispatcher(context).runSync(serviceNameExpanded, serviceContext, -1, true);
                 } else {
                     result = WidgetWorker.getDispatcher(context).runSync(serviceNameExpanded, serviceContext);
                 }
-
                 if (!this.resultMapNameAcsr.isEmpty()) {
                     this.resultMapNameAcsr.put(context, result);
-                    String queryString = (String)result.get("queryString");
+                    String queryString = (String) result.get("queryString");
                     context.put("queryString", queryString);
                     context.put("queryStringMap", result.get("queryStringMap"));
                     if (UtilValidate.isNotEmpty(queryString)) {
@@ -159,189 +220,21 @@ public abstract class ModelFormAction {
                 Object listObj = result.get(listName);
                 if (listObj != null) {
                     if (!(listObj instanceof List<?>) && !(listObj instanceof ListIterator<?>)) {
-                        throw new IllegalArgumentException("Error in form [" + this.getModelWidget().getName() + "] calling service with name [" + serviceNameExpanded + "]: the result that is supposed to be a List or ListIterator and is not.");
+                        throw new IllegalArgumentException("Error in form [" + this.getModelWidget().getName()
+                                + "] calling service with name [" + serviceNameExpanded
+                                + "]: the result that is supposed to be a List or ListIterator and is not.");
                     }
                     context.put("listName", listName);
                     context.put(listName, listObj);
                 }
             } catch (GenericServiceException e) {
-                String errMsg = "Error in form [" + this.getModelWidget().getName() + "] calling service with name [" + serviceNameExpanded + "]: " + e.toString();
+                String errMsg = "Error in form [" + this.getModelWidget().getName() + "] calling service with name ["
+                        + serviceNameExpanded + "]: " + e.toString();
                 Debug.logError(e, errMsg, module);
                 if (!this.ignoreError) {
                     throw new IllegalArgumentException(errMsg);
                 }
             }
         }
-
-        @Override
-        public void accept(ModelActionVisitor visitor) {
-            visitor.visit(this);
-        }
-
-        public String getServiceName() {
-            return serviceNameExdr.getOriginal();
-        }
-    }
-
-    @SuppressWarnings("serial")
-    public static class EntityAnd extends ModelWidgetAction {
-        protected ByAndFinder finder;
-
-        public EntityAnd(ModelForm modelForm, Element entityAndElement) {
-            super (modelForm, entityAndElement);
-
-            //don't want to default to the iterator, should be specified explicitly, not the default
-            // Document ownerDoc = entityAndElement.getOwnerDocument();
-            // boolean useCache = "true".equalsIgnoreCase(entityAndElement.getAttribute("use-cache"));
-            // if (!useCache) UtilXml.addChildElement(entityAndElement, "use-iterator", ownerDoc);
-
-            // make list-name optional
-            if (UtilValidate.isEmpty(entityAndElement.getAttribute("list")) && UtilValidate.isEmpty(entityAndElement.getAttribute("list-name"))) {
-                String lstNm = modelForm.getListName();
-                if (UtilValidate.isEmpty(lstNm)) {
-                    lstNm = ModelForm.DEFAULT_FORM_RESULT_LIST_NAME;
-                }
-                entityAndElement.setAttribute("list", lstNm);
-            }
-            finder = new ByAndFinder(entityAndElement);
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            try {
-                // don't want to do this: context.put("defaultFormResultList", null);
-                finder.runFind(context, WidgetWorker.getDelegator(context));
-                
-                /* NOTE DEJ20100925: this should not be running any more as it causes actions in a list or multi
-                 * form definition to overwrite the desired list elsewhere, this was the really old way of doing
-                 * it that was removed a long time ago and needs to stay gone to avoid issues; the form's list
-                 * should be found by explicitly matching the name:
-                Object obj = context.get(this.actualListName);
-                if (obj != null && ((obj instanceof List) || (obj instanceof EntityListIterator))) {
-                    String modelFormListName = modelForm.getListName();
-                    context.put(modelFormListName, obj);
-                }
-                 */
-            } catch (GeneralException e) {
-                String errMsg = "Error doing entity query by condition: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                throw new IllegalArgumentException(errMsg);
-            }
-        }
-
-        @Override
-        public void accept(ModelActionVisitor visitor) {
-            visitor.visit(this);
-        }
-
-        public ByAndFinder getFinder() {
-            return finder;
-        }
-    }
-
-    @SuppressWarnings("serial")
-    public static class EntityCondition extends ModelWidgetAction {
-        ByConditionFinder finder;
-        String actualListName;
-
-        public EntityCondition(ModelForm modelForm, Element entityConditionElement) {
-            super (modelForm, entityConditionElement);
-
-            //don't want to default to the iterator, should be specified explicitly, not the default
-            // Document ownerDoc = entityConditionElement.getOwnerDocument();
-            // boolean useCache = "true".equalsIgnoreCase(entityConditionElement.getAttribute("use-cache"));
-            // if (!useCache) UtilXml.addChildElement(entityConditionElement, "use-iterator", ownerDoc);
-
-            // make list-name optional
-            if (UtilValidate.isEmpty(entityConditionElement.getAttribute("list")) && UtilValidate.isEmpty(entityConditionElement.getAttribute("list-name"))) {
-                String lstNm = modelForm.getListName();
-                if (UtilValidate.isEmpty(lstNm)) {
-                    lstNm = ModelForm.DEFAULT_FORM_RESULT_LIST_NAME;
-                }
-                entityConditionElement.setAttribute("list", lstNm);
-            }
-            this.actualListName = entityConditionElement.getAttribute("list");
-            if (UtilValidate.isEmpty(this.actualListName)) this.actualListName = entityConditionElement.getAttribute("list-name");
-            finder = new ByConditionFinder(entityConditionElement);
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            try {
-                // don't want to do this: context.put("defaultFormResultList", null);
-                finder.runFind(context, WidgetWorker.getDelegator(context));
-                
-                /* NOTE DEJ20100925: this should not be running any more as it causes actions in a list or multi
-                 * form definition to overwrite the desired list elsewhere, this was the really old way of doing
-                 * it that was removed a long time ago and needs to stay gone to avoid issues; the form's list
-                 * should be found by explicitly matching the name:
-                Object obj = context.get(this.actualListName);
-                if (obj != null && ((obj instanceof List) || (obj instanceof EntityListIterator))) {
-                    String modelFormListName = modelForm.getListName();
-                    context.put(modelFormListName, obj);
-                }
-                 */
-            } catch (GeneralException e) {
-                String errMsg = "Error doing entity query by condition: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                throw new IllegalArgumentException(errMsg);
-            }
-        }
-
-        @Override
-        public void accept(ModelActionVisitor visitor) {
-            visitor.visit(this);
-        }
-
-        public ByConditionFinder getFinder() {
-            return finder;
-        }
-    }
-
-    @SuppressWarnings("serial")
-    public static class CallParentActions extends ModelWidgetAction {
-        protected static enum ActionsKind {
-            ACTIONS,
-            ROW_ACTIONS
-        };
-
-        protected ActionsKind kind;
-        private final ModelForm modelForm;
-
-        public CallParentActions(ModelForm modelForm, Element callParentActionsElement) {
-            super(modelForm, callParentActionsElement);
-            String parentName = callParentActionsElement.getParentNode().getNodeName();
-            if ("actions".equals(parentName)) {
-                kind = ActionsKind.ACTIONS;
-            } else if ("row-actions".equals(parentName)) {
-                kind = ActionsKind.ROW_ACTIONS;
-            } else {
-                throw new IllegalArgumentException("Action element not supported for call-parent-actions : " + parentName);
-            }
-
-            ModelForm parentModel = modelForm.getParentModelForm();
-            if (parentModel == null) {
-                throw new IllegalArgumentException("call-parent-actions can only be used with form extending another form");
-            }
-            this.modelForm = modelForm;
-        }
-
-        @Override
-        public void runAction(Map<String, Object> context) {
-            ModelForm parentModel = modelForm.getParentModelForm();
-            switch (kind) {
-                case ACTIONS:
-                    parentModel.runFormActions(context);
-                    break;
-                case ROW_ACTIONS:
-                    ModelWidgetAction.runSubActions(parentModel.getRowActions(), context);
-                    break;
-            }
-        }
-
-        @Override
-        public void accept(ModelActionVisitor visitor) {
-            visitor.visit(this);
-        }
     }
 }