svn commit: r1447108 - /ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java

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

svn commit: r1447108 - /ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java

adrianc
Author: adrianc
Date: Mon Feb 18 00:10:25 2013
New Revision: 1447108

URL: http://svn.apache.org/r1447108
Log:
Small enhancements to EntityEcaRule.java: parse <eca> element only once, improve thread safety, add some accessor methods.

Modified:
    ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java

Modified: ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java?rev=1447108&r1=1447107&r2=1447108&view=diff
==============================================================================
--- ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java (original)
+++ ofbiz/trunk/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java Mon Feb 18 00:10:25 2013
@@ -18,12 +18,12 @@
  *******************************************************************************/
 package org.ofbiz.entityext.eca;
 
-import java.util.HashSet;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import javolution.util.FastList;
 import javolution.util.FastMap;
 
 import org.ofbiz.base.util.Debug;
@@ -34,54 +34,47 @@ import org.ofbiz.service.DispatchContext
 import org.w3c.dom.Element;
 
 /**
- * EntityEcaRule
+ * Entity event-condition-action rule.
  */
 @SuppressWarnings("serial")
 public final class EntityEcaRule implements java.io.Serializable {
 
     public static final String module = EntityEcaRule.class.getName();
 
-    private static final Set<String> nameSet = new HashSet<String>(2);
-    static {
-        nameSet.add("set");
-        nameSet.add("action");
-    }
-
-    protected final String entityName;
-    protected final String operationName;
-    protected final String eventName;
-    protected final boolean runOnError;
-    protected final List<EntityEcaCondition> conditions = FastList.newInstance();
-    protected final List<Object> actionsAndSets = FastList.newInstance();
-    protected boolean enabled = true;
+    private final String entityName;
+    private final String operationName;
+    private final String eventName;
+    private final boolean runOnError;
+    private final List<EntityEcaCondition> conditions;
+    private final List<Object> actionsAndSets;
+    private boolean enabled = true;
 
     public EntityEcaRule(Element eca) {
         this.entityName = eca.getAttribute("entity");
         this.operationName = eca.getAttribute("operation");
         this.eventName = eca.getAttribute("event");
         this.runOnError = "true".equals(eca.getAttribute("run-on-error"));
-
-        for (Element element: UtilXml.childElementList(eca, "condition")) {
-            conditions.add(new EntityEcaCondition(element, true));
-        }
-
-        for (Element element: UtilXml.childElementList(eca, "condition-field")) {
-            conditions.add(new EntityEcaCondition(element, false));
-        }
-
-        if (Debug.verboseOn()) {
-            Debug.logVerbose("Conditions: " + conditions, module);
-        }
-
-        for (Element actionOrSetElement: UtilXml.childElementList(eca, nameSet)) {
-            if ("action".equals(actionOrSetElement.getNodeName())) {
-                this.actionsAndSets.add(new EntityEcaAction(actionOrSetElement));
+        ArrayList<EntityEcaCondition> conditions = new ArrayList<EntityEcaCondition>();
+        ArrayList<Object> actionsAndSets = new ArrayList<Object>();
+        for (Element element: UtilXml.childElementList(eca)) {
+            if ("condition".equals(element.getNodeName())) {
+                conditions.add(new EntityEcaCondition(element, true));
+            } else if ("condition-field".equals(element.getNodeName())) {
+                conditions.add(new EntityEcaCondition(element, false));
+            } else if ("action".equals(element.getNodeName())) {
+                actionsAndSets.add(new EntityEcaAction(element));
+            } else if ("set".equals(element.getNodeName())) {
+                actionsAndSets.add(new EntityEcaSetField(element));
             } else {
-                this.actionsAndSets.add(new EntityEcaSetField(actionOrSetElement));
+                Debug.logWarning("Invalid eca child element " + element.getNodeName(), module);
             }
         }
-
+        conditions.trimToSize();
+        this.conditions = Collections.unmodifiableList(conditions);
+        actionsAndSets.trimToSize();
+        this.actionsAndSets = Collections.unmodifiableList(actionsAndSets);
         if (Debug.verboseOn()) {
+            Debug.logVerbose("Conditions: " + conditions, module);
             Debug.logVerbose("actions and sets (intermixed): " + actionsAndSets, module);
         }
     }
@@ -102,6 +95,14 @@ public final class EntityEcaRule impleme
         return this.runOnError;
     }
 
+    public List<Object> getActionsAndSets() {
+        return this.actionsAndSets;
+    }
+
+    public List<EntityEcaCondition> getConditions() {
+        return this.conditions;
+    }
+
     public void eval(String currentOperation, DispatchContext dctx, GenericEntity value, boolean isError, Set<String> actionsRun) throws GenericEntityException {
         if (!enabled) {
             Debug.logInfo("Entity ECA [" + this.entityName + "] on [" + this.eventName + "] is disabled; not running.", module);
@@ -148,6 +149,10 @@ public final class EntityEcaRule impleme
         }
     }
 
+    /**
+     * @deprecated Not thread-safe, no replacement.
+     * @param enabled
+     */
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }