You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2012/07/10 14:06:00 UTC
svn commit: r1359626 [6/12] - in /ofbiz/branches/release12.04: ./
framework/base/ framework/base/src/org/ofbiz/base/util/collections/
framework/base/src/org/ofbiz/base/util/collections/test/
framework/base/src/org/ofbiz/base/util/string/ framework/enti...
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";
}