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 atposition 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/LICENSEofbiz/trunk/applications/product/script/org/ofbiz/product/ inventory/InventoryServices.xml ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ FlexibleStringExpander.javaModified: 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 theCOMMON 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.xmlURL: 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-streamModified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/ FlexibleStringExpander.javaURL: 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 commentthis.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 itif (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 variableif (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.javaURL: 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 = nativePropchange: 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
Description: S/MIME cryptographic signature
