similar error at 
https://demo.hotwaxmedia.com/catalog/control/ListShipmentMethodTypes

Vikas

On Dec 8, 2008, at 9:04 AM, Hans Bakker wrote:

This commit causes the following error:
going to:
https://localhost3:8443/accounting/control/AdminMain?organizationPartyId=Company

gives the error:
org.ofbiz.widget.screen.ScreenRenderException: Error rendering screen
[component://common/widget/CommonScreens.xml#GlobalDecorator]:
javax.el.ELException: Error parsing '${uiLabelMap.}': syntax error at
position 13, encountered '}', expected (Error parsing '$ {uiLabelMap.}':
syntax error at position 13, encountered '}', expected )

regards,
Hans

On Sun, 2008-12-07 at 16:11 +0000, [EMAIL PROTECTED] wrote:
Author: adrianc
Date: Sun Dec  7 08:11:44 2008
New Revision: 724146

URL: http://svn.apache.org/viewvc?rev=724146&view=rev
Log:
Integrated the Unified Expression Language (JSR-245) into the FlexibleStringExpander class.

This commit also includes an example usage in InventoryServices.xml.

Added:
   ofbiz/trunk/framework/base/lib/juel-2.1.0.jar   (with props)
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ UelUtil.java (with props)
Modified:
   ofbiz/trunk/.classpath
   ofbiz/trunk/LICENSE
ofbiz/trunk/applications/product/script/org/ofbiz/product/ inventory/InventoryServices.xml ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ FlexibleStringExpander.java

Modified: ofbiz/trunk/.classpath
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/.classpath?rev=724146&r1=724145&r2=724146&view=diff
= = = = = = = = = =====================================================================
--- ofbiz/trunk/.classpath (original)
+++ ofbiz/trunk/.classpath Sun Dec  7 08:11:44 2008
@@ -98,6 +98,7 @@
<classpathentry kind="lib" path="framework/base/lib/ log4j-1.2.15.jar"/>
        <classpathentry kind="lib" path="framework/base/lib/junitperf.jar"/>
        <classpathentry kind="lib" path="framework/base/lib/junit.jar"/>
+ <classpathentry kind="lib" path="framework/base/lib/ juel-2.1.0.jar"/>
        <classpathentry kind="lib" path="framework/base/lib/jdbm-1.0.jar"/>
<classpathentry kind="lib" path="framework/base/lib/jakarta- regexp-1.5.jar"/>
        <classpathentry kind="lib" path="framework/base/lib/icu4j-3_6.jar"/>

Modified: ofbiz/trunk/LICENSE
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/LICENSE?rev=724146&r1=724145&r2=724146&view=diff
= = = = = = = = = =====================================================================
--- ofbiz/trunk/LICENSE (original)
+++ ofbiz/trunk/LICENSE Sun Dec  7 08:11:44 2008
@@ -17,6 +17,7 @@
ofbiz/trunk/framework/base/lib/avalon-util-exception-1.0.0.jar
ofbiz/trunk/framework/base/lib/jakarta-regexp-1.5.jar
ofbiz/trunk/framework/base/lib/jpim-0.1.jar
+ofbiz/trunk/framework/base/lib/juel-2.1.0.jar
ofbiz/trunk/framework/base/lib/log4j-1.2.15.jar
ofbiz/trunk/framework/base/lib/mx4j-3.0.1.jar
ofbiz/trunk/framework/base/lib/mx4j-remote-3.0.1.jar
@@ -1929,6 +1930,7 @@
= = = = ===================================================================== The following library distributed with Apache OFBiz is licensed under the
COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL):
+ofbiz/trunk/framework/base/lib/juel-2.1.0.jar (javax.el.* API)
ofbiz/trunk/framework/base/lib/mail.jar
= = = = =====================================================================
COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 1.

Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/ inventory/InventoryServices.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryServices.xml?rev=724146&r1=724145&r2=724146&view=diff
= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/script/org/ofbiz/product/ inventory/InventoryServices.xml (original) +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/ inventory/InventoryServices.xml Sun Dec 7 08:11:44 2008
@@ -775,7 +775,7 @@
<field-to-list field-name="item" list- name="reservations"/>
                        </else>
                    </if>
