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, [hidden email] 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("quantity");}" 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 |
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, [hidden email] 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("quantity");}" >> 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 > smime.p7s (3K) Download Attachment |
In reply to this post by hans_bakker
Fixed, rev 724373.
-Adrian --- On Sun, 12/7/08, Hans Bakker <[hidden email]> wrote: > From: Hans Bakker <[hidden email]> > Subject: Re: svn commit: r724146 - in /ofbiz/trunk: ./ applications/product/script/org/ofbiz/product/inventory/ framework/base/lib/ framework/base/src/org/ofbiz/base/util/string/ > To: [hidden email] > Date: Sunday, December 7, 2008, 7:34 PM > 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, [hidden email] > 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("quantity");}" > 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 |
Free forum by Nabble | Edit this page |