Author: deepak
Date: Fri Nov 3 10:28:05 2017
New Revision: 1814160
URL: http://svn.apache.org/viewvc?rev=1814160&view=rev
Log:
Add ability to disable entity eca rule (OFBIZ-9897)
We have enabled flag in EntityEcaRule class, if its set false then entity eca
rule will not be execute.
But there is not way to disable entity eca.
We can add enabled flag in Entity ECA definition to disable the existing entity
eca rule.
Add new attribute on entity eca tag named enabled
Default value will be true for this.
If user want to disable existing OOTB entity eca rule, then user can define
same rule in custom component and set the enabled=false
Also as per current flow if same seca rule is define more then once, system
will execute all the rule, ideally it should not execute same rule (same rule,
condition and action) if its defined more than one.
Also need to ovride hasCode, equals and toString method for EntityEcaRule,
EntityEcaAction and EntityEcaCondition class file.
Modified:
ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entity-eca.xsd
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaAction.java
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaCondition.java
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaRule.java
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaUtil.java
Modified: ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entity-eca.xsd
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entity-eca.xsd?rev=1814160&r1=1814159&r2=1814160&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entity-eca.xsd (original)
+++ ofbiz/ofbiz-framework/trunk/framework/entity/dtd/entity-eca.xsd Fri Nov 3
10:28:05 2017
@@ -77,6 +77,14 @@ under the License.
</xs:restriction>
</xs:simpleType>
</xs:attribute>
+ <xs:attribute name="enabled" default="true">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
</xs:attributeGroup>
<xs:element name="condition">
<xs:complexType>
Modified:
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaAction.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaAction.java?rev=1814160&r1=1814159&r2=1814160&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaAction.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaAction.java
Fri Nov 3 10:28:05 2017
@@ -22,6 +22,7 @@ import java.util.Map;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.entity.GenericEntity;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
@@ -115,4 +116,50 @@ public final class EntityEcaAction imple
}
}
}
+
+ public String toString() {
+ StringBuilder buf = new StringBuilder();
+ if (UtilValidate.isNotEmpty(serviceName))
buf.append("[").append(serviceName).append("]");
+ if (UtilValidate.isNotEmpty(serviceMode))
buf.append("[").append(serviceMode).append("]");
+ if (UtilValidate.isNotEmpty(runAsUser))
buf.append("[").append(runAsUser).append("]");
+ if (UtilValidate.isNotEmpty(valueAttr))
buf.append("[").append(valueAttr).append("]");
+ if (UtilValidate.isNotEmpty(resultToValue))
buf.append("[").append(resultToValue).append("]");
+ if (UtilValidate.isNotEmpty(abortOnError))
buf.append("[").append(abortOnError).append("]");
+ if (UtilValidate.isNotEmpty(rollbackOnError))
buf.append("[").append(rollbackOnError).append("]");
+ if (UtilValidate.isNotEmpty(persist))
buf.append("[").append(persist).append("]");
+ return buf.toString();
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((serviceName == null) ? 0 :
serviceName.hashCode());
+ result = prime * result + ((serviceMode == null) ? 0 :
serviceMode.hashCode());
+ result = prime * result + ((runAsUser == null) ? 0 :
runAsUser.hashCode());
+ result = prime * result + ((valueAttr == null) ? 0 :
valueAttr.hashCode());
+ result = prime * result + (resultToValue ? 1231 : 1237);
+ result = prime * result + (abortOnError ? 1231 : 1237);
+ result = prime * result + (rollbackOnError ? 1231 : 1237);
+ result = prime * result + (persist ? 1231 : 1237);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof EntityEcaAction) {
+ EntityEcaAction other = (EntityEcaAction) obj;
+ if (!UtilValidate.areEqual(this.serviceName, other.serviceName))
return false;
+ if (!UtilValidate.areEqual(this.serviceMode, other.serviceMode))
return false;
+ if (!UtilValidate.areEqual(this.runAsUser, other.runAsUser))
return false;
+ if (!UtilValidate.areEqual(this.valueAttr, other.valueAttr))
return false;
+ if (this.resultToValue != other.resultToValue) return false;
+ if (this.abortOnError != other.abortOnError) return false;
+ if (this.rollbackOnError != other.rollbackOnError) return false;
+ if (this.persist != other.persist) return false;
+ return true;
+ } else {
+ return false;
+ }
+ }
}
Modified:
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaCondition.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaCondition.java?rev=1814160&r1=1814159&r2=1814160&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaCondition.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaCondition.java
Fri Nov 3 10:28:05 2017
@@ -110,14 +110,44 @@ public final class EntityEcaCondition im
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
- buf.append("[").append(lhsValueName).append("]");
- buf.append("[").append(operator).append("]");
- buf.append("[").append(rhsValueName).append("]");
- buf.append("[").append(constant).append("]");
- buf.append("[").append(compareType).append("]");
- buf.append("[").append(format).append("]");
+ if (UtilValidate.isNotEmpty(lhsValueName))
buf.append("[").append(lhsValueName).append("]");
+ if (UtilValidate.isNotEmpty(operator))
buf.append("[").append(operator).append("]");
+ if (UtilValidate.isNotEmpty(rhsValueName))
buf.append("[").append(rhsValueName).append("]");
+ if (UtilValidate.isNotEmpty(constant))
buf.append("[").append(constant).append("]");
+ if (UtilValidate.isNotEmpty(compareType))
buf.append("[").append(compareType).append("]");
+ if (UtilValidate.isNotEmpty(format))
buf.append("[").append(format).append("]");
return buf.toString();
}
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((lhsValueName == null) ? 0 :
lhsValueName.hashCode());
+ result = prime * result + ((operator == null) ? 0 :
operator.hashCode());
+ result = prime * result + ((rhsValueName == null) ? 0 :
rhsValueName.hashCode());
+ result = prime * result + (constant ? 1231 : 1237);
+ result = prime * result + ((compareType == null) ? 0 :
compareType.hashCode());
+ result = prime * result + ((format == null) ? 0 : format.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof EntityEcaCondition) {
+ EntityEcaCondition other = (EntityEcaCondition) obj;
+
+ if (!UtilValidate.areEqual(this.lhsValueName, other.lhsValueName))
return false;
+ if (!UtilValidate.areEqual(this.rhsValueName, other.rhsValueName))
return false;
+ if (!UtilValidate.areEqual(this.operator, other.operator)) return
false;
+ if (!UtilValidate.areEqual(this.compareType, other.compareType))
return false;
+ if (!UtilValidate.areEqual(this.format, other.format)) return
false;
+ if (this.constant != other.constant) return false;
+
+ return true;
+ } else {
+ return false;
+ }
+ }
protected List<String> getFieldNames() {
List<String> fieldNameList = new ArrayList<String>();
Modified:
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaRule.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaRule.java?rev=1814160&r1=1814159&r2=1814160&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaRule.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaRule.java
Fri Nov 3 10:28:05 2017
@@ -57,6 +57,7 @@ public final class EntityEcaRule impleme
this.operationName = eca.getAttribute("operation");
this.eventName = eca.getAttribute("event");
this.runOnError = "true".equals(eca.getAttribute("run-on-error"));
+ this.enabled = !"false".equals(eca.getAttribute("enabled"));
ArrayList<EntityEcaCondition> conditions = new
ArrayList<EntityEcaCondition>();
ArrayList<Object> actionsAndSets = new ArrayList<Object>();
for (Element element: UtilXml.childElementList(eca)) {
@@ -185,4 +186,57 @@ public final class EntityEcaRule impleme
public boolean isEnabled() {
return this.enabled;
}
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((entityName == null) ? 0 :
entityName.hashCode());
+ result = prime * result + ((operationName == null) ? 0 :
operationName.hashCode());
+ result = prime * result + ((eventName == null) ? 0 :
eventName.hashCode());
+ result = prime * result + ((actionsAndSets == null) ? 0 :
actionsAndSets.hashCode());
+ result = prime * result + ((conditions == null) ? 0 :
conditions.hashCode());
+ result = prime * result + ((conditionFieldNames == null) ? 0 :
conditionFieldNames.hashCode());
+ result = prime * result + (enabled ? 1231 : 1237);
+ result = prime * result + (runOnError ? 1231 : 1237);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof EntityEcaRule) {
+ EntityEcaRule other = (EntityEcaRule) obj;
+ if (!UtilValidate.areEqual(this.entityName, other.entityName)) {
+ return false;
+ }
+ if (!UtilValidate.areEqual(this.operationName,
other.operationName)) {
+ return false;
+ }
+ if (!UtilValidate.areEqual(this.eventName, other.eventName)) {
+ return false;
+ }
+ if (!this.conditions.equals(other.conditions)) {
+ return false;
+ }
+ if (!this.actionsAndSets.equals(other.actionsAndSets)) {
+ return false;
+ }
+ if (!this.conditionFieldNames.equals(other.conditionFieldNames)) {
+ return false;
+ }
+
+ if (this.runOnError != other.runOnError) {
+ return false;
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "EntityEcaRule:" + this.entityName + ":" + this.operationName +
":" + this.eventName + ":runOnError=" + this.runOnError + ":enabled=" +
this.enabled + ":conditions=" + this.conditions + ":actionsAndSets=" +
this.actionsAndSets + ":conditionFieldNames" + this.conditionFieldNames;
+ }
}
Modified:
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaUtil.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaUtil.java?rev=1814160&r1=1814159&r2=1814160&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaUtil.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/entityext/src/main/java/org/apache/ofbiz/entityext/eca/EntityEcaUtil.java
Fri Nov 3 10:28:05 2017
@@ -121,6 +121,11 @@ public final class EntityEcaUtil {
eventMap.put(eventName, rules);
}
}
+ //remove the old rule if found and keep the recent one
+ //This will prevent duplicate rule execution along with
enabled/disabled eca workflow
+ if (rules.remove(rule)) {
+ Debug.logWarning("Duplicate Entity ECA [" + entityName +
"]" + "for operation [ "+ rule.getOperationName() + "] " + "on [" + eventName +
"] ", module);
+ }
rules.add(rule);
}
}