|
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"; } |
| Free forum by Nabble | Edit this page |
