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/06/03 13:13:33 UTC

svn commit: r1345652 [2/2] - in /ofbiz/trunk/framework/minilang: dtd/ src/META-INF/services/ src/org/ofbiz/minilang/method/entityops/ src/org/ofbiz/minilang/method/envops/

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeNextSeqId.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeNextSeqId.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeNextSeqId.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeNextSeqId.java Sun Jun  3 11:13:32 2012
@@ -18,79 +18,107 @@
  *******************************************************************************/
 package org.ofbiz.minilang.method.entityops;
 
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.collections.FlexibleMapAccessor;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.MiniLangRuntimeException;
+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;
 
 /**
- * Look at existing values for a sub-entity with a sequenced secondary ID, and get the highest plus 1
+ * Implements the <make-next-seq-id> element.
  */
-public class MakeNextSeqId extends MethodOperation {
+public final class MakeNextSeqId extends MethodOperation {
 
     public static final String module = MakeNextSeqId.class.getName();
 
-    String incrementByStr;
-    String numericPaddingStr;
-    String seqFieldName;
-    ContextAccessor<GenericValue> valueAcsr;
+    private final FlexibleStringExpander incrementByFse;
+    private final FlexibleStringExpander numericPaddingFse;
+    private final FlexibleStringExpander seqFieldNameFse;
+    private final FlexibleMapAccessor<GenericValue> valueFma;
 
     public MakeNextSeqId(Element element, SimpleMethod simpleMethod) throws MiniLangException {
         super(element, simpleMethod);
-        seqFieldName = element.getAttribute("seq-field-name");
-        valueAcsr = new ContextAccessor<GenericValue>(element.getAttribute("value-field"), element.getAttribute("value-name"));
-        numericPaddingStr = element.getAttribute("numeric-padding");
-        incrementByStr = element.getAttribute("increment-by");
+        if (MiniLangValidate.validationOn()) {
+            MiniLangValidate.attributeNames(simpleMethod, element, "value-field", "seq-field-name", "increment-by", "numeric-padding");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "value-field", "seq-field-name");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "value-field");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        seqFieldNameFse = FlexibleStringExpander.getInstance(element.getAttribute("seq-field-name"));
+        valueFma = FlexibleMapAccessor.getInstance(element.getAttribute("value-field"));
+        numericPaddingFse = FlexibleStringExpander.getInstance(element.getAttribute("numeric-padding"));
+        incrementByFse = FlexibleStringExpander.getInstance(element.getAttribute("increment-by"));
     }
 
     @Override
     public boolean exec(MethodContext methodContext) throws MiniLangException {
-        String seqFieldName = methodContext.expandString(this.seqFieldName);
-        String numericPaddingStr = methodContext.expandString(this.numericPaddingStr);
-        String incrementByStr = methodContext.expandString(this.incrementByStr);
+        GenericValue value = valueFma.get(methodContext.getEnvMap());
+        if (value == null) {
+            throw new MiniLangRuntimeException("Entity value not found with name: " + valueFma, this);
+        }
+        String seqFieldName = seqFieldNameFse.expandString(methodContext.getEnvMap());
+        String numericPaddingStr = numericPaddingFse.expandString(methodContext.getEnvMap());
+        String incrementByStr = incrementByFse.expandString(methodContext.getEnvMap());
         int numericPadding = 5;
-        int incrementBy = 1;
-        try {
-            if (UtilValidate.isNotEmpty(numericPaddingStr)) {
+        if (!numericPaddingStr.isEmpty()) {
+            try {
                 numericPadding = Integer.parseInt(numericPaddingStr);
+            } catch (Exception e) {
+                throw new MiniLangRuntimeException("Invalid number in \"numeric-padding\" attribute", this);
             }
-        } catch (Exception e) {
-            Debug.logError(e, "numeric-padding format invalid for [" + numericPaddingStr + "]", module);
         }
-        try {
-            if (UtilValidate.isNotEmpty(incrementByStr)) {
+        int incrementBy = 1;
+        if (!incrementByStr.isEmpty()) {
+            try {
                 incrementBy = Integer.parseInt(incrementByStr);
+            } catch (Exception e) {
+                throw new MiniLangRuntimeException("Invalid number in \"increment-by\" attribute", this);
             }
-        } catch (Exception e) {
-            Debug.logError(e, "increment-by format invalid for [" + incrementByStr + "]", module);
         }
-        GenericValue value = valueAcsr.get(methodContext);
         methodContext.getDelegator().setNextSubSeqId(value, seqFieldName, numericPadding, incrementBy);
         return true;
     }
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<make-next-seq-id/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<make-next-seq-id ");
+        sb.append("value-field=\"").append(this.valueFma).append("\" ");
+        sb.append("seq-field-name=\"").append(this.seqFieldNameFse).append("\" ");
+        if (!incrementByFse.isEmpty()) {
+            sb.append("increment-by=\"").append(this.incrementByFse).append("\" ");
+        }
+        if (!numericPaddingFse.isEmpty()) {
+            sb.append("numeric-padding=\"").append(this.numericPaddingFse).append("\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;make-next-seq-id&gt; element.
+     */
     public static final class MakeNextSeqIdFactory implements Factory<MakeNextSeqId> {
+        @Override
         public MakeNextSeqId createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new MakeNextSeqId(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "make-next-seq-id";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeValue.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeValue.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/MakeValue.java Sun Jun  3 11:13:32 2012
@@ -20,61 +20,87 @@ package org.ofbiz.minilang.method.entity
 
 import java.util.Map;
 
-import org.ofbiz.minilang.artifact.ArtifactInfoContext;
+import org.ofbiz.base.util.collections.FlexibleMapAccessor;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.MiniLangRuntimeException;
+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;
 
 /**
- * Uses the delegator to find entity values by anding the map fields
+ * Implements the &lt;make-value&gt; element.
  */
-public class MakeValue extends MethodOperation {
+public final class MakeValue extends MethodOperation {
 
-    String entityName;
-    ContextAccessor<Map<String, ? extends Object>> mapAcsr;
-    ContextAccessor<GenericValue> valueAcsr;
+    private final FlexibleStringExpander entityNameFse;
+    private final FlexibleMapAccessor<Map<String, ? extends Object>> mapFma;
+    private final FlexibleMapAccessor<GenericValue> valueFma;
 
     public MakeValue(Element element, SimpleMethod simpleMethod) throws MiniLangException {
         super(element, simpleMethod);
-        valueAcsr = new ContextAccessor<GenericValue>(element.getAttribute("value-field"), element.getAttribute("value-name"));
-        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, "value-field", "entity-name", "map");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "value-field", "entity-name");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "value-field", "map");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        valueFma = FlexibleMapAccessor.getInstance(element.getAttribute("value-field"));
+        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);
-        Map<String, ? extends Object> ctxMap = (mapAcsr.isEmpty() ? null : mapAcsr.get(methodContext));
-        valueAcsr.put(methodContext, methodContext.getDelegator().makeValidValue(entityName, ctxMap));
+        String entityName = entityNameFse.expandString(methodContext.getEnvMap());
+        if (entityName.isEmpty()) {
+            throw new MiniLangRuntimeException("Entity name not found: " + entityNameFse, this);
+        }
+        valueFma.put(methodContext.getEnvMap(), methodContext.getDelegator().makeValidValue(entityName, mapFma.get(methodContext.getEnvMap())));
         return true;
     }
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
     }
 
     @Override
     public void gatherArtifactInfo(ArtifactInfoContext aic) {
-        aic.addEntityName(entityName);
+        aic.addEntityName(entityNameFse.toString());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<make-value/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<make-value ");
+        sb.append("entity-name=\"").append(this.entityNameFse).append("\" ");
+        sb.append("value-field=\"").append(this.valueFma).append("\" ");
+        if (!mapFma.isEmpty()) {
+            sb.append("map=\"").append(this.mapFma).append("\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;make-value&gt; element.
+     */
     public static final class MakeValueFactory implements Factory<MakeValue> {
+        @Override
         public MakeValue createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new MakeValue(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "make-value";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/OrderValueList.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/OrderValueList.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/OrderValueList.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/OrderValueList.java Sun Jun  3 11:13:32 2012
@@ -20,61 +20,81 @@ package org.ofbiz.minilang.method.entity
 
 import java.util.List;
 
+import org.ofbiz.base.util.collections.FlexibleMapAccessor;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericEntity;
 import org.ofbiz.entity.util.EntityUtil;
 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;
 
 /**
- * Order the given list of GenericValue objects
+ * Implements the &lt;order-value-list&gt; element.
  */
-public class OrderValueList extends MethodOperation {
+public final class OrderValueList extends MethodOperation {
 
-    ContextAccessor<List<? extends GenericEntity>> listAcsr;
-    ContextAccessor<List<String>> orderByListAcsr;
-    ContextAccessor<List<? extends GenericEntity>> toListAcsr;
+    private final FlexibleMapAccessor<List<? extends GenericEntity>> listFma;
+    private final FlexibleMapAccessor<List<String>> orderByListFma;
+    private final FlexibleMapAccessor<List<? extends GenericEntity>> toListFma;
 
     public OrderValueList(Element element, SimpleMethod simpleMethod) throws MiniLangException {
         super(element, simpleMethod);
-        listAcsr = new ContextAccessor<List<? extends GenericEntity>>(element.getAttribute("list"), element.getAttribute("list-name"));
-        toListAcsr = new ContextAccessor<List<? extends GenericEntity>>(element.getAttribute("to-list"), element.getAttribute("to-list-name"));
-        if (toListAcsr.isEmpty()) {
-            toListAcsr = listAcsr;
+        if (MiniLangValidate.validationOn()) {
+            MiniLangValidate.attributeNames(simpleMethod, element, "list", "order-by-list", "to-list");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "list", "order-by-list");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "list", "order-by-list", "to-list");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        listFma = FlexibleMapAccessor.getInstance(element.getAttribute("list"));
+        orderByListFma = FlexibleMapAccessor.getInstance(element.getAttribute("order-by-list"));
+        String toListAttribute = element.getAttribute("to-list");
+        if (toListAttribute.isEmpty()) {
+            toListFma = listFma;
+        } else {
+            toListFma = FlexibleMapAccessor.getInstance(toListAttribute);
         }
-        orderByListAcsr = new ContextAccessor<List<String>>(element.getAttribute("order-by-list"), element.getAttribute("order-by-list-name"));
     }
 
     @Override
     public boolean exec(MethodContext methodContext) throws MiniLangException {
-        List<String> orderByList = null;
-        if (!orderByListAcsr.isEmpty()) {
-            orderByList = orderByListAcsr.get(methodContext);
-        }
-        toListAcsr.put(methodContext, EntityUtil.orderBy(listAcsr.get(methodContext), orderByList));
+        List<String> orderByList = orderByListFma.get(methodContext.getEnvMap());
+        toListFma.put(methodContext.getEnvMap(), EntityUtil.orderBy(listFma.get(methodContext.getEnvMap()), orderByList));
         return true;
     }
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<order-value-list/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<order-value-list ");
+        sb.append("list=\"").append(this.listFma).append("\" ");
+        sb.append("order-by-list=\"").append(this.orderByListFma).append("\" ");
+        sb.append("to-list=\"").append(this.toListFma).append("\" ");
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;order-value-list&gt; element.
+     */
     public static final class OrderValueListFactory implements Factory<OrderValueList> {
+        @Override
         public OrderValueList createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new OrderValueList(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "order-value-list";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RefreshValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RefreshValue.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RefreshValue.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RefreshValue.java Sun Jun  3 11:13:32 2012
@@ -19,47 +19,53 @@
 package org.ofbiz.minilang.method.entityops;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.collections.FlexibleMapAccessor;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.MiniLangRuntimeException;
+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 refresh the specified value object entity from the datasource
+ * Implements the &lt;refresh-value&gt; element.
  */
-public class RefreshValue extends MethodOperation {
+public final class RefreshValue extends MethodOperation {
 
     public static final String module = RemoveValue.class.getName();
 
-    String doCacheClearStr;
-    ContextAccessor<GenericValue> valueAcsr;
+    private final FlexibleStringExpander doCacheClearFse;
+    private final FlexibleMapAccessor<GenericValue> valueFma;
 
     public RefreshValue(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");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "value-field");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "value-field");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        valueFma = FlexibleMapAccessor.getInstance(element.getAttribute("value-field"));
+        doCacheClearFse = FlexibleStringExpander.getInstance(element.getAttribute("do-cache-clear"));
     }
 
     @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 remove-value a value was not found with the specified valueAcsr: " + valueAcsr + ", not removing";
-            Debug.logWarning(errMsg, module);
-            methodContext.setErrorReturn(errMsg, simpleMethod);
-            return false;
+            throw new MiniLangRuntimeException("Entity value not found with name: " + valueFma, this);
         }
+        boolean doCacheClear = !"false".equals(doCacheClearFse.expandString(methodContext.getEnvMap()));
         try {
             methodContext.getDelegator().refresh(value, doCacheClear);
         } catch (GenericEntityException e) {
-            String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process [problem removing the " + valueAcsr + " value: " + e.getMessage() + "]";
-            Debug.logError(e, errMsg, module);
-            methodContext.setErrorReturn(errMsg, simpleMethod);
+            String errMsg = "Exception thrown while refreshing value: " + e.getMessage();
+            Debug.logWarning(e, errMsg, module);
+            simpleMethod.addErrorMessage(methodContext, errMsg);
             return false;
         }
         return true;
@@ -67,21 +73,35 @@ public class RefreshValue extends Method
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<refresh-value/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<refresh-value ");
+        sb.append("value-field=\"").append(this.valueFma).append("\" ");
+        if (!doCacheClearFse.isEmpty()) {
+            sb.append("do-cache-clear=\"").append(this.doCacheClearFse).append("\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;refresh-value&gt; element.
+     */
     public static final class RefreshValueFactory implements Factory<RefreshValue> {
+        @Override
         public RefreshValue createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new RefreshValue(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "refresh-value";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveByAnd.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveByAnd.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveByAnd.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveByAnd.java Sun Jun  3 11:13:32 2012
@@ -21,48 +21,51 @@ 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.entity.GenericEntityException;
 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;
 
 /**
- * Uses the delegator to remove entity values constrained by anding the map fields
+ * Implements the &lt;remove-by-and&gt; element.
  */
-public class RemoveByAnd extends MethodOperation {
+public final class RemoveByAnd extends MethodOperation {
 
     public static final String module = RemoveByAnd.class.getName();
 
-    String doCacheClearStr;
-    String entityName;
-    ContextAccessor<Map<String, ? extends Object>> mapAcsr;
+    private final FlexibleStringExpander doCacheClearFse;
+    private final FlexibleStringExpander entityNameFse;
+    private final FlexibleMapAccessor<Map<String, ? extends Object>> mapFma;
 
     public RemoveByAnd(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"));
-        doCacheClearStr = element.getAttribute("do-cache-clear");
+        if (MiniLangValidate.validationOn()) {
+            MiniLangValidate.attributeNames(simpleMethod, element, "entity-name", "map", "do-cache-clear");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "entity-name", "map");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "map");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        entityNameFse = FlexibleStringExpander.getInstance(element.getAttribute("entity-name"));
+        mapFma = FlexibleMapAccessor.getInstance(element.getAttribute("map"));
+        doCacheClearFse = FlexibleStringExpander.getInstance(element.getAttribute("do-cache-clear"));
     }
 
     @Override
     public boolean exec(MethodContext methodContext) throws MiniLangException {
-        boolean doCacheClear = !"false".equals(doCacheClearStr);
-        String entityName = methodContext.expandString(this.entityName);
+        boolean doCacheClear = !"false".equals(doCacheClearFse.expandString(methodContext.getEnvMap()));
+        String entityName = entityNameFse.expandString(methodContext.getEnvMap());
         try {
-            methodContext.getDelegator().removeByAnd(entityName, mapAcsr.get(methodContext), doCacheClear);
+            methodContext.getDelegator().removeByAnd(entityName, mapFma.get(methodContext.getEnvMap()), doCacheClear);
         } catch (GenericEntityException e) {
-            Debug.logError(e, module);
-            String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process [problem removing the " + entityName + " entity by and: " + 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 removing entities: " + e.getMessage();
+            Debug.logWarning(e, errMsg, module);
+            simpleMethod.addErrorMessage(methodContext, errMsg);
             return false;
         }
         return true;
@@ -70,21 +73,41 @@ public class RemoveByAnd extends MethodO
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+    }
+
+    @Override
+    public void gatherArtifactInfo(ArtifactInfoContext aic) {
+        aic.addEntityName(entityNameFse.toString());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<remove-by-and/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<remove-by-and ");
+        sb.append("entity-name=\"").append(this.entityNameFse).append("\" ");
+        sb.append("map=\"").append(this.mapFma).append("\" ");
+        if (!doCacheClearFse.isEmpty()) {
+            sb.append("do-cache-clear=\"").append(this.doCacheClearFse).append("\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;remove-by-and&gt; element.
+     */
     public static final class RemoveByAndFactory implements Factory<RemoveByAnd> {
+        @Override
         public RemoveByAnd createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new RemoveByAnd(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "remove-by-and";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveList.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveList.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveList.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveList.java Sun Jun  3 11:13:32 2012
@@ -21,59 +21,53 @@ package org.ofbiz.minilang.method.entity
 import java.util.List;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.collections.FlexibleMapAccessor;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.MiniLangRuntimeException;
+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 remove the specified value object (or psuedo-pk) list from the datasource
+ * Implements the &lt;remove-list&gt; element.
  */
-public class RemoveList extends MethodOperation {
+public final class RemoveList extends MethodOperation {
 
     public static final String module = RemoveList.class.getName();
 
-    String doCacheClearStr;
-    ContextAccessor<List<GenericValue>> listAcsr;
+    private final FlexibleStringExpander doCacheClearFse;
+    private final FlexibleMapAccessor<List<GenericValue>> listFma;
 
     public RemoveList(Element element, SimpleMethod simpleMethod) throws MiniLangException {
         super(element, simpleMethod);
-        listAcsr = new ContextAccessor<List<GenericValue>>(element.getAttribute("list"), element.getAttribute("list-name"));
-        doCacheClearStr = element.getAttribute("do-cache-clear");
+        if (MiniLangValidate.validationOn()) {
+            MiniLangValidate.attributeNames(simpleMethod, element, "list", "do-cache-clear");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "list");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "list");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        listFma = FlexibleMapAccessor.getInstance(element.getAttribute("list"));
+        doCacheClearFse = FlexibleStringExpander.getInstance(element.getAttribute("do-cache-clear"));
     }
 
     @Override
     public boolean exec(MethodContext methodContext) throws MiniLangException {
-        boolean doCacheClear = !"false".equals(doCacheClearStr);
-        List<GenericValue> values = listAcsr.get(methodContext);
+        List<GenericValue> values = listFma.get(methodContext.getEnvMap());
         if (values == null) {
-            String errMsg = "In remove-list a value list was not found with the specified listAcsr: " + listAcsr + ", not removing";
-            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());
-            }
-            return false;
+            throw new MiniLangRuntimeException("Entity value list not found with name: " + listFma, this);
         }
+        boolean doCacheClear = !"false".equals(doCacheClearFse.expandString(methodContext.getEnvMap()));
         try {
             methodContext.getDelegator().removeAll(values, doCacheClear);
         } catch (GenericEntityException e) {
-            Debug.logError(e, module);
-            String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process [problem removing the " + listAcsr + " value list: " + 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 removing entities: " + e.getMessage();
+            Debug.logWarning(e, errMsg, module);
+            simpleMethod.addErrorMessage(methodContext, errMsg);
             return false;
         }
         return true;
@@ -81,21 +75,35 @@ public class RemoveList extends MethodOp
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<remove-list/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<remove-list ");
+        sb.append("list=\"").append(this.listFma).append("\" ");
+        if (!doCacheClearFse.isEmpty()) {
+            sb.append("do-cache-clear=\"").append(this.doCacheClearFse).append("\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;remove-list&gt; element.
+     */
     public static final class RemoveListFactory implements Factory<RemoveList> {
+        @Override
         public RemoveList createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new RemoveList(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "remove-list";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveRelated.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveRelated.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveRelated.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveRelated.java Sun Jun  3 11:13:32 2012
@@ -19,62 +19,57 @@
 package org.ofbiz.minilang.method.entityops;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.collections.FlexibleMapAccessor;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.MiniLangRuntimeException;
+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;
 
 /**
- * Uses the delegator to remove entities related to the specified value object from the datasource
+ * Implements the &lt;remove-related&gt; element.
  */
-public class RemoveRelated extends MethodOperation {
+public final class RemoveRelated extends MethodOperation {
 
     public static final String module = RemoveRelated.class.getName();
 
-    String doCacheClearStr;
-    String relationName;
-    ContextAccessor<GenericValue> valueAcsr;
+    private final FlexibleStringExpander doCacheClearFse;
+    private final FlexibleStringExpander relationNameFse;
+    private final FlexibleMapAccessor<GenericValue> valueFma;
 
     public RemoveRelated(Element element, SimpleMethod simpleMethod) throws MiniLangException {
         super(element, simpleMethod);
-        valueAcsr = new ContextAccessor<GenericValue>(element.getAttribute("value-field"), element.getAttribute("value-name"));
-        relationName = element.getAttribute("relation-name");
-        doCacheClearStr = element.getAttribute("do-cache-clear");
+        if (MiniLangValidate.validationOn()) {
+            MiniLangValidate.attributeNames(simpleMethod, element, "value-field", "relation-name", "do-cache-clear");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "value-field", "relation-name");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "value-field");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        valueFma = FlexibleMapAccessor.getInstance(element.getAttribute("value-field"));
+        relationNameFse = FlexibleStringExpander.getInstance(element.getAttribute("relation-name"));
+        doCacheClearFse = FlexibleStringExpander.getInstance(element.getAttribute("do-cache-clear"));
     }
 
     @Override
     public boolean exec(MethodContext methodContext) throws MiniLangException {
-        boolean doCacheClear = !"false".equals(doCacheClearStr);
-        String relationName = methodContext.expandString(this.relationName);
-        GenericValue value = valueAcsr.get(methodContext);
+        GenericValue value = valueFma.get(methodContext.getEnvMap());
         if (value == null) {
-            String errMsg = "In remove-related a value was not found with the specified valueAcsr: " + valueAcsr + ", not removing related";
-            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());
-            }
-            return false;
+            throw new MiniLangRuntimeException("Entity value not found with name: " + valueFma, this);
         }
+        String relationName = relationNameFse.expandString(methodContext.getEnvMap());
+        boolean doCacheClear = !"false".equals(doCacheClearFse.expandString(methodContext.getEnvMap()));
         try {
             methodContext.getDelegator().removeRelated(relationName, value, doCacheClear);
         } catch (GenericEntityException e) {
-            Debug.logError(e, module);
-            String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process [problem removing the relation " + relationName + " of the value " + 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 removing related entities: " + e.getMessage();
+            Debug.logWarning(e, errMsg, module);
+            simpleMethod.addErrorMessage(methodContext, errMsg);
             return false;
         }
         return true;
@@ -82,21 +77,41 @@ public class RemoveRelated extends Metho
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
+    }
+
+    @Override
+    public void gatherArtifactInfo(ArtifactInfoContext aic) {
+        aic.addEntityName(relationNameFse.toString());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<remove-related/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<remove-related ");
+        sb.append("value-field=\"").append(this.valueFma).append("\" ");
+        sb.append("relation-name=\"").append(this.relationNameFse).append("\" ");
+        if (!doCacheClearFse.isEmpty()) {
+            sb.append("do-cache-clear=\"").append(this.doCacheClearFse).append("\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;remove-related&gt; element.
+     */
     public static final class RemoveRelatedFactory implements Factory<RemoveRelated> {
+        @Override
         public RemoveRelated createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new RemoveRelated(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "remove-related";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveValue.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveValue.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/RemoveValue.java Sun Jun  3 11:13:32 2012
@@ -19,47 +19,53 @@
 package org.ofbiz.minilang.method.entityops;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.collections.FlexibleMapAccessor;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.minilang.MiniLangException;
+import org.ofbiz.minilang.MiniLangRuntimeException;
+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 remove the specified value object entity from the datasource
+ * Implements the &lt;remove-value&gt; element.
  */
 public class RemoveValue extends MethodOperation {
 
     public static final String module = RemoveValue.class.getName();
 
-    String doCacheClearStr;
-    ContextAccessor<GenericValue> valueAcsr;
+    private final FlexibleStringExpander doCacheClearFse;
+    private final FlexibleMapAccessor<GenericValue> valueFma;
 
     public RemoveValue(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");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "value-field");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "value-field");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        valueFma = FlexibleMapAccessor.getInstance(element.getAttribute("value-field"));
+        doCacheClearFse = FlexibleStringExpander.getInstance(element.getAttribute("do-cache-clear"));
     }
 
     @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 remove-value a value was not found with the specified valueAcsr: " + valueAcsr + ", not removing";
-            Debug.logWarning(errMsg, module);
-            methodContext.setErrorReturn(errMsg, simpleMethod);
-            return false;
+            throw new MiniLangRuntimeException("Entity value not found with name: " + valueFma, this);
         }
+        boolean doCacheClear = !"false".equals(doCacheClearFse.expandString(methodContext.getEnvMap()));
         try {
             methodContext.getDelegator().removeValue(value, doCacheClear);
         } catch (GenericEntityException e) {
-            String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process [problem removing the " + valueAcsr + " value: " + e.getMessage() + "]";
-            Debug.logError(e, errMsg, module);
-            methodContext.setErrorReturn(errMsg, simpleMethod);
+            String errMsg = "Exception thrown while removing entity value: " + e.getMessage();
+            Debug.logWarning(e, errMsg, module);
+            simpleMethod.addErrorMessage(methodContext, errMsg);
             return false;
         }
         return true;
@@ -67,21 +73,35 @@ public class RemoveValue extends MethodO
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<remove-value/>";
+        return toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<remove-value ");
+        sb.append("value-field=\"").append(this.valueFma).append("\" ");
+        if (!doCacheClearFse.isEmpty()) {
+            sb.append("do-cache-clear=\"").append(this.doCacheClearFse).append("\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
+    /**
+     * A factory for the &lt;remove-value&gt; element.
+     */
     public static final class RemoveValueFactory implements Factory<RemoveValue> {
+        @Override
         public RemoveValue createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new RemoveValue(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "remove-value";
         }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/SequencedIdToEnv.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/SequencedIdToEnv.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/SequencedIdToEnv.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/entityops/SequencedIdToEnv.java Sun Jun  3 11:13:32 2012
@@ -18,82 +18,97 @@
  *******************************************************************************/
 package org.ofbiz.minilang.method.entityops;
 
-import org.ofbiz.base.util.UtilValidate;
+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;
 
 /**
- * Gets a sequenced ID from the delegator and puts it in the env
+ * Implements the &lt;sequenced-id&gt; element.
  */
-public class SequencedIdToEnv extends MethodOperation {
+public final class SequencedIdToEnv extends MethodOperation {
 
-    ContextAccessor<Object> envAcsr;
-    boolean getLongOnly;
-    String seqName;
-    long staggerMax = 1;
+    private final FlexibleMapAccessor<Object> fieldFma;
+    private final boolean getLongOnly;
+    private final FlexibleStringExpander sequenceNameFse;
+    private final long staggerMax;
 
     public SequencedIdToEnv(Element element, SimpleMethod simpleMethod) throws MiniLangException {
         super(element, simpleMethod);
-        seqName = element.getAttribute("sequence-name");
-        envAcsr = new ContextAccessor<Object>(element.getAttribute("field"), element.getAttribute("env-name"));
-        // default false, anything but true is false
+        if (MiniLangValidate.validationOn()) {
+            MiniLangValidate.attributeNames(simpleMethod, element, "sequence-name", "field", "get-long-only", "stagger-max");
+            MiniLangValidate.requiredAttributes(simpleMethod, element, "sequence-name", "field");
+            MiniLangValidate.expressionAttributes(simpleMethod, element, "field");
+            MiniLangValidate.noChildElements(simpleMethod, element);
+        }
+        sequenceNameFse = FlexibleStringExpander.getInstance(element.getAttribute("sequence-name"));
+        fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field"));
         getLongOnly = "true".equals(element.getAttribute("get-long-only"));
-        String staggerMaxStr = element.getAttribute("stagger-max");
-        if (UtilValidate.isNotEmpty(staggerMaxStr)) {
+        long staggerMax = 1;
+        String staggerMaxAttribute = element.getAttribute("stagger-max");
+        if (!staggerMaxAttribute.isEmpty()) {
             try {
-                this.staggerMax = Long.parseLong(staggerMaxStr);
-                if (this.staggerMax < 1) {
-                    this.staggerMax = 1;
+                staggerMax = Long.parseLong(staggerMaxAttribute);
+                if (staggerMax < 1) {
+                    staggerMax = 1;
                 }
             } catch (NumberFormatException e) {
-                this.staggerMax = 1;
+                MiniLangValidate.handleError("Invalid stagger-max attribute value: " + e.getMessage(), simpleMethod, element);
             }
         }
+        this.staggerMax = staggerMax;
     }
+
     @Override
     public boolean exec(MethodContext methodContext) throws MiniLangException {
-        String seqName = methodContext.expandString(this.seqName);
+        String seqName = sequenceNameFse.expandString(methodContext.getEnvMap());
         if (getLongOnly) {
-            envAcsr.put(methodContext, methodContext.getDelegator().getNextSeqIdLong(seqName, staggerMax));
+            fieldFma.put(methodContext.getEnvMap(), methodContext.getDelegator().getNextSeqIdLong(seqName, staggerMax));
         } else {
-            envAcsr.put(methodContext, methodContext.getDelegator().getNextSeqId(seqName, staggerMax));
+            fieldFma.put(methodContext.getEnvMap(), methodContext.getDelegator().getNextSeqId(seqName, staggerMax));
         }
         return true;
     }
 
     @Override
     public String expandedString(MethodContext methodContext) {
-        // TODO: something more than a stub/dummy
-        return this.rawString();
+        return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap());
     }
 
     @Override
     public String rawString() {
-        // TODO: something more than the empty tag
-        return "<sequenced-id-to-env/>";
+        return toString();
     }
 
-    public static final class SequencedIdFactory implements Factory<SequencedIdToEnv> {
-        public SequencedIdToEnv createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
-            return new SequencedIdToEnv(element, simpleMethod);
-        }
-
-        public String getName() {
-            return "sequenced-id";
-        }
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("<sequenced-id ");
+        sb.append("sequence-name=\"").append(this.sequenceNameFse).append("\" ");
+        sb.append("field=\"").append(this.fieldFma).append("\" ");
+        sb.append("stagger-max=\"").append(this.staggerMax).append("\" ");
+        if (this.getLongOnly) {
+            sb.append("get-long-only=\"true\" ");
+        }
+        sb.append("/>");
+        return sb.toString();
     }
 
-    public static final class SequencedIdToEnvFactory implements Factory<SequencedIdToEnv> {
+    /**
+     * A factory for the &lt;sequenced-id&gt; element.
+     */
+    public static final class SequencedIdFactory implements Factory<SequencedIdToEnv> {
+        @Override
         public SequencedIdToEnv createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new SequencedIdToEnv(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
-            return "sequenced-id-to-env";
+            return "sequenced-id";
         }
     }
 }

Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Now.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Now.java?rev=1345652&r1=1345651&r2=1345652&view=diff
==============================================================================
--- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Now.java (original)
+++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/Now.java Sun Jun  3 11:13:32 2012
@@ -26,18 +26,37 @@ import org.ofbiz.base.util.collections.F
 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.ValidationException;
 import org.ofbiz.minilang.method.MethodContext;
 import org.ofbiz.minilang.method.MethodOperation;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 /**
- * Sets a field to the current system time.
+ * Implements the &lt;now&gt;, &lt;now-date-to-env&gt;, and &lt;now-timestamp&gt; elements.
  */
 public final class Now extends MethodOperation {
 
+    // This method is needed only during the v1 to v2 transition
+    private static boolean autoCorrect(Element element) {
+        String tagName = element.getTagName();
+        if ("now-date-to-env".equals(tagName) || "now-timestamp".equals(tagName)) {
+            Document doc = element.getOwnerDocument();
+            Element newElement = doc.createElement("now");
+            newElement.setAttribute("field", element.getAttribute("field"));
+            if ("now-date-to-env".equals(tagName)) {
+                element.setAttribute("type", "java.sql.Date");
+                newElement.setAttribute("type", "java.sql.Date");
+            }
+            element.getParentNode().replaceChild(newElement, element);
+            return true;
+        }
+        return false;
+    }
+
     private final FlexibleMapAccessor<Object> fieldFma;
     private final String type;
     private final Converter<Long, ? extends Object> converter;
@@ -45,17 +64,25 @@ public final class Now extends MethodOpe
     public Now(Element element, SimpleMethod simpleMethod) throws MiniLangException {
         super(element, simpleMethod);
         if (MiniLangValidate.validationOn()) {
+            String tagName = element.getTagName();
+            if ("now-date-to-env".equals(tagName) || "now-timestamp".equals(tagName)) {
+                MiniLangValidate.handleError("Deprecated - use <now>", simpleMethod, element);
+            }
             MiniLangValidate.attributeNames(simpleMethod, element, "field", "type");
             MiniLangValidate.requiredAttributes(simpleMethod, element, "field");
             MiniLangValidate.expressionAttributes(simpleMethod, element, "field");
             MiniLangValidate.constantAttributes(simpleMethod, element, "type");
             MiniLangValidate.noChildElements(simpleMethod, element);
         }
+        boolean elementModified = autoCorrect(element);
+        if (elementModified && MiniLangUtil.autoCorrectOn()) {
+            MiniLangUtil.flagDocumentAsCorrected(element);
+        }
         this.fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field"));
         this.type = element.getAttribute("type");
         Class<?> targetClass = null;
         try {
-            if (this.type.length() > 0) {
+            if (!this.type.isEmpty()) {
                 targetClass = ObjectType.loadClass(this.type);
             }
             if (targetClass == null) {
@@ -93,7 +120,7 @@ public final class Now extends MethodOpe
         if (!this.fieldFma.isEmpty()) {
             sb.append("field=\"").append(this.fieldFma).append("\" ");
         }
-        if (this.type.length() > 0) {
+        if (!this.type.isEmpty()) {
             sb.append("type=\"").append(this.type).append("\" ");
         }
         sb.append("/>");
@@ -101,13 +128,48 @@ public final class Now extends MethodOpe
     }
 
 
+    /**
+     * A factory for the &lt;now&gt; element.
+     */
     public static final class NowFactory implements Factory<Now> {
+        @Override
         public Now createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
             return new Now(element, simpleMethod);
         }
 
+        @Override
         public String getName() {
             return "now";
         }
     }
+
+    /**
+     * A factory for the &lt;now-date-to-env&gt; element.
+     */
+    public static final class NowDateToEnvFactory implements Factory<Now> {
+        @Override
+        public Now createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+            return new Now(element, simpleMethod);
+        }
+
+        @Override
+        public String getName() {
+            return "now-date-to-env";
+        }
+    }
+
+    /**
+     * A factory for the &lt;now-timestamp&gt; element.
+     */
+    public static final class NowTimestampFactory implements Factory<Now> {
+        @Override
+        public Now createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException {
+            return new Now(element, simpleMethod);
+        }
+
+        @Override
+        public String getName() {
+            return "now-timestamp";
+        }
+    }
 }