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

Reply via email to