|
Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ElseIf.java Tue Jul 10 12:05:55 2012 @@ -22,21 +22,31 @@ import java.util.Collections; import java.util.List; import org.ofbiz.base.util.UtilXml; +import org.ofbiz.minilang.MiniLangElement; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Implements the else-if alternate execution element. + * Implements the <else-if> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Celseif%3E}}">Mini-language Reference</a> */ -public class ElseIf { +public final class ElseIf extends MiniLangElement { - protected Conditional condition; - protected List<MethodOperation> thenSubOps; + private final Conditional condition; + private final List<MethodOperation> thenSubOps; public ElseIf(Element element, SimpleMethod simpleMethod) throws MiniLangException { + super(element, simpleMethod); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.childElements(simpleMethod, element, "condition", "then"); + MiniLangValidate.requiredChildElements(simpleMethod, element, "condition", "then"); + } Element conditionElement = UtilXml.firstChildElement(element, "condition"); Element conditionChildElement = UtilXml.firstChildElement(conditionElement); this.condition = ConditionalFactory.makeConditional(conditionChildElement, simpleMethod); @@ -44,10 +54,17 @@ public class ElseIf { this.thenSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(thenElement, simpleMethod)); } - public boolean checkCondition(MethodContext methodContext) { + public boolean checkCondition(MethodContext methodContext) throws MiniLangException { return condition.checkCondition(methodContext); } + @Override + public void gatherArtifactInfo(ArtifactInfoContext aic) { + for (MethodOperation method : this.thenSubOps) { + method.gatherArtifactInfo(aic); + } + } + public List<MethodOperation> getThenSubOps() { return this.thenSubOps; } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/EmptyCondition.java Tue Jul 10 12:05:55 2012 @@ -18,98 +18,114 @@ *******************************************************************************/ package org.ofbiz.minilang.method.conditional; -import java.util.Collection; -import java.util.Map; +import java.util.Collections; +import java.util.List; -import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.ObjectType; +import org.ofbiz.base.util.UtilXml; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; +import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; -import org.ofbiz.minilang.method.ContextAccessor; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; 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. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cifempty%3E}}">Mini-language Reference</a> */ -public class EmptyCondition implements Conditional { +public final class EmptyCondition extends MethodOperation implements Conditional { public static final String module = EmptyCondition.class.getName(); - ContextAccessor<Object> fieldAcsr; - ContextAccessor<Map<String, ? extends Object>> mapAcsr; - SimpleMethod simpleMethod; - - public EmptyCondition(Element element, SimpleMethod simpleMethod) { - this.simpleMethod = simpleMethod; - // NOTE: this is still supported, but is deprecated - this.mapAcsr = new ContextAccessor<Map<String, ? extends Object>>(element.getAttribute("map-name")); - this.fieldAcsr = new ContextAccessor<Object>(element.getAttribute("field")); - if (this.fieldAcsr.isEmpty()) { - // NOTE: this is still supported, but is deprecated - this.fieldAcsr = new ContextAccessor<Object>(element.getAttribute("field-name")); + 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); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "field"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "field"); + 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; } } - public boolean checkCondition(MethodContext methodContext) { - // only run subOps if element is empty/null - boolean runSubOps = false; - Object fieldVal = getFieldVal(methodContext); - if (fieldVal == null) { - runSubOps = true; + @Override + public boolean checkCondition(MethodContext methodContext) throws MiniLangException { + 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 (fieldVal instanceof String) { - String fieldStr = (String) fieldVal; - if (fieldStr.length() == 0) { - runSubOps = true; - } - } else if (fieldVal instanceof Collection<?>) { - Collection<?> fieldCol = (Collection<?>) fieldVal; - if (fieldCol.size() == 0) { - runSubOps = true; - } - } else if (fieldVal instanceof Map<?, ?>) { - Map<?, ?> fieldMap = (Map<?, ?>) fieldVal; - if (fieldMap.size() == 0) { - runSubOps = true; - } + if (elseSubOps != null) { + return SimpleMethod.runSubOps(elseSubOps, methodContext); } } - return runSubOps; + return true; } - protected Object getFieldVal(MethodContext methodContext) { - Object fieldVal = null; - if (!mapAcsr.isEmpty()) { - Map<String, ? extends Object> fromMap = mapAcsr.get(methodContext); - if (fromMap == null) { - if (Debug.infoOn()) - Debug.logInfo("Map not found with name " + mapAcsr + ", running operations", module); - } else { - fieldVal = fieldAcsr.get(fromMap, methodContext); + @Override + public void gatherArtifactInfo(ArtifactInfoContext aic) { + if (this.subOps != null) { + for (MethodOperation method : this.subOps) { + method.gatherArtifactInfo(aic); + } + } + if (this.elseSubOps != null) { + for (MethodOperation method : this.elseSubOps) { + method.gatherArtifactInfo(aic); } - } else { - // no map name, try the env - fieldVal = fieldAcsr.get(methodContext); } - return fieldVal; } public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) { messageBuffer.append("empty["); - if (!this.mapAcsr.isEmpty()) { - messageBuffer.append(this.mapAcsr); - messageBuffer.append("."); - } - messageBuffer.append(this.fieldAcsr); - if (methodContext != null) { - messageBuffer.append("="); - messageBuffer.append(getFieldVal(methodContext)); - } + messageBuffer.append(fieldFma); + messageBuffer.append("="); + messageBuffer.append(fieldFma.get(methodContext.getEnvMap())); messageBuffer.append("]"); } - public static final class EmptyConditionFactory extends ConditionalFactory<EmptyCondition> { + @Override + public String toString() { + StringBuilder sb = new StringBuilder("<if-empty "); + sb.append("field=\"").append(this.fieldFma).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) { + 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); } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/HasPermissionCondition.java Tue Jul 10 12:05:55 2012 @@ -18,69 +18,142 @@ *******************************************************************************/ package org.ofbiz.minilang.method.conditional; +import java.util.Collections; +import java.util.List; + 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.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; 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. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cifhaspermission%3E}}">Mini-language Reference</a> */ -public class HasPermissionCondition implements Conditional { +public final class HasPermissionCondition extends MethodOperation implements Conditional { - String action; - String permission; - SimpleMethod simpleMethod; - - public HasPermissionCondition(Element element, SimpleMethod simpleMethod) { - this.simpleMethod = simpleMethod; - this.permission = element.getAttribute("permission"); - this.action = element.getAttribute("action"); - } - - public boolean checkCondition(MethodContext methodContext) { - // only run subOps if element is empty/null - boolean runSubOps = false; - // if no user is logged in, treat as if the user does not have permission: do not - // run subops + 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); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "permission", "action"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "permission"); + MiniLangValidate.constantPlusExpressionAttributes(simpleMethod, element, "permission", "action"); + } + 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 + public boolean checkCondition(MethodContext methodContext) throws MiniLangException { GenericValue userLogin = methodContext.getUserLogin(); if (userLogin != null) { - String permission = methodContext.expandString(this.permission); - String action = methodContext.expandString(this.action); - - Authorization authz = methodContext.getAuthz(); - Security security = methodContext.getSecurity(); - if (UtilValidate.isNotEmpty(action)) { - // run hasEntityPermission + String permission = permissionFse.expandString(methodContext.getEnvMap()); + String action = actionFse.expandString(methodContext.getEnvMap()); + if (!action.isEmpty()) { + Security security = methodContext.getSecurity(); if (security.hasEntityPermission(permission, action, userLogin)) { - runSubOps = true; + return true; } } else { - // run hasPermission + Authorization authz = methodContext.getAuthz(); if (authz.hasPermission(userLogin.getString("userLoginId"), permission, methodContext.getEnvMap())) { - runSubOps = true; + return true; } } } - return runSubOps; + 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 void gatherArtifactInfo(ArtifactInfoContext aic) { + if (this.subOps != null) { + for (MethodOperation method : this.subOps) { + method.gatherArtifactInfo(aic); + } + } + if (this.elseSubOps != null) { + for (MethodOperation method : this.elseSubOps) { + method.gatherArtifactInfo(aic); + } + } } public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) { messageBuffer.append("has-permission["); - messageBuffer.append(this.permission); - if (UtilValidate.isNotEmpty(this.action)) { + messageBuffer.append(this.permissionFse); + if (UtilValidate.isNotEmpty(this.actionFse)) { messageBuffer.append(":"); - messageBuffer.append(this.action); + messageBuffer.append(this.actionFse); } messageBuffer.append("]"); } - public static final class HasPermissionConditionFactory extends ConditionalFactory<HasPermissionCondition> { + @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 createCondition(Element element, SimpleMethod simpleMethod) { + public HasPermissionCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new HasPermissionCondition(element, simpleMethod); } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/MasterIf.java Tue Jul 10 12:05:55 2012 @@ -18,45 +18,54 @@ *******************************************************************************/ package org.ofbiz.minilang.method.conditional; +import java.util.ArrayList; 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.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; 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 class MasterIf extends MethodOperation { +public final class MasterIf extends MethodOperation { - Conditional condition; - List<ElseIf> elseIfs = null; - List<MethodOperation> elseSubOps = null; - List<MethodOperation> thenSubOps; + private final Conditional condition; + private final List<ElseIf> elseIfs; + private final List<MethodOperation> elseSubOps; + private final List<MethodOperation> thenSubOps; public MasterIf(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.childElements(simpleMethod, element, "condition", "then", "else-if", "else"); + MiniLangValidate.requiredChildElements(simpleMethod, element, "condition", "then"); + } Element conditionElement = UtilXml.firstChildElement(element, "condition"); Element conditionChildElement = UtilXml.firstChildElement(conditionElement); this.condition = ConditionalFactory.makeConditional(conditionChildElement, simpleMethod); Element thenElement = UtilXml.firstChildElement(element, "then"); this.thenSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(thenElement, simpleMethod)); List<? extends Element> elseIfElements = UtilXml.childElementList(element, "else-if"); - if (UtilValidate.isNotEmpty(elseIfElements)) { - elseIfs = FastList.newInstance(); + if (elseIfElements.isEmpty()) { + this.elseIfs = null; + } else { + List<ElseIf> elseIfs = new ArrayList<ElseIf>(elseIfElements.size()); for (Element elseIfElement : elseIfElements) { elseIfs.add(new ElseIf(elseIfElement, simpleMethod)); } + this.elseIfs = Collections.unmodifiableList(elseIfs); } Element elseElement = UtilXml.firstChildElement(element, "else"); - if (elseElement != null) { + if (elseElement == null) { + this.elseSubOps = null; + } else { this.elseSubOps = Collections.unmodifiableList(SimpleMethod.readOperations(elseElement, simpleMethod)); } } @@ -72,7 +81,7 @@ public class MasterIf extends MethodOper return SimpleMethod.runSubOps(thenSubOps, methodContext); } else { // try the else-ifs - if (UtilValidate.isNotEmpty(elseIfs)) { + if (elseIfs != null) { for (ElseIf elseIf : elseIfs) { if (elseIf.checkCondition(methodContext)) { return elseIf.runSubOps(methodContext); @@ -88,31 +97,32 @@ public class MasterIf extends MethodOper } @Override - public String expandedString(MethodContext methodContext) { - // TODO: fill in missing details, if needed - StringBuilder messageBuf = new StringBuilder(); - this.condition.prettyPrint(messageBuf, methodContext); - return "<if><condition>" + messageBuf + "</condition></if>"; - } - - public List<MethodOperation> getAllSubOps() { - List<MethodOperation> allSubOps = FastList.newInstance(); - allSubOps.addAll(this.thenSubOps); - if (this.elseSubOps != null) - allSubOps.addAll(this.elseSubOps); - if (elseIfs != null) { + public void gatherArtifactInfo(ArtifactInfoContext aic) { + for (MethodOperation method : this.thenSubOps) { + method.gatherArtifactInfo(aic); + } + if (this.elseSubOps != null) { + for (MethodOperation method : this.elseSubOps) { + method.gatherArtifactInfo(aic); + } + } + if (this.elseIfs != null) { for (ElseIf elseIf : elseIfs) { - allSubOps.addAll(elseIf.getThenSubOps()); + elseIf.gatherArtifactInfo(aic); } } - return allSubOps; } @Override - public String rawString() { - return expandedString(null); + public String toString() { + StringBuilder messageBuf = new StringBuilder(); + this.condition.prettyPrint(messageBuf, null); + return "<if><condition>" + messageBuf + "</condition></if>"; } + /** + * 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/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/RegexpCondition.java Tue Jul 10 12:05:55 2012 @@ -18,110 +18,144 @@ *******************************************************************************/ package org.ofbiz.minilang.method.conditional; +import java.util.Collections; import java.util.List; -import java.util.Map; - -import javolution.util.FastList; import org.apache.oro.text.regex.MalformedPatternException; import org.ofbiz.base.util.CompilerMatcher; -import org.ofbiz.base.util.Debug; -import org.ofbiz.base.util.GeneralException; -import org.ofbiz.base.util.ObjectType; +import org.ofbiz.base.util.UtilXml; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; 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.ContextAccessor; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; 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. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cifregexp%3E}}">Mini-language Reference</a> */ -public class RegexpCondition 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(); - List<?> elseSubOps = null; - FlexibleStringExpander exprExdr; - ContextAccessor<Object> fieldAcsr; - ContextAccessor<Map<String, ? extends Object>> mapAcsr; - SimpleMethod simpleMethod; - List<?> subOps = FastList.newInstance(); - - public RegexpCondition(Element element, SimpleMethod simpleMethod) { - this.simpleMethod = simpleMethod; - // NOTE: this is still supported, but is deprecated - this.mapAcsr = new ContextAccessor<Map<String, ? extends Object>>(element.getAttribute("map-name")); - this.fieldAcsr = new ContextAccessor<Object>(element.getAttribute("field")); - if (this.fieldAcsr.isEmpty()) { - // NOTE: this is still supported, but is deprecated - this.fieldAcsr = new ContextAccessor<Object>(element.getAttribute("field-name")); - } - this.exprExdr = FlexibleStringExpander.getInstance(element.getAttribute("expr")); - } - - public boolean checkCondition(MethodContext methodContext) { - String fieldString = getFieldString(methodContext); - boolean matches = false; + 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); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "field", "expr"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "field", "expr"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "field"); + } + 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 + public boolean checkCondition(MethodContext methodContext) throws MiniLangException { + Object fieldVal = fieldFma.get(methodContext.getEnvMap()); + if (fieldVal == null) { + fieldVal = ""; + } else if (!(fieldVal instanceof String)) { + try { + fieldVal = MiniLangUtil.convertType(fieldVal, String.class, methodContext.getLocale(), methodContext.getTimeZone(), null); + } catch (Exception e) { + throw new MiniLangRuntimeException(e, this); + } + } + String regExp = exprFse.expandString(methodContext.getEnvMap()); try { - matches = compilerMatcher.get().matches(fieldString, methodContext.expandString(this.exprExdr)); + return compilerMatcher.get().matches((String) fieldVal, regExp); } catch (MalformedPatternException e) { - Debug.logError(e, "Regular Expression [" + this.exprExdr + "] is mal-formed: " + e.toString(), module); + throw new MiniLangRuntimeException(e, this); } - if (matches) { - return true; + } + + @Override + public boolean exec(MethodContext methodContext) throws MiniLangException { + if (checkCondition(methodContext)) { + if (this.subOps != null) { + return SimpleMethod.runSubOps(subOps, methodContext); + } } else { - return false; + if (elseSubOps != null) { + return SimpleMethod.runSubOps(elseSubOps, methodContext); + } } + return true; } - protected String getFieldString(MethodContext methodContext) { - String fieldString = null; - Object fieldVal = null; - if (!mapAcsr.isEmpty()) { - Map<String, ? extends Object> fromMap = mapAcsr.get(methodContext); - if (fromMap == null) { - if (Debug.infoOn()) - Debug.logInfo("Map not found with name " + mapAcsr + ", using empty string for comparison", module); - } else { - fieldVal = fieldAcsr.get(fromMap, methodContext); + @Override + public void gatherArtifactInfo(ArtifactInfoContext aic) { + if (this.subOps != null) { + for (MethodOperation method : this.subOps) { + method.gatherArtifactInfo(aic); } - } else { - // no map name, try the env - fieldVal = fieldAcsr.get(methodContext); } - if (fieldVal != null) { - try { - fieldString = (String) ObjectType.simpleTypeConvert(fieldVal, "String", null, methodContext.getTimeZone(), methodContext.getLocale(), true); - } catch (GeneralException e) { - Debug.logError(e, "Could not convert object to String, using empty String", module); + if (this.elseSubOps != null) { + for (MethodOperation method : this.elseSubOps) { + method.gatherArtifactInfo(aic); } } - // always use an empty string by default - if (fieldString == null) - fieldString = ""; - return fieldString; } public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) { messageBuffer.append("regexp["); messageBuffer.append("["); - if (!this.mapAcsr.isEmpty()) { - messageBuffer.append(this.mapAcsr); - messageBuffer.append("."); - } - messageBuffer.append(this.fieldAcsr); + messageBuffer.append(this.fieldFma); messageBuffer.append("="); - messageBuffer.append(getFieldString(methodContext)); + messageBuffer.append(fieldFma.get(methodContext.getEnvMap())); messageBuffer.append("] matches "); - messageBuffer.append(methodContext.expandString(this.exprExdr)); + messageBuffer.append(exprFse.expandString(methodContext.getEnvMap())); messageBuffer.append("]"); } - public static final class RegexpConditionFactory extends ConditionalFactory<RegexpCondition> { + @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 createCondition(Element element, SimpleMethod simpleMethod) { + public RegexpCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new RegexpCondition(element, simpleMethod); } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/conditional/ValidateMethodCondition.java Tue Jul 10 12:05:55 2012 @@ -19,119 +19,154 @@ package org.ofbiz.minilang.method.conditional; import java.lang.reflect.Method; -import java.util.Map; +import java.util.Collections; +import java.util.List; -import org.ofbiz.base.util.Debug; -import org.ofbiz.base.util.GeneralException; -import org.ofbiz.base.util.ObjectType; +import org.ofbiz.base.util.UtilXml; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; +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.ContextAccessor; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; 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. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cifvalidatemethod%3E}}">Mini-language Reference</a> */ -public class ValidateMethodCondition 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 }; - String className; - ContextAccessor<Object> fieldAcsr; - ContextAccessor<Map<String, ? extends Object>> mapAcsr; - String methodName; - - public ValidateMethodCondition(Element element) { - this.mapAcsr = new ContextAccessor<Map<String, ? extends Object>>(element.getAttribute("map-name")); - this.fieldAcsr = new ContextAccessor<Object>(element.getAttribute("field-name")); + 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); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "field", "method", "class"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "field", "method"); + MiniLangValidate.constantAttributes(simpleMethod, element, "method", "class"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "field"); + } + this.fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field")); this.methodName = element.getAttribute("method"); - this.className = element.getAttribute("class"); + 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; + } } - public boolean checkCondition(MethodContext methodContext) { - String methodName = methodContext.expandString(this.methodName); - String className = methodContext.expandString(this.className); - String fieldString = getFieldString(methodContext); - Class<?>[] paramTypes = new Class<?>[] { String.class }; - Object[] params = new Object[] { fieldString }; - Class<?> valClass; - try { - valClass = methodContext.getLoader().loadClass(className); - } catch (ClassNotFoundException cnfe) { - Debug.logError("Could not find validation class: " + className, module); - return false; - } - Method valMethod; - try { - valMethod = valClass.getMethod(methodName, paramTypes); - } catch (NoSuchMethodException cnfe) { - Debug.logError("Could not find validation method: " + methodName + " of class " + className, module); - return false; + @Override + public boolean checkCondition(MethodContext methodContext) throws MiniLangException { + Object fieldVal = fieldFma.get(methodContext.getEnvMap()); + if (fieldVal == null) { + fieldVal = ""; + } else if (!(fieldVal instanceof String)) { + try { + fieldVal = MiniLangUtil.convertType(fieldVal, String.class, methodContext.getLocale(), methodContext.getTimeZone(), null); + } catch (Exception e) { + throw new MiniLangRuntimeException(e, this); + } } - Boolean resultBool = Boolean.FALSE; + Object[] params = new Object[] { fieldVal }; try { - resultBool = (Boolean) valMethod.invoke(null, params); + Class<?> valClass = methodContext.getLoader().loadClass(className); + Method valMethod = valClass.getMethod(methodName, paramTypes); + Boolean resultBool = (Boolean) valMethod.invoke(null, params); + return resultBool.booleanValue(); } catch (Exception e) { - Debug.logError(e, "Error in IfValidationMethod " + methodName + " of class " + className + ", not processing sub-ops ", module); + throw new MiniLangRuntimeException(e, this); } - if (resultBool != null) - return resultBool.booleanValue(); - return false; } - protected String getFieldString(MethodContext methodContext) { - String fieldString = null; - Object fieldVal = null; - if (!mapAcsr.isEmpty()) { - Map<String, ? extends Object> fromMap = mapAcsr.get(methodContext); - if (fromMap == null) { - if (Debug.infoOn()) - Debug.logInfo("Map not found with name " + mapAcsr + ", using empty string for comparison", module); - } else { - fieldVal = fieldAcsr.get(fromMap, methodContext); + @Override + public boolean exec(MethodContext methodContext) throws MiniLangException { + if (checkCondition(methodContext)) { + if (this.subOps != null) { + return SimpleMethod.runSubOps(subOps, methodContext); } } else { - // no map name, try the env - fieldVal = fieldAcsr.get(methodContext); + if (elseSubOps != null) { + return SimpleMethod.runSubOps(elseSubOps, methodContext); + } } - if (fieldVal != null) { - try { - fieldString = (String) ObjectType.simpleTypeConvert(fieldVal, "String", null, methodContext.getTimeZone(), methodContext.getLocale(), true); - } catch (GeneralException e) { - Debug.logError(e, "Could not convert object to String, using empty String", module); + return true; + } + + @Override + public void gatherArtifactInfo(ArtifactInfoContext aic) { + if (this.subOps != null) { + for (MethodOperation method : this.subOps) { + method.gatherArtifactInfo(aic); + } + } + if (this.elseSubOps != null) { + for (MethodOperation method : this.elseSubOps) { + method.gatherArtifactInfo(aic); } } - // always use an empty string by default - if (fieldString == null) - fieldString = ""; - return fieldString; } public void prettyPrint(StringBuilder messageBuffer, MethodContext methodContext) { - // allow methodContext to be null - String methodName = methodContext == null ? this.methodName : methodContext.expandString(this.methodName); - String className = methodContext == null ? this.className : methodContext.expandString(this.className); messageBuffer.append("validate-method["); messageBuffer.append(className); messageBuffer.append("."); messageBuffer.append(methodName); messageBuffer.append("("); - if (!this.mapAcsr.isEmpty()) { - messageBuffer.append(this.mapAcsr); - messageBuffer.append("."); - } - messageBuffer.append(this.fieldAcsr); + messageBuffer.append(this.fieldFma); if (methodContext != null) { messageBuffer.append("="); - messageBuffer.append(getFieldString(methodContext)); + messageBuffer.append(fieldFma.get(methodContext.getEnvMap())); } messageBuffer.append(")]"); } - public static final class ValidateMethodConditionFactory extends ConditionalFactory<ValidateMethodCondition> { + @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 createCondition(Element element, SimpleMethod simpleMethod) { - return new ValidateMethodCondition(element); + public ValidateMethodCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { + return new ValidateMethodCondition(element, simpleMethod); } @Override Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearCacheLine.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearCacheLine.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearCacheLine.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearCacheLine.java Tue Jul 10 12:05:55 2012 @@ -20,64 +20,70 @@ package org.ofbiz.minilang.method.entity import java.util.Map; -import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; +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.ContextAccessor; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Uses the delegator to clear elements from the cache; intelligently looks at the map passed to see if it is a byPrimaryKey, and byAnd, or an all. + * Implements the <clear-cache-line> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cclearcacheline%3E}}">Mini-language Reference</a> */ -public class ClearCacheLine extends MethodOperation { +public final class ClearCacheLine extends MethodOperation { - public static final String module = ClearCacheLine.class.getName(); - - String entityName; - ContextAccessor<Map<String, ? extends Object>> mapAcsr; + private final FlexibleStringExpander entityNameFse; + private final FlexibleMapAccessor<Map<String, ? extends Object>> mapFma; public ClearCacheLine(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - entityName = element.getAttribute("entity-name"); - mapAcsr = new ContextAccessor<Map<String, ? extends Object>>(element.getAttribute("map"), element.getAttribute("map-name")); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "entity-name", "map"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "entity-name"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "map"); + MiniLangValidate.noChildElements(simpleMethod, element); + } + entityNameFse = FlexibleStringExpander.getInstance(element.getAttribute("entity-name")); + mapFma = FlexibleMapAccessor.getInstance(element.getAttribute("map")); } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { - String entityName = methodContext.expandString(this.entityName); - - if (mapAcsr.isEmpty()) { + String entityName = entityNameFse.expandString(methodContext.getEnvMap()); + Map<String, ? extends Object> fieldsMap = mapFma.get(methodContext.getEnvMap()); + if (fieldsMap == null) { methodContext.getDelegator().clearCacheLine(entityName); } else { - Map<String, ? extends Object> theMap = mapAcsr.get(methodContext); - if (theMap == null) { - Debug.logWarning("In clear-cache-line could not find map with name " + mapAcsr + ", not clearing any cache lines", module); - } else { - methodContext.getDelegator().clearCacheLine(entityName, theMap); - } + methodContext.getDelegator().clearCacheLine(entityName, fieldsMap); } return true; } @Override - public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); - } - - @Override - public String rawString() { - // TODO: something more than the empty tag - return "<clear-cache-line/>"; + public String toString() { + StringBuilder sb = new StringBuilder("<clear-cache-line "); + sb.append("entity-name=\"").append(this.entityNameFse).append("\" "); + if (!this.mapFma.isEmpty()) { + sb.append("map=\"").append(this.mapFma).append("\" "); + } + sb.append("/>"); + return sb.toString(); } + /** + * A factory for the <clear-cache-line> element. + */ public static final class ClearCacheLineFactory implements Factory<ClearCacheLine> { + @Override public ClearCacheLine createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new ClearCacheLine(element, simpleMethod); } + @Override public String getName() { return "clear-cache-line"; } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearEntityCaches.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearEntityCaches.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearEntityCaches.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/ClearEntityCaches.java Tue Jul 10 12:05:55 2012 @@ -19,18 +19,30 @@ package org.ofbiz.minilang.method.entityops; 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; +import org.w3c.dom.NamedNodeMap; /** - * Clears all Entity Engine Caches + * Implements the <clear-entity-caches> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cclearentitycaches%3E}}">Mini-language Reference</a> */ -public class ClearEntityCaches extends MethodOperation { +public final class ClearEntityCaches extends MethodOperation { public ClearEntityCaches(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); + if (MiniLangValidate.validationOn()) { + NamedNodeMap nnm = element.getAttributes(); + for (int i = 0; i < nnm.getLength(); i++) { + String attributeName = nnm.item(i).getNodeName(); + MiniLangValidate.handleError("Attribute name \"" + attributeName + "\" is not valid.", simpleMethod, element); + } + MiniLangValidate.noChildElements(simpleMethod, element); + } } @Override @@ -40,22 +52,20 @@ public class ClearEntityCaches extends M } @Override - public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); - } - - @Override - public String rawString() { - // TODO: something more than the empty tag + public String toString() { return "<clear-entity-caches/>"; } + /** + * A factory for the <clear-entity-caches> element. + */ public static final class ClearEntityCachesFactory implements Factory<ClearEntityCaches> { + @Override public ClearEntityCaches createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new ClearEntityCaches(element, simpleMethod); } + @Override public String getName() { return "clear-entity-caches"; } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CloneValue.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CloneValue.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CloneValue.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CloneValue.java Tue Jul 10 12:05:55 2012 @@ -18,59 +18,65 @@ *******************************************************************************/ package org.ofbiz.minilang.method.entityops; -import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; import org.ofbiz.entity.GenericValue; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; -import org.ofbiz.minilang.method.ContextAccessor; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Uses the delegator to find entity values by anding the map fields + * Implements the <clone-value> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Cclonevalue%3E}}">Mini-language Reference</a> */ -public class CloneValue extends MethodOperation { +public final class CloneValue extends MethodOperation { - public static final String module = CloneValue.class.getName(); - - ContextAccessor<GenericValue> newValueAcsr; - ContextAccessor<GenericValue> valueAcsr; + private final FlexibleMapAccessor<GenericValue> newValueFma; + private final FlexibleMapAccessor<GenericValue> valueFma; public CloneValue(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - valueAcsr = new ContextAccessor<GenericValue>(element.getAttribute("value-field"), element.getAttribute("value-name")); - newValueAcsr = new ContextAccessor<GenericValue>(element.getAttribute("new-value-field"), element.getAttribute("new-value-name")); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "value-field", "new-value-field"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "value-field", "new-value-field"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "value-field", "new-value-field"); + MiniLangValidate.noChildElements(simpleMethod, element); + } + valueFma = FlexibleMapAccessor.getInstance(element.getAttribute("value-field")); + newValueFma = FlexibleMapAccessor.getInstance(element.getAttribute("new-value-field")); } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { - GenericValue value = valueAcsr.get(methodContext); - if (value == null) { - Debug.logWarning("In clone-value a value was not found with the specified valueAcsr: " + valueAcsr + ", not copying", module); - return true; + GenericValue value = valueFma.get(methodContext.getEnvMap()); + if (value != null) { + newValueFma.put(methodContext.getEnvMap(), GenericValue.create(value)); } - newValueAcsr.put(methodContext, GenericValue.create(value)); return true; } @Override - public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); - } - - @Override - public String rawString() { - // TODO: something more than the empty tag - return "<clone-value/>"; + public String toString() { + StringBuilder sb = new StringBuilder("<clone-value "); + sb.append("value-field=\"").append(this.valueFma).append("\" "); + sb.append("new-value-field=\"").append(this.newValueFma).append("\" "); + sb.append("/>"); + return sb.toString(); } + /** + * A factory for the <clone-value> element. + */ public static final class CloneValueFactory implements Factory<CloneValue> { + @Override public CloneValue createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new CloneValue(element, simpleMethod); } + @Override public String getName() { return "clone-value"; } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CreateValue.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CreateValue.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CreateValue.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/CreateValue.java Tue Jul 10 12:05:55 2012 @@ -19,89 +19,91 @@ package org.ofbiz.minilang.method.entityops; import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericValue; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; -import org.ofbiz.minilang.method.ContextAccessor; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Uses the delegator to create the specified value object entity in the datasource + * Implements the <create-value> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Ccreatevalue%3E}}">Mini-language Reference</a> */ -public class CreateValue extends MethodOperation { +public final class CreateValue extends MethodOperation { public static final String module = CreateValue.class.getName(); - boolean createOrStore; - String doCacheClearStr; - boolean testDuplicate; - ContextAccessor<GenericValue> valueAcsr; + private final boolean createOrStore; + private final boolean doCacheClear; + private final FlexibleMapAccessor<GenericValue> valueFma; public CreateValue(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - valueAcsr = new ContextAccessor<GenericValue>(element.getAttribute("value-field"), element.getAttribute("value-name")); - doCacheClearStr = element.getAttribute("do-cache-clear"); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "value-field", "do-cache-clear", "or-store"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "value-field"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "value-field"); + MiniLangValidate.constantAttributes(simpleMethod, element, "do-cache-clear", "or-store"); + MiniLangValidate.noChildElements(simpleMethod, element); + } + valueFma = FlexibleMapAccessor.getInstance(element.getAttribute("value-field")); + doCacheClear = !"false".equals(element.getAttribute("do-cache-clear")); createOrStore = "true".equals(element.getAttribute("or-store")); } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { - boolean doCacheClear = !"false".equals(methodContext.expandString(doCacheClearStr)); - GenericValue value = valueAcsr.get(methodContext); + GenericValue value = valueFma.get(methodContext.getEnvMap()); if (value == null) { - String errMsg = "In create-value a value was not found with the specified valueAcsr: " + valueAcsr + ", not creating"; + String errMsg = "In <create-value> the value \"" + valueFma + "\" was not found, not creating"; Debug.logWarning(errMsg, module); - if (methodContext.getMethodType() == MethodContext.EVENT) { - methodContext.putEnv(simpleMethod.getEventErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); - } else if (methodContext.getMethodType() == MethodContext.SERVICE) { - methodContext.putEnv(simpleMethod.getServiceErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); - } + simpleMethod.addErrorMessage(methodContext, errMsg); return false; } try { - if (createOrStore == true) { + if (createOrStore) { methodContext.getDelegator().createOrStore(value, doCacheClear); } else { methodContext.getDelegator().create(value, doCacheClear); } } catch (GenericEntityException e) { - - Debug.logError(e, module); - String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process [problem creating the " + valueAcsr + " value: " + e.getMessage() + "]"; - if (methodContext.getMethodType() == MethodContext.EVENT) { - methodContext.putEnv(simpleMethod.getEventErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); - } else if (methodContext.getMethodType() == MethodContext.SERVICE) { - methodContext.putEnv(simpleMethod.getServiceErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); - } + String errMsg = "Exception thrown while creating the \"" + valueFma +"\" GenericValue: " + e.getMessage(); + Debug.logWarning(e, errMsg, module); + simpleMethod.addErrorMessage(methodContext, errMsg); return false; } return true; } @Override - public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); - } - - @Override - public String rawString() { - // TODO: something more than the empty tag - return "<create-value/>"; + public String toString() { + StringBuilder sb = new StringBuilder("<create-value "); + sb.append("value-field=\"").append(this.valueFma).append("\" "); + if (!this.doCacheClear) { + sb.append("do-cache-clear=\"false\""); + } + if (this.createOrStore) { + sb.append("or-store=\"true\""); + } + sb.append("/>"); + return sb.toString(); } + /** + * A factory for the <create-value> element. + */ public static final class CreateValueFactory implements Factory<CreateValue> { + @Override public CreateValue createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new CreateValue(element, simpleMethod); } + @Override public String getName() { return "create-value"; } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityAnd.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityAnd.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityAnd.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityAnd.java Tue Jul 10 12:05:55 2012 @@ -23,22 +23,33 @@ import org.ofbiz.base.util.GeneralExcept import org.ofbiz.entity.Delegator; import org.ofbiz.entity.finder.ByAndFinder; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Uses the delegator to find entity values by a condition + * Implements the <entity-and> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Centityand%3E}}">Mini-language Reference</a> */ -public class EntityAnd extends MethodOperation { +public final class EntityAnd extends MethodOperation { public static final String module = EntityAnd.class.getName(); - protected ByAndFinder finder; + private final ByAndFinder finder; public EntityAnd(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "entity-name", "use-cache", "filter-by-date", "list", "distinct", "delegator-name"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "entity-name", "list"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "list"); + MiniLangValidate.childElements(simpleMethod, element, "field-map", "order-by", "limit-range", "limit-view", "use-iterator"); + MiniLangValidate.requiredChildElements(simpleMethod, element, "field-map"); + } this.finder = new ByAndFinder(element); } @@ -48,41 +59,36 @@ public class EntityAnd extends MethodOpe Delegator delegator = methodContext.getDelegator(); this.finder.runFind(methodContext.getEnvMap(), delegator); } catch (GeneralException e) { - Debug.logError(e, module); - String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process: " + e.getMessage(); - if (methodContext.getMethodType() == MethodContext.EVENT) { - methodContext.putEnv(simpleMethod.getEventErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); - } else if (methodContext.getMethodType() == MethodContext.SERVICE) { - methodContext.putEnv(simpleMethod.getServiceErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); - } + String errMsg = "Exception thrown while performing entity find: " + e.getMessage(); + Debug.logWarning(e, errMsg, module); + simpleMethod.addErrorMessage(methodContext, errMsg); return false; } return true; } @Override - public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); - } - - public String getEntityName() { - return this.finder.getEntityName(); + public void gatherArtifactInfo(ArtifactInfoContext aic) { + aic.addEntityName(this.finder.getEntityName()); } @Override - public String rawString() { - // TODO: something more than the empty tag - return "<entity-and/>"; + public String toString() { + StringBuilder sb = new StringBuilder("<entity-and "); + sb.append("entity-name=\"").append(this.finder.getEntityName()).append("\" />"); + return sb.toString(); } + /** + * A factory for the <entity-and> element. + */ public static final class EntityAndFactory implements Factory<EntityAnd> { + @Override public EntityAnd createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new EntityAnd(element, simpleMethod); } + @Override public String getName() { return "entity-and"; } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCondition.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCondition.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCondition.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCondition.java Tue Jul 10 12:05:55 2012 @@ -23,22 +23,33 @@ import org.ofbiz.base.util.GeneralExcept import org.ofbiz.entity.Delegator; import org.ofbiz.entity.finder.ByConditionFinder; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Uses the delegator to find entity values by a condition + * Implements the <entity-condition> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Centitycondition%3E}}">Mini-language Reference</a> */ -public class EntityCondition extends MethodOperation { +public final class EntityCondition extends MethodOperation { public static final String module = EntityCondition.class.getName(); - protected ByConditionFinder finder; + private final ByConditionFinder finder; public EntityCondition(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "entity-name", "use-cache", "filter-by-date", "list", "distinct", "delegator-name"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "entity-name", "list"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "list"); + MiniLangValidate.childElements(simpleMethod, element, "condition-expr", "condition-list", "condition-object", "having-condition-list", "select-field", "order-by", "limit-range", "limit-view", "use-iterator"); + MiniLangValidate.requireAnyChildElement(simpleMethod, element, "condition-expr", "condition-list", "condition-object"); + } this.finder = new ByConditionFinder(element); } @@ -48,41 +59,33 @@ public class EntityCondition extends Met Delegator delegator = methodContext.getDelegator(); this.finder.runFind(methodContext.getEnvMap(), delegator); } catch (GeneralException e) { - Debug.logError(e, module); - String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process: " + e.getMessage(); - if (methodContext.getMethodType() == MethodContext.EVENT) { - methodContext.putEnv(simpleMethod.getEventErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); - } else if (methodContext.getMethodType() == MethodContext.SERVICE) { - methodContext.putEnv(simpleMethod.getServiceErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); - } + String errMsg = "Exception thrown while performing entity find: " + e.getMessage(); + Debug.logWarning(e, errMsg, module); + simpleMethod.addErrorMessage(methodContext, errMsg); return false; } return true; } @Override - public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); - } - - public String getEntityName() { - return this.finder.getEntityName(); + public void gatherArtifactInfo(ArtifactInfoContext aic) { + aic.addEntityName(this.finder.getEntityName()); } @Override - public String rawString() { - // TODO: something more than the empty tag - return "<entity-condition/>"; + public String toString() { + StringBuilder sb = new StringBuilder("<entity-condition "); + sb.append("entity-name=\"").append(this.finder.getEntityName()).append("\" />"); + return sb.toString(); } public static final class EntityConditionFactory implements Factory<EntityCondition> { + @Override public EntityCondition createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new EntityCondition(element, simpleMethod); } + @Override public String getName() { return "entity-condition"; } Modified: ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCount.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCount.java?rev=1359626&r1=1359625&r2=1359626&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCount.java (original) +++ ofbiz/branches/release12.04/framework/minilang/src/org/ofbiz/minilang/method/entityops/EntityCount.java Tue Jul 10 12:05:55 2012 @@ -18,8 +18,6 @@ *******************************************************************************/ package org.ofbiz.minilang.method.entityops; -import java.util.Map; - import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; import org.ofbiz.base.util.UtilValidate; @@ -35,39 +33,49 @@ import org.ofbiz.entity.finder.EntityFin import org.ofbiz.entity.finder.EntityFinderUtil.ConditionObject; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; +import org.ofbiz.minilang.artifact.ArtifactInfoContext; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Uses the delegator to find entity values by a condition + * Implements the <entity-count> element. + * + * @see <a href="https://cwiki.apache.org/OFBADMIN/mini-language-reference.html#Mini-languageReference-{{%3Centitycount%3E}}">Mini-language Reference</a> */ -public class EntityCount extends MethodOperation { +public final class EntityCount extends MethodOperation { public static final String module = EntityCount.class.getName(); - protected FlexibleMapAccessor<Long> countAcsr; - protected FlexibleStringExpander delegatorNameExdr; - protected FlexibleStringExpander entityNameExdr; - protected Condition havingCondition; - protected Condition whereCondition; + private final FlexibleMapAccessor<Long> countFma; + private final FlexibleStringExpander delegatorNameFse; + private final FlexibleStringExpander entityNameFse; + private final Condition havingCondition; + private final Condition whereCondition; public EntityCount(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - this.entityNameExdr = FlexibleStringExpander.getInstance(element.getAttribute("entity-name")); - this.delegatorNameExdr = FlexibleStringExpander.getInstance(element.getAttribute("delegator-name")); - if (UtilValidate.isNotEmpty(element.getAttribute("count-field"))) { - this.countAcsr = FlexibleMapAccessor.getInstance(element.getAttribute("count-field")); - } else { - this.countAcsr = FlexibleMapAccessor.getInstance(element.getAttribute("count-name")); - } - // process condition-expr | condition-list + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, element, "entity-name", "count-field", "delegator-name"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "entity-name", "count-field"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "count-field"); + MiniLangValidate.childElements(simpleMethod, element, "condition-expr", "condition-list", "condition-object", "having-condition-list"); + MiniLangValidate.requireAnyChildElement(simpleMethod, element, "condition-expr", "condition-list", "condition-object"); + } + this.entityNameFse = FlexibleStringExpander.getInstance(element.getAttribute("entity-name")); + this.delegatorNameFse = FlexibleStringExpander.getInstance(element.getAttribute("delegator-name")); + this.countFma = FlexibleMapAccessor.getInstance(element.getAttribute("count-field")); + int conditionElementCount = 0; Element conditionExprElement = UtilXml.firstChildElement(element, "condition-expr"); + conditionElementCount = conditionExprElement == null ? conditionElementCount : conditionElementCount++; Element conditionListElement = UtilXml.firstChildElement(element, "condition-list"); + conditionElementCount = conditionListElement == null ? conditionElementCount : conditionElementCount++; Element conditionObjectElement = UtilXml.firstChildElement(element, "condition-object"); - if (conditionExprElement != null && conditionListElement != null) { - throw new IllegalArgumentException("In entity find by condition element, cannot have condition-expr and condition-list sub-elements"); + conditionElementCount = conditionObjectElement == null ? conditionElementCount : conditionElementCount++; + if (conditionElementCount > 1) { + MiniLangValidate.handleError("Element must include only one condition child element", simpleMethod, conditionObjectElement); } if (conditionExprElement != null) { this.whereCondition = new ConditionExpr(conditionExprElement); @@ -75,77 +83,73 @@ public class EntityCount extends MethodO this.whereCondition = new ConditionList(conditionListElement); } else if (conditionObjectElement != null) { this.whereCondition = new ConditionObject(conditionObjectElement); + } else { + this.whereCondition = null; } - // process having-condition-list Element havingConditionListElement = UtilXml.firstChildElement(element, "having-condition-list"); if (havingConditionListElement != null) { this.havingCondition = new ConditionList(havingConditionListElement); + } else { + this.havingCondition = null; } } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { try { - Map<String, Object> context = methodContext.getEnvMap(); + String delegatorName = this.delegatorNameFse.expandString(methodContext.getEnvMap()); Delegator delegator = methodContext.getDelegator(); - String entityName = this.entityNameExdr.expandString(context); - String delegatorName = this.delegatorNameExdr.expandString(context); if (UtilValidate.isNotEmpty(delegatorName)) { delegator = DelegatorFactory.getDelegator(delegatorName); } + String entityName = this.entityNameFse.expandString(methodContext.getEnvMap()); ModelEntity modelEntity = delegator.getModelEntity(entityName); - // create whereEntityCondition from whereCondition EntityCondition whereEntityCondition = null; if (this.whereCondition != null) { - whereEntityCondition = this.whereCondition.createCondition(context, modelEntity, delegator.getModelFieldTypeReader(modelEntity)); + whereEntityCondition = this.whereCondition.createCondition(methodContext.getEnvMap(), modelEntity, delegator.getModelFieldTypeReader(modelEntity)); } - // create havingEntityCondition from havingCondition EntityCondition havingEntityCondition = null; if (this.havingCondition != null) { - havingEntityCondition = this.havingCondition.createCondition(context, modelEntity, delegator.getModelFieldTypeReader(modelEntity)); + havingEntityCondition = this.havingCondition.createCondition(methodContext.getEnvMap(), modelEntity, delegator.getModelFieldTypeReader(modelEntity)); } long count = delegator.findCountByCondition(entityName, whereEntityCondition, havingEntityCondition, null); - this.countAcsr.put(context, count); + this.countFma.put(methodContext.getEnvMap(), count); } catch (GeneralException e) { - Debug.logError(e, module); - String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process: " + e.getMessage(); - if (methodContext.getMethodType() == MethodContext.EVENT) { - methodContext.putEnv(simpleMethod.getEventErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); - } else if (methodContext.getMethodType() == MethodContext.SERVICE) { - methodContext.putEnv(simpleMethod.getServiceErrorMessageName(), errMsg); - methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); - } + String errMsg = "Exception thrown while performing entity count: " + e.getMessage(); + Debug.logWarning(e, errMsg, module); + simpleMethod.addErrorMessage(methodContext, errMsg); return false; } return true; } @Override - public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); - } - - public String getEntityName() { - String entName = this.entityNameExdr.getOriginal(); - // if there is expansion syntax - if (entName.indexOf("${") >= 0) - return null; - return entName; + public void gatherArtifactInfo(ArtifactInfoContext aic) { + aic.addEntityName(entityNameFse.toString()); } @Override - public String rawString() { - // TODO: something more than the empty tag - return "<entity-count/>"; + public String toString() { + StringBuilder sb = new StringBuilder("<entity-count "); + sb.append("entity-name=\"").append(this.entityNameFse).append("\" "); + sb.append("count-field=\"").append(this.countFma).append("\" "); + if (!this.delegatorNameFse.isEmpty()) { + sb.append("delegator-name=\"").append(this.delegatorNameFse).append("\" "); + } + sb.append("/>"); + return sb.toString(); } + /** + * A factory for the <entity-count> element. + */ public static final class EntityCountFactory implements Factory<EntityCount> { + @Override public EntityCount createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new EntityCount(element, simpleMethod); } + @Override public String getName() { return "entity-count"; } |
| Free forum by Nabble | Edit this page |