- <set field="reserveQtyAccum" value="$ {bsh:reserveQtyAccum + item.getDouble(&quot;quantity&quot;);}" type="Double"/> + <set field="reserveQtyAccum" value="$ {reserveQtyAccum + item.quantity}" type="Double"/>
                </if-empty>
                </then>
            </if>

Added: ofbiz/trunk/framework/base/lib/juel-2.1.0.jar
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/lib/juel-2.1.0.jar?rev=724146&view=auto
= = = = = = = = = =====================================================================
Binary file - no diff available.

Propchange: ofbiz/trunk/framework/base/lib/juel-2.1.0.jar
------------------------------------------------------------------------------
   svn:mime-type = application/octet-stream

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ FlexibleStringExpander.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java?rev=724146&r1=724145&r2=724146&view=diff
= = = = = = = = = ===================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ FlexibleStringExpander.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ FlexibleStringExpander.java Sun Dec 7 08:11:44 2008
@@ -36,20 +36,21 @@

import bsh.EvalError;

-/** Expands string values within a Map context supporting the ${} syntax for - * variable placeholders and the "." (dot) and "[]" (square-brace) syntax - * elements for accessing Map entries and List elements in the context. - * It Also supports the execution of bsh files by using the 'bsh:' prefix. +/** Expands String values that contain Unified Expression Language syntax. + * Also supports the execution of bsh scripts by using the 'bsh:' prefix. * Further it is possible to control the output by specifying the suffix
 * '?currency(XXX)' to format the output according the current locale
- * and specified (XXX) currency
+ * and specified (XXX) currency.<p>This class extends the UEL by allowing
+ * nested expressions.</p>
 */
@SuppressWarnings("serial")
public class FlexibleStringExpander implements Serializable {

public static final String module = FlexibleStringExpander.class.getName(); - protected static UtilCache<String, FlexibleStringExpander> exprCache = new UtilCache<String, FlexibleStringExpander>("flexibleStringExpander.ExpressionCache"); - protected static FlexibleStringExpander nullExpr = new FlexibleStringExpander(null);
+    public static final String openBracket = "${";
+    public static final String closeBracket = "}";
+ protected static final UtilCache<String, FlexibleStringExpander> exprCache = new UtilCache<String, FlexibleStringExpander>("flexibleStringExpander.ExpressionCache"); + protected static final FlexibleStringExpander nullExpr = new FlexibleStringExpander(null);
    protected String orig;
    protected List<StrElem> strElems = null;
    protected int hint = 20;
@@ -61,7 +62,7 @@
    public FlexibleStringExpander(String original) {
// TODO: Change this to protected, remove @deprecated javadoc comment
        this.orig = original;
-        if (original != null && original.contains("${")) {
+        if (original != null && original.contains(openBracket)) {
            this.strElems = getStrElems(original);
            if (original.length() > this.hint) {
                this.hint = original.length();
@@ -146,7 +147,7 @@
            return nullExpr;
        }
        // Remove the next three lines to cache all expressions
-        if (!original.contains("${")) {
+        if (!original.contains(openBracket)) {
            return new FlexibleStringExpander(original);
        }
        FlexibleStringExpander fse = exprCache.get(original);
@@ -192,7 +193,7 @@
* @return The original String expanded by replacing varaible place holders.
     */
public static String expandString(String original, Map<String, ? extends Object> context, TimeZone timeZone, Locale locale) { - if (context == null || original == null || ! original.contains("${")) { + if (context == null || original == null || ! original.contains(openBracket)) {
            return original;
        }
FlexibleStringExpander fse = FlexibleStringExpander.getInstance(original);
@@ -209,7 +210,7 @@
        }
        int origLen = original.length();
        ArrayList<StrElem> strElems = new ArrayList<StrElem>();
-        int start = original.indexOf("${");
+        int start = original.indexOf(openBracket);
        if (start == -1) {
            strElems.add(new ConstElem(original));
            strElems.trimToSize();
@@ -218,7 +219,7 @@
        int currentInd = 0;
        int end = -1;
        while (start != -1) {
-            end = original.indexOf("}", start);
+            end = original.indexOf(closeBracket, start);
            if (end == -1) {
Debug.logWarning("Found a ${ without a closing } (curly-brace) in the String: " + original, module);
                break;
@@ -231,10 +232,10 @@
            if (original.indexOf("bsh:", start + 2) == start + 2) {
strElems.add(new BshElem(original.substring(start + 6, end)));
            } else {
-                int ptr = original.indexOf("${", start + 2);
+                int ptr = original.indexOf(openBracket, start + 2);
                while (ptr != -1 && end != -1 && ptr < end) {
-                    end = original.indexOf("}", end + 1);
-                    ptr = original.indexOf("${", ptr + 2);
+                    end = original.indexOf(closeBracket, end + 1);
+                    ptr = original.indexOf(openBracket, ptr + 2);
                }
                if (end == -1) {
                    end = origLen;
@@ -243,7 +244,7 @@
// Evaluation sequence is important - do not change it
                if (expression.contains("?currency(")) {
                    strElems.add(new CurrElem(expression));
-                } else if (expression.contains("${")){
+                } else if (expression.contains(openBracket)){
                    strElems.add(new NestedVarElem(expression));
                } else {
                    strElems.add(new VarElem(expression));
@@ -254,7 +255,7 @@
            if (currentInd > origLen) {
                currentInd = origLen;
            }
-            start = original.indexOf("${", currentInd);
+            start = original.indexOf(openBracket, currentInd);
        }
// append the rest of the original string, ie after the last variable
        if (currentInd < origLen) {
@@ -344,8 +345,7 @@
                    this.hint = expr.length();
                }
            }
- FlexibleMapAccessor<Object> fma = new FlexibleMapAccessor<Object>(expr.toString());
-            Object obj = fma.get(context, locale);
+ Object obj = UelUtil.evaluate(context, openBracket + expr.toString() + closeBracket);
            if (obj != null) {
                try {
buffer.append((String) ObjectType.simpleTypeConvert(obj, "String", null, timeZone, locale, true));
@@ -357,16 +357,15 @@
    }

    protected static class VarElem implements StrElem {
-        protected FlexibleMapAccessor<Object> fma = null;
+        protected String original = null;
        protected VarElem(String original) {
-            this.fma = new FlexibleMapAccessor<Object>(original);
+            this.original = original;
        }
public void append(StringBuilder buffer, Map<String, ? extends Object> context, TimeZone timeZone, Locale locale) {
-            Object obj = this.fma.get(context, locale);
+ Object obj = UelUtil.evaluate(context, openBracket + this.original + closeBracket);
            if (obj == null) {
-                String key = fma.getOriginalName();
-                if (key.startsWith("env.")) {
-                    obj = System.getProperty(key.substring(4));
+                if (this.original.startsWith("env.")) {
+ obj = System.getProperty(this.original.substring(4));
                }
            }
            if (obj != null) {

Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ UelUtil.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java?rev=724146&view=auto
= = = = = = = = = ===================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ UelUtil.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ UelUtil.java Sun Dec 7 08:11:44 2008
@@ -0,0 +1,147 @@
+/ *******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.base.util.string;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+import javax.el.*;
+
+import javolution.util.FastMap;
+
+/** Implements the Unified Expression Language (JSR-245). */
+public class UelUtil {
+
+ public static final FunctionMapper functionMapper = new Functions(); + protected static final ExpressionFactory exprFactory = new de.odysseus.el.ExpressionFactoryImpl(); + protected static final ELResolver defaultResolver = new CompositeELResolver() {
+        {
+            add(new ArrayELResolver(false));
+            add(new ListELResolver(false));
+            add(new MapELResolver(false));
+            add(new ResourceBundleELResolver());
+            add(new BeanELResolver(false));
+        }
+    };
+
+ /** Evaluates a Unified Expression Language expression and returns the result.
+     * @param context Evaluation context (variables)
+     * @param expression UEL expression
+     * @return Result object
+     */
+ public static Object evaluate(Map<String, ? extends Object> context, String expression) {
+        ELContext elContext = new BasicContext(context);
+ ValueExpression ve = exprFactory.createValueExpression(elContext, expression, Object.class);
+        Object obj = null;
+        try {
+            obj = ve.getValue(elContext);
+        } catch (Exception e) {}
+        return obj;
+    }
+
+    protected static class BasicContext extends ELContext {
+        protected VariableMapper variables = null;
+        protected BasicContext() {}
+        public BasicContext(Map<String, ? extends Object> context) {
+            this.variables = new Variables(context);
+        }
+        public ELResolver getELResolver() {
+            return defaultResolver;
+        }
+        public FunctionMapper getFunctionMapper() {
+            return functionMapper;
+        }
+        public VariableMapper getVariableMapper() {
+            return this.variables;
+        }
+        protected class Variables extends VariableMapper {
+ protected Map<String, Object> context = FastMap.newInstance(); + protected Variables(Map<String, ? extends Object> context) {
+                this.context.putAll(context);
+            }
+ public ValueExpression resolveVariable(String variable) {
+                Object obj = this.context.get(variable);
+                if (obj != null) {
+                    return new BasicValueExpression(obj);
+                }
+                return null;
+            }
+ public ValueExpression setVariable(String variable, ValueExpression expression) { + return new BasicValueExpression(this.context.put(variable, expression.getValue(null)));
+            }
+        }
+        @SuppressWarnings("serial")
+ protected class BasicValueExpression extends ValueExpression {
+            protected Object object;
+            public BasicValueExpression(Object object) {
+                super();
+                this.object = object;
+            }
+            public boolean equals(Object obj) {
+                if (this == obj) {
+                    return true;
+                }
+                try {
+ BasicValueExpression other = (BasicValueExpression) obj;
+                    return this.object.equals(other.object);
+                } catch (Exception e) {}
+                return false;
+            }
+            public int hashCode() {
+ return this.object == null ? 0 : this.object.hashCode();
+            }
+            public Object getValue(ELContext context) {
+                return this.object;
+            }
+            public String getExpressionString() {
+                return null;
+            }
+            public boolean isLiteralText() {
+                return false;
+            }
+            public Class<?> getType(ELContext context) {
+ return this.object == null ? null : this.object.getClass();
+            }
+            public boolean isReadOnly(ELContext context) {
+                return false;
+            }
+            public void setValue(ELContext context, Object value) {
+                this.object = value;
+            }
+            public String toString() {
+                return "ValueExpression(" + this.object + ")";
+            }
+            public Class<?> getExpectedType() {
+ return this.object == null ? null : this.object.getClass();
+            }
+        }
+    }
+
+    protected static class Functions extends FunctionMapper {
+ protected Map<String, Method> functionMap = FastMap.newInstance(); + public void setFunction(String prefix, String localName, Method method) {
+            synchronized(this) {
+                functionMap.put(prefix + ":" + localName, method);
+            }
+        }
+ public Method resolveFunction(String prefix, String localName) {
+            return functionMap.get(prefix + ":" + localName);
+        }
+    }
+
+}

Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ string/UelUtil.java
------------------------------------------------------------------------------
   svn:eol-style = native

Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ string/UelUtil.java
------------------------------------------------------------------------------
   svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ string/UelUtil.java
------------------------------------------------------------------------------
   svn:mime-type = text/xml


--
Antwebsystems.com: Quality OFBiz services for competitive prices


Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to