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 2012/05/17 16:14:03 UTC
svn commit: r1339610 - in /ofbiz/trunk/framework/minilang/src:
META-INF/services/ org/ofbiz/minilang/
org/ofbiz/minilang/method/conditional/ org/ofbiz/minilang/method/ifops/
Author: adrianc
Date: Thu May 17 14:14:03 2012
New Revision: 1339610
URL: http://svn.apache.org/viewvc?rev=1339610&view=rev
Log:
Consolidated some redundant Mini-language classes.
Removed:
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ifops/IfCompare.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ifops/IfCompareField.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ifops/IfEmpty.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ifops/IfHasPermission.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ifops/IfRegexp.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ifops/IfValidateMethod.java
Modified:
ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory
ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.conditional.ConditionalFactory
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/MiniLangUtil.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CombinedCondition.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareCondition.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareFieldCondition.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/Conditional.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ConditionalFactory.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java
ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java
Modified: ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation%24Factory?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory (original)
+++ ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.MethodOperation$Factory Thu May 17 14:14:03 2012
@@ -25,7 +25,13 @@ org.ofbiz.minilang.method.callops.CallSi
org.ofbiz.minilang.method.callops.CallSimpleMethod$CallSimpleMethodFactory
org.ofbiz.minilang.method.callops.Return$ReturnFactory
org.ofbiz.minilang.method.callops.SetServiceFields$SetServiceFieldsFactory
+org.ofbiz.minilang.method.conditional.CompareCondition$CompareConditionFactory
+org.ofbiz.minilang.method.conditional.CompareFieldCondition$CompareFieldConditionFactory
+org.ofbiz.minilang.method.conditional.EmptyCondition$EmptyConditionFactory
+org.ofbiz.minilang.method.conditional.HasPermissionCondition$HasPermissionConditionFactory
org.ofbiz.minilang.method.conditional.MasterIf$MasterIfFactory
+org.ofbiz.minilang.method.conditional.RegexpCondition$RegexpConditionFactory
+org.ofbiz.minilang.method.conditional.ValidateMethodCondition$ValidateMethodConditionFactory
org.ofbiz.minilang.method.entityops.ClearCacheLine$ClearCacheLineFactory
org.ofbiz.minilang.method.entityops.ClearEntityCaches$ClearEntityCachesFactory
org.ofbiz.minilang.method.entityops.CloneValue$CloneValueFactory
@@ -92,14 +98,8 @@ org.ofbiz.minilang.method.eventops.Reque
org.ofbiz.minilang.method.eventops.SessionToField$SessionToFieldFactory
org.ofbiz.minilang.method.eventops.WebappPropertyToField$WebappPropertyToFieldFactory
org.ofbiz.minilang.method.ifops.CheckPermission$CheckPermissionFactory
-org.ofbiz.minilang.method.ifops.IfCompare$IfCompareFactory
-org.ofbiz.minilang.method.ifops.IfCompareField$IfCompareFieldFactory
-org.ofbiz.minilang.method.ifops.IfEmpty$IfEmptyFactory
-org.ofbiz.minilang.method.ifops.IfHasPermission$IfHasPermissionFactory
org.ofbiz.minilang.method.ifops.IfInstanceOf$IfInstanceOfFactory
org.ofbiz.minilang.method.ifops.IfNotEmpty$IfNotEmptyFactory
-org.ofbiz.minilang.method.ifops.IfRegexp$IfRegexpFactory
-org.ofbiz.minilang.method.ifops.IfValidateMethod$IfValidateMethodFactory
org.ofbiz.minilang.method.otherops.Calculate$CalculateFactory
org.ofbiz.minilang.method.otherops.Log$LogFactory
org.ofbiz.minilang.method.otherops.PropertyToField$PropertyToFieldFactory
Modified: ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.conditional.ConditionalFactory
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.conditional.ConditionalFactory?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.conditional.ConditionalFactory (original)
+++ ofbiz/trunk/framework/minilang/src/META-INF/services/org.ofbiz.minilang.method.conditional.ConditionalFactory Thu May 17 14:14:03 2012
@@ -25,4 +25,3 @@ org.ofbiz.minilang.method.conditional.Em
org.ofbiz.minilang.method.conditional.HasPermissionCondition$HasPermissionConditionFactory
org.ofbiz.minilang.method.conditional.RegexpCondition$RegexpConditionFactory
org.ofbiz.minilang.method.conditional.ValidateMethodCondition$ValidateMethodConditionFactory
-
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/MiniLangUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/MiniLangUtil.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/MiniLangUtil.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/MiniLangUtil.java Thu May 17 14:14:03 2012
@@ -53,7 +53,13 @@ import org.ofbiz.minilang.method.callops
import org.ofbiz.minilang.method.callops.CallServiceAsynch;
import org.ofbiz.minilang.method.callops.CallSimpleMethod;
import org.ofbiz.minilang.method.callops.SetServiceFields;
+import org.ofbiz.minilang.method.conditional.CompareCondition;
+import org.ofbiz.minilang.method.conditional.CompareFieldCondition;
+import org.ofbiz.minilang.method.conditional.EmptyCondition;
+import org.ofbiz.minilang.method.conditional.HasPermissionCondition;
import org.ofbiz.minilang.method.conditional.MasterIf;
+import org.ofbiz.minilang.method.conditional.RegexpCondition;
+import org.ofbiz.minilang.method.conditional.ValidateMethodCondition;
import org.ofbiz.minilang.method.entityops.EntityAnd;
import org.ofbiz.minilang.method.entityops.EntityCondition;
import org.ofbiz.minilang.method.entityops.EntityCount;
@@ -67,14 +73,8 @@ import org.ofbiz.minilang.method.envops.
import org.ofbiz.minilang.method.envops.IterateMap;
import org.ofbiz.minilang.method.envops.Loop;
import org.ofbiz.minilang.method.envops.While;
-import org.ofbiz.minilang.method.ifops.IfCompare;
-import org.ofbiz.minilang.method.ifops.IfCompareField;
-import org.ofbiz.minilang.method.ifops.IfEmpty;
-import org.ofbiz.minilang.method.ifops.IfHasPermission;
import org.ofbiz.minilang.method.ifops.IfInstanceOf;
import org.ofbiz.minilang.method.ifops.IfNotEmpty;
-import org.ofbiz.minilang.method.ifops.IfRegexp;
-import org.ofbiz.minilang.method.ifops.IfValidateMethod;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -244,22 +244,22 @@ public final class MiniLangUtil {
findEntityNamesUsed(((MasterIf) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
} else if (methodOperation instanceof While) {
findEntityNamesUsed(((While) methodOperation).getThenSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfValidateMethod) {
- findEntityNamesUsed(((IfValidateMethod) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof ValidateMethodCondition) {
+ findEntityNamesUsed(((ValidateMethodCondition) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
} else if (methodOperation instanceof IfInstanceOf) {
findEntityNamesUsed(((IfInstanceOf) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompare) {
- findEntityNamesUsed(((IfCompare) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompareField) {
- findEntityNamesUsed(((IfCompareField) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfRegexp) {
- findEntityNamesUsed(((IfRegexp) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfEmpty) {
- findEntityNamesUsed(((IfEmpty) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof CompareCondition) {
+ findEntityNamesUsed(((CompareCondition) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof CompareFieldCondition) {
+ findEntityNamesUsed(((CompareFieldCondition) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof RegexpCondition) {
+ findEntityNamesUsed(((RegexpCondition) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof EmptyCondition) {
+ findEntityNamesUsed(((EmptyCondition) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
} else if (methodOperation instanceof IfNotEmpty) {
findEntityNamesUsed(((IfNotEmpty) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfHasPermission) {
- findEntityNamesUsed(((IfHasPermission) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof HasPermissionCondition) {
+ findEntityNamesUsed(((HasPermissionCondition) methodOperation).getAllSubOps(), allEntityNames, simpleMethodsVisited);
}
}
}
@@ -303,22 +303,22 @@ public final class MiniLangUtil {
findServiceNamesCalled(((MasterIf) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
} else if (methodOperation instanceof While) {
findServiceNamesCalled(((While) methodOperation).getThenSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfValidateMethod) {
- findServiceNamesCalled(((IfValidateMethod) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof ValidateMethodCondition) {
+ findServiceNamesCalled(((ValidateMethodCondition) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
} else if (methodOperation instanceof IfInstanceOf) {
findServiceNamesCalled(((IfInstanceOf) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompare) {
- findServiceNamesCalled(((IfCompare) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfCompareField) {
- findServiceNamesCalled(((IfCompareField) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfRegexp) {
- findServiceNamesCalled(((IfRegexp) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfEmpty) {
- findServiceNamesCalled(((IfEmpty) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof CompareCondition) {
+ findServiceNamesCalled(((CompareCondition) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof CompareFieldCondition) {
+ findServiceNamesCalled(((CompareFieldCondition) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof RegexpCondition) {
+ findServiceNamesCalled(((RegexpCondition) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof EmptyCondition) {
+ findServiceNamesCalled(((EmptyCondition) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
} else if (methodOperation instanceof IfNotEmpty) {
findServiceNamesCalled(((IfNotEmpty) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
- } else if (methodOperation instanceof IfHasPermission) {
- findServiceNamesCalled(((IfHasPermission) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
+ } else if (methodOperation instanceof HasPermissionCondition) {
+ findServiceNamesCalled(((HasPermissionCondition) methodOperation).getAllSubOps(), allServiceNames, simpleMethodsVisited);
}
}
}
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CombinedCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CombinedCondition.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CombinedCondition.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CombinedCondition.java Thu May 17 14:14:03 2012
@@ -31,7 +31,7 @@ import org.ofbiz.minilang.method.MethodC
import org.w3c.dom.Element;
/**
- * Implements generic combining conditions such as or, and, etc.
+ * Implements the <and>, <or>, <not>, and <xor> elements.
*/
public abstract class CombinedCondition extends MiniLangElement implements Conditional {
@@ -59,6 +59,9 @@ public abstract class CombinedCondition
messageBuffer.append(")");
}
+ /**
+ * A <and> element factory.
+ */
public static final class AndConditionFactory extends ConditionalFactory<CombinedCondition> {
@Override
public CombinedCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
@@ -87,6 +90,9 @@ public abstract class CombinedCondition
}
}
+ /**
+ * A <not> element factory.
+ */
public static final class NotConditionFactory extends ConditionalFactory<CombinedCondition> {
@Override
public CombinedCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
@@ -116,6 +122,9 @@ public abstract class CombinedCondition
}
}
+ /**
+ * A <or> element factory.
+ */
public static final class OrConditionFactory extends ConditionalFactory<CombinedCondition> {
@Override
public CombinedCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
@@ -144,6 +153,9 @@ public abstract class CombinedCondition
}
}
+ /**
+ * A <xor> element factory.
+ */
public static final class XorConditionFactory extends ConditionalFactory<CombinedCondition> {
@Override
public CombinedCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareCondition.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareCondition.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareCondition.java Thu May 17 14:14:03 2012
@@ -18,23 +18,29 @@
*******************************************************************************/
package org.ofbiz.minilang.method.conditional;
+import java.util.Collections;
+import java.util.List;
+
+import javolution.util.FastList;
+
import org.ofbiz.base.util.ObjectType;
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.minilang.MiniLangElement;
import org.ofbiz.minilang.MiniLangException;
import org.ofbiz.minilang.MiniLangRuntimeException;
import org.ofbiz.minilang.MiniLangUtil;
import org.ofbiz.minilang.MiniLangValidate;
import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
import org.w3c.dom.Element;
/**
- * Implements compare to a constant condition.
+ * Implements the <if-compare> element.
*/
-public final class CompareCondition extends MiniLangElement implements Conditional {
+public final class CompareCondition extends MethodOperation implements Conditional {
private final Compare compare;
private final FlexibleMapAccessor<Object> fieldFma;
@@ -43,6 +49,9 @@ public final class CompareCondition exte
private final Class<?> targetClass;
private final String type;
private final FlexibleStringExpander valueFse;
+ // Sub-operations are used only when this is a method operation.
+ private final List<MethodOperation> elseSubOps;
+ private final List<MethodOperation> subOps;
public CompareCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
super(element, simpleMethod);
@@ -52,7 +61,6 @@ public final class CompareCondition exte
MiniLangValidate.constantAttributes(simpleMethod, element, "operator", "type");
MiniLangValidate.constantPlusExpressionAttributes(simpleMethod, element, "value", "format");
MiniLangValidate.expressionAttributes(simpleMethod, element, "field");
- MiniLangValidate.noChildElements(simpleMethod, element);
}
this.fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field"));
this.formatFse = FlexibleStringExpander.getInstance(element.getAttribute("format"));
@@ -77,6 +85,18 @@ public final class CompareCondition exte
}
this.targetClass = targetClass;
this.valueFse = FlexibleStringExpander.getInstance(element.getAttribute("value"));
+ Element childElement = UtilXml.firstChildElement(element);
+ if (childElement != null && !"else".equals(childElement.getTagName())) {
+ this.subOps = Collections.unmodifiableList(SimpleMethod.readOperations(element, simpleMethod));
+ } else {
+ this.subOps = null;
+ }
+ Element elseElement = UtilXml.firstChildElement(element, "else");
+ if (elseElement != null) {
+ this.elseSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(elseElement, simpleMethod));
+ } else {
+ this.elseSubOps = null;
+ }
}
@Override
@@ -99,6 +119,34 @@ public final class CompareCondition exte
return false;
}
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ if (checkCondition(methodContext)) {
+ if (this.subOps != null) {
+ return SimpleMethod.runSubOps(subOps, methodContext);
+ }
+ } else {
+ if (elseSubOps != null) {
+ return SimpleMethod.runSubOps(elseSubOps, methodContext);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+ }
+
+ public List<MethodOperation> getAllSubOps() {
+ List<MethodOperation> allSubOps = FastList.newInstance();
+ if (this.subOps != null)
+ allSubOps.addAll(this.subOps);
+ if (this.elseSubOps != null)
+ allSubOps.addAll(this.elseSubOps);
+ return allSubOps;
+ }
+
public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) {
String value = valueFse.expandString(methodContext.getEnvMap());
String format = formatFse.expandString(methodContext.getEnvMap());
@@ -119,12 +167,41 @@ public final class CompareCondition exte
}
}
- public static final class CompareConditionFactory extends ConditionalFactory<CompareCondition> {
+ @Override
+ public String rawString() {
+ return toString();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("<if-compare ");
+ sb.append("field=\"").append(this.fieldFma).append("\" operator=\"").append(operator).append("\" ");
+ if (!this.valueFse.isEmpty()) {
+ sb.append("value=\"").append(this.valueFse).append("\" ");
+ }
+ if (!this.type.isEmpty()) {
+ sb.append("type=\"").append(this.type).append("\" ");
+ }
+ if (!this.formatFse.isEmpty()) {
+ sb.append("format=\"").append(this.formatFse).append("\" ");
+ }
+ sb.append("/>");
+ return sb.toString();
+ }
+
+ /**
+ * A <if-compare> element factory.
+ */
+ public static final class CompareConditionFactory extends ConditionalFactory<CompareCondition> implements Factory<CompareCondition> {
@Override
public CompareCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
return new CompareCondition(element, simpleMethod);
}
+ public CompareCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new CompareCondition(element, simpleMethod);
+ }
+
@Override
public String getName() {
return "if-compare";
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareFieldCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareFieldCondition.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareFieldCondition.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/CompareFieldCondition.java Thu May 17 14:14:03 2012
@@ -18,23 +18,29 @@
*******************************************************************************/
package org.ofbiz.minilang.method.conditional;
+import java.util.Collections;
+import java.util.List;
+
+import javolution.util.FastList;
+
import org.ofbiz.base.util.ObjectType;
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.minilang.MiniLangElement;
import org.ofbiz.minilang.MiniLangException;
import org.ofbiz.minilang.MiniLangRuntimeException;
import org.ofbiz.minilang.MiniLangUtil;
import org.ofbiz.minilang.MiniLangValidate;
import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
import org.w3c.dom.Element;
/**
- * Implements compare to a field condition.
+ * Implements the <if-compare-field> element.
*/
-public final class CompareFieldCondition extends MiniLangElement implements Conditional {
+public final class CompareFieldCondition extends MethodOperation implements Conditional {
// This method is needed only during the v1 to v2 transition
private static boolean autoCorrect(Element element) {
@@ -54,6 +60,9 @@ public final class CompareFieldCondition
private final FlexibleMapAccessor<Object> toFieldFma;
private final Class<?> targetClass;
private final String type;
+ // Sub-operations are used only when this is a method operation.
+ private final List<MethodOperation> elseSubOps;
+ private final List<MethodOperation> subOps;
public CompareFieldCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
super(element, simpleMethod);
@@ -86,6 +95,18 @@ public final class CompareFieldCondition
}
}
this.targetClass = targetClass;
+ Element childElement = UtilXml.firstChildElement(element);
+ if (childElement != null && !"else".equals(childElement.getTagName())) {
+ this.subOps = Collections.unmodifiableList(SimpleMethod.readOperations(element, simpleMethod));
+ } else {
+ this.subOps = null;
+ }
+ Element elseElement = UtilXml.firstChildElement(element, "else");
+ if (elseElement != null) {
+ this.elseSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(elseElement, simpleMethod));
+ } else {
+ this.elseSubOps = null;
+ }
}
@Override
@@ -108,6 +129,34 @@ public final class CompareFieldCondition
return false;
}
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ if (checkCondition(methodContext)) {
+ if (this.subOps != null) {
+ return SimpleMethod.runSubOps(subOps, methodContext);
+ }
+ } else {
+ if (elseSubOps != null) {
+ return SimpleMethod.runSubOps(elseSubOps, methodContext);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+ }
+
+ public List<MethodOperation> getAllSubOps() {
+ List<MethodOperation> allSubOps = FastList.newInstance();
+ if (this.subOps != null)
+ allSubOps.addAll(this.subOps);
+ if (this.elseSubOps != null)
+ allSubOps.addAll(this.elseSubOps);
+ return allSubOps;
+ }
+
public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) {
String format = formatFse.expandString(methodContext.getEnvMap());
Object fieldVal = fieldFma.get(methodContext.getEnvMap());
@@ -131,12 +180,41 @@ public final class CompareFieldCondition
}
}
- public static final class CompareFieldConditionFactory extends ConditionalFactory<CompareFieldCondition> {
+ @Override
+ public String rawString() {
+ return toString();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("<if-compare-field ");
+ sb.append("field=\"").append(this.fieldFma).append("\" operator=\"").append(operator).append("\" ");
+ if (!this.toFieldFma.isEmpty()) {
+ sb.append("to-field=\"").append(this.toFieldFma).append("\" ");
+ }
+ if (!this.type.isEmpty()) {
+ sb.append("type=\"").append(this.type).append("\" ");
+ }
+ if (!this.formatFse.isEmpty()) {
+ sb.append("format=\"").append(this.formatFse).append("\" ");
+ }
+ sb.append("/>");
+ return sb.toString();
+ }
+
+ /**
+ * A <if-compare-field> element factory.
+ */
+ public static final class CompareFieldConditionFactory extends ConditionalFactory<CompareFieldCondition> implements Factory<CompareFieldCondition> {
@Override
public CompareFieldCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
return new CompareFieldCondition(element, simpleMethod);
}
+ public CompareFieldCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new CompareFieldCondition(element, simpleMethod);
+ }
+
@Override
public String getName() {
return "if-compare-field";
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/Conditional.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/Conditional.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/Conditional.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/Conditional.java Thu May 17 14:14:03 2012
@@ -22,7 +22,7 @@ import org.ofbiz.minilang.MiniLangExcept
import org.ofbiz.minilang.method.MethodContext;
/**
- * Interface for all conditional elements under the master if element or and else-if element.
+ * Interface for all conditional elements under the <if> element.
*/
public interface Conditional {
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ConditionalFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ConditionalFactory.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ConditionalFactory.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ConditionalFactory.java Thu May 17 14:14:03 2012
@@ -31,7 +31,10 @@ import org.ofbiz.minilang.SimpleMethod;
import org.w3c.dom.Element;
/**
- * Creates Conditional objects according to the element that is passed.
+ * An abstract factory class for creating <if> element sub-element implementations.
+ * <p>Mini-language can be extended to support additional condition elements
+ * by extending this class to provide custom conditional element implementations.
+ * </p>
*/
public abstract class ConditionalFactory<C extends Conditional> {
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java Thu May 17 14:14:03 2012
@@ -31,7 +31,7 @@ import org.ofbiz.minilang.method.MethodO
import org.w3c.dom.Element;
/**
- * Implements the else-if alternate execution element.
+ * Implements the <else-if> element.
*/
public final class ElseIf extends MiniLangElement {
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java Thu May 17 14:14:03 2012
@@ -18,23 +18,33 @@
*******************************************************************************/
package org.ofbiz.minilang.method.conditional;
-import org.ofbiz.base.util.UtilValidate;
+import java.util.Collections;
+import java.util.List;
+
+import javolution.util.FastList;
+
+import org.ofbiz.base.util.ObjectType;
+import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.collections.FlexibleMapAccessor;
-import org.ofbiz.minilang.MiniLangElement;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.minilang.MiniLangException;
import org.ofbiz.minilang.MiniLangValidate;
import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
import org.w3c.dom.Element;
/**
- * Implements compare to a constant condition.
+ * Implements the <if-empty> element.
*/
-public final class EmptyCondition extends MiniLangElement implements Conditional {
+public final class EmptyCondition extends MethodOperation implements Conditional {
public static final String module = EmptyCondition.class.getName();
private final FlexibleMapAccessor<Object> fieldFma;
+ // Sub-operations are used only when this is a method operation.
+ private final List<MethodOperation> elseSubOps;
+ private final List<MethodOperation> subOps;
public EmptyCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
super(element, simpleMethod);
@@ -44,11 +54,51 @@ public final class EmptyCondition extend
MiniLangValidate.expressionAttributes(simpleMethod, element, "field");
}
this.fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field"));
+ Element childElement = UtilXml.firstChildElement(element);
+ if (childElement != null && !"else".equals(childElement.getTagName())) {
+ this.subOps = Collections.unmodifiableList(SimpleMethod.readOperations(element, simpleMethod));
+ } else {
+ this.subOps = null;
+ }
+ Element elseElement = UtilXml.firstChildElement(element, "else");
+ if (elseElement != null) {
+ this.elseSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(elseElement, simpleMethod));
+ } else {
+ this.elseSubOps = null;
+ }
}
@Override
public boolean checkCondition(MethodContext methodContext) throws MiniLangException {
- return UtilValidate.isEmpty(fieldFma.get(methodContext.getEnvMap()));
+ return ObjectType.isEmpty(fieldFma.get(methodContext.getEnvMap()));
+ }
+
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ if (checkCondition(methodContext)) {
+ if (this.subOps != null) {
+ return SimpleMethod.runSubOps(subOps, methodContext);
+ }
+ } else {
+ if (elseSubOps != null) {
+ return SimpleMethod.runSubOps(elseSubOps, methodContext);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+ }
+
+ public List<MethodOperation> getAllSubOps() {
+ List<MethodOperation> allSubOps = FastList.newInstance();
+ if (this.subOps != null)
+ allSubOps.addAll(this.subOps);
+ if (this.elseSubOps != null)
+ allSubOps.addAll(this.elseSubOps);
+ return allSubOps;
}
public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) {
@@ -59,12 +109,32 @@ public final class EmptyCondition extend
messageBuffer.append("]");
}
- public static final class EmptyConditionFactory extends ConditionalFactory<EmptyCondition> {
+ @Override
+ public String rawString() {
+ return toString();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("<if-empty ");
+ sb.append("field=\"").append(this.fieldFma).append("\"/>");
+ sb.append("/>");
+ return sb.toString();
+ }
+
+ /**
+ * A <if-empty> element factory.
+ */
+ public static final class EmptyConditionFactory extends ConditionalFactory<EmptyCondition> implements Factory<EmptyCondition> {
@Override
public EmptyCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
return new EmptyCondition(element, simpleMethod);
}
+ public EmptyCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new EmptyCondition(element, simpleMethod);
+ }
+
@Override
public String getName() {
return "if-empty";
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java Thu May 17 14:14:03 2012
@@ -18,25 +18,34 @@
*******************************************************************************/
package org.ofbiz.minilang.method.conditional;
+import java.util.Collections;
+import java.util.List;
+
+import javolution.util.FastList;
+
import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.entity.GenericValue;
-import org.ofbiz.minilang.MiniLangElement;
import org.ofbiz.minilang.MiniLangException;
import org.ofbiz.minilang.MiniLangValidate;
import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
import org.ofbiz.security.Security;
import org.ofbiz.security.authz.Authorization;
import org.w3c.dom.Element;
/**
- * Implements compare to a constant condition.
+ * Implements the <if-has-permission> element.
*/
-public final class HasPermissionCondition extends MiniLangElement implements Conditional {
+public final class HasPermissionCondition extends MethodOperation implements Conditional {
private final FlexibleStringExpander actionFse;
private final FlexibleStringExpander permissionFse;
+ // Sub-operations are used only when this is a method operation.
+ private final List<MethodOperation> elseSubOps;
+ private final List<MethodOperation> subOps;
public HasPermissionCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
super(element, simpleMethod);
@@ -47,6 +56,18 @@ public final class HasPermissionConditio
}
this.permissionFse = FlexibleStringExpander.getInstance(element.getAttribute("permission"));
this.actionFse = FlexibleStringExpander.getInstance(element.getAttribute("action"));
+ Element childElement = UtilXml.firstChildElement(element);
+ if (childElement != null && !"else".equals(childElement.getTagName())) {
+ this.subOps = Collections.unmodifiableList(SimpleMethod.readOperations(element, simpleMethod));
+ } else {
+ this.subOps = null;
+ }
+ Element elseElement = UtilXml.firstChildElement(element, "else");
+ if (elseElement != null) {
+ this.elseSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(elseElement, simpleMethod));
+ } else {
+ this.elseSubOps = null;
+ }
}
@Override
@@ -70,6 +91,34 @@ public final class HasPermissionConditio
return false;
}
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ if (checkCondition(methodContext)) {
+ if (this.subOps != null) {
+ return SimpleMethod.runSubOps(subOps, methodContext);
+ }
+ } else {
+ if (elseSubOps != null) {
+ return SimpleMethod.runSubOps(elseSubOps, methodContext);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+ }
+
+ public List<MethodOperation> getAllSubOps() {
+ List<MethodOperation> allSubOps = FastList.newInstance();
+ if (this.subOps != null)
+ allSubOps.addAll(this.subOps);
+ if (this.elseSubOps != null)
+ allSubOps.addAll(this.elseSubOps);
+ return allSubOps;
+ }
+
public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) {
messageBuffer.append("has-permission[");
messageBuffer.append(this.permissionFse);
@@ -80,13 +129,39 @@ public final class HasPermissionConditio
messageBuffer.append("]");
}
- public static final class HasPermissionConditionFactory extends ConditionalFactory<HasPermissionCondition> {
+ @Override
+ public String rawString() {
+ return toString();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("<if-has-permission ");
+ if (!this.permissionFse.isEmpty()) {
+ sb.append("permission=\"").append(this.permissionFse).append("\" ");
+ }
+ if (!this.actionFse.isEmpty()) {
+ sb.append("action=\"").append(this.actionFse).append("\" ");
+ }
+ sb.append("/>");
+ return sb.toString();
+ }
+
+ /**
+ * A <if-has-permission> element factory.
+ */
+ public static final class HasPermissionConditionFactory extends ConditionalFactory<HasPermissionCondition> implements Factory<HasPermissionCondition> {
@Override
public HasPermissionCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
return new HasPermissionCondition(element, simpleMethod);
}
@Override
+ public HasPermissionCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new HasPermissionCondition(element, simpleMethod);
+ }
+
+ @Override
public String getName() {
return "if-has-permission";
}
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java Thu May 17 14:14:03 2012
@@ -33,7 +33,7 @@ import org.ofbiz.minilang.method.MethodO
import org.w3c.dom.Element;
/**
- * Represents the top-level element and only mounted operation for the more flexible if structure.
+ * Implements the <if> element.
*/
public final class MasterIf extends MethodOperation {
@@ -123,6 +123,9 @@ public final class MasterIf extends Meth
return expandedString(null);
}
+ /**
+ * A <if> element factory.
+ */
public static final class MasterIfFactory implements Factory<MasterIf> {
public MasterIf createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
return new MasterIf(element, simpleMethod);
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java Thu May 17 14:14:03 2012
@@ -18,29 +18,38 @@
*******************************************************************************/
package org.ofbiz.minilang.method.conditional;
+import java.util.Collections;
+import java.util.List;
+
+import javolution.util.FastList;
+
import org.apache.oro.text.regex.MalformedPatternException;
import org.ofbiz.base.util.CompilerMatcher;
+import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.collections.FlexibleMapAccessor;
import org.ofbiz.base.util.string.FlexibleStringExpander;
-import org.ofbiz.minilang.MiniLangElement;
import org.ofbiz.minilang.MiniLangException;
import org.ofbiz.minilang.MiniLangRuntimeException;
import org.ofbiz.minilang.MiniLangUtil;
import org.ofbiz.minilang.MiniLangValidate;
import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
import org.w3c.dom.Element;
/**
- * Implements compare to a constant condition.
+ * Implements the <if-regexp> element.
*/
-public class RegexpCondition extends MiniLangElement implements Conditional {
+public class RegexpCondition extends MethodOperation implements Conditional {
public static final String module = RegexpCondition.class.getName();
private transient static ThreadLocal<CompilerMatcher> compilerMatcher = CompilerMatcher.getThreadLocal();
private final FlexibleMapAccessor<Object> fieldFma;
private final FlexibleStringExpander exprFse;
+ // Sub-operations are used only when this is a method operation.
+ private final List<MethodOperation> elseSubOps;
+ private final List<MethodOperation> subOps;
public RegexpCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
super(element, simpleMethod);
@@ -52,6 +61,18 @@ public class RegexpCondition extends Min
}
this.fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field"));
this.exprFse = FlexibleStringExpander.getInstance(element.getAttribute("expr"));
+ Element childElement = UtilXml.firstChildElement(element);
+ if (childElement != null && !"else".equals(childElement.getTagName())) {
+ this.subOps = Collections.unmodifiableList(SimpleMethod.readOperations(element, simpleMethod));
+ } else {
+ this.subOps = null;
+ }
+ Element elseElement = UtilXml.firstChildElement(element, "else");
+ if (elseElement != null) {
+ this.elseSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(elseElement, simpleMethod));
+ } else {
+ this.elseSubOps = null;
+ }
}
@Override
@@ -74,6 +95,34 @@ public class RegexpCondition extends Min
}
}
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ if (checkCondition(methodContext)) {
+ if (this.subOps != null) {
+ return SimpleMethod.runSubOps(subOps, methodContext);
+ }
+ } else {
+ if (elseSubOps != null) {
+ return SimpleMethod.runSubOps(elseSubOps, methodContext);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+ }
+
+ public List<MethodOperation> getAllSubOps() {
+ List<MethodOperation> allSubOps = FastList.newInstance();
+ if (this.subOps != null)
+ allSubOps.addAll(this.subOps);
+ if (this.elseSubOps != null)
+ allSubOps.addAll(this.elseSubOps);
+ return allSubOps;
+ }
+
public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) {
messageBuffer.append("regexp[");
messageBuffer.append("[");
@@ -85,13 +134,37 @@ public class RegexpCondition extends Min
messageBuffer.append("]");
}
- public static final class RegexpConditionFactory extends ConditionalFactory<RegexpCondition> {
+ @Override
+ public String rawString() {
+ return toString();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("<if-regexp ");
+ sb.append("field=\"").append(this.fieldFma).append("\" ");
+ if (!this.exprFse.isEmpty()) {
+ sb.append("expr=\"").append(this.exprFse).append("\" ");
+ }
+ sb.append("/>");
+ return sb.toString();
+ }
+
+ /**
+ * A <if-regexp> element factory.
+ */
+ public static final class RegexpConditionFactory extends ConditionalFactory<RegexpCondition> implements Factory<RegexpCondition> {
@Override
public RegexpCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
return new RegexpCondition(element, simpleMethod);
}
@Override
+ public RegexpCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new RegexpCondition(element, simpleMethod);
+ }
+
+ @Override
public String getName() {
return "if-regexp";
}
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java?rev=1339610&r1=1339609&r2=1339610&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java Thu May 17 14:14:03 2012
@@ -19,21 +19,27 @@
package org.ofbiz.minilang.method.conditional;
import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.List;
+import javolution.util.FastList;
+
+import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.collections.FlexibleMapAccessor;
-import org.ofbiz.minilang.MiniLangElement;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.minilang.MiniLangException;
import org.ofbiz.minilang.MiniLangRuntimeException;
import org.ofbiz.minilang.MiniLangUtil;
import org.ofbiz.minilang.MiniLangValidate;
import org.ofbiz.minilang.SimpleMethod;
import org.ofbiz.minilang.method.MethodContext;
+import org.ofbiz.minilang.method.MethodOperation;
import org.w3c.dom.Element;
/**
- * Implements validate method condition.
+ * Implements the <if-validate-method> element.
*/
-public final class ValidateMethodCondition extends MiniLangElement implements Conditional {
+public final class ValidateMethodCondition extends MethodOperation implements Conditional {
public static final String module = ValidateMethodCondition.class.getName();
private static final Class<?>[] paramTypes = new Class<?>[] { String.class };
@@ -41,6 +47,9 @@ public final class ValidateMethodConditi
private final String className;
private final FlexibleMapAccessor<Object> fieldFma;
private final String methodName;
+ // Sub-operations are used only when this is a method operation.
+ private final List<MethodOperation> elseSubOps;
+ private final List<MethodOperation> subOps;
public ValidateMethodCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
super(element, simpleMethod);
@@ -53,6 +62,18 @@ public final class ValidateMethodConditi
this.fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field"));
this.methodName = element.getAttribute("method");
this.className = MiniLangValidate.checkAttribute(element.getAttribute("class"), "org.ofbiz.base.util.UtilValidate");
+ Element childElement = UtilXml.firstChildElement(element);
+ if (childElement != null && !"else".equals(childElement.getTagName())) {
+ this.subOps = Collections.unmodifiableList(SimpleMethod.readOperations(element, simpleMethod));
+ } else {
+ this.subOps = null;
+ }
+ Element elseElement = UtilXml.firstChildElement(element, "else");
+ if (elseElement != null) {
+ this.elseSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(elseElement, simpleMethod));
+ } else {
+ this.elseSubOps = null;
+ }
}
@Override
@@ -78,6 +99,34 @@ public final class ValidateMethodConditi
}
}
+ @Override
+ public boolean exec(MethodContext methodContext) throws MiniLangException {
+ if (checkCondition(methodContext)) {
+ if (this.subOps != null) {
+ return SimpleMethod.runSubOps(subOps, methodContext);
+ }
+ } else {
+ if (elseSubOps != null) {
+ return SimpleMethod.runSubOps(elseSubOps, methodContext);
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public String expandedString(MethodContext methodContext) {
+ return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+ }
+
+ public List<MethodOperation> getAllSubOps() {
+ List<MethodOperation> allSubOps = FastList.newInstance();
+ if (this.subOps != null)
+ allSubOps.addAll(this.subOps);
+ if (this.elseSubOps != null)
+ allSubOps.addAll(this.elseSubOps);
+ return allSubOps;
+ }
+
public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) {
// allow methodContext to be null
String methodName = methodContext == null ? this.methodName : methodContext.expandString(this.methodName);
@@ -95,13 +144,40 @@ public final class ValidateMethodConditi
messageBuffer.append(")]");
}
- public static final class ValidateMethodConditionFactory extends ConditionalFactory<ValidateMethodCondition> {
+ @Override
+ public String rawString() {
+ return toString();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("<if-validate-method ");
+ sb.append("field=\"").append(this.fieldFma).append("\" ");
+ if (!this.methodName.isEmpty()) {
+ sb.append("methodName=\"").append(this.methodName).append("\" ");
+ }
+ if (!"org.ofbiz.base.util.UtilValidate".equals(this.className)) {
+ sb.append("class=\"").append(this.className).append("\" ");
+ }
+ sb.append("/>");
+ return sb.toString();
+ }
+
+ /**
+ * A <if-validate-method> element factory.
+ */
+ public static final class ValidateMethodConditionFactory extends ConditionalFactory<ValidateMethodCondition> implements Factory<ValidateMethodCondition> {
@Override
public ValidateMethodCondition createCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException {
return new ValidateMethodCondition(element, simpleMethod);
}
@Override
+ public ValidateMethodCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+ return new ValidateMethodCondition(element, simpleMethod);
+ }
+
+ @Override
public String getName() {
return "if-validate-method";
}