You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2008/12/07 17:11:44 UTC
svn commit: r724146 - in /ofbiz/trunk: ./
applications/product/script/org/ofbiz/product/inventory/
framework/base/lib/ framework/base/src/org/ofbiz/base/util/string/
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
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/
Posted by Vikas Mayur <vi...@hotwaxmedia.com>.
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, adrianc@apache.org 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
>
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/
Posted by Adrian Crum <ad...@yahoo.com>.
Fixed, rev 724373.
-Adrian
--- On Sun, 12/7/08, Hans Bakker <ma...@antwebsystems.com> wrote:
> From: Hans Bakker <ma...@antwebsystems.com>
> 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: dev@ofbiz.apache.org
> 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, adrianc@apache.org
> 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
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/
Posted by Hans Bakker <ma...@antwebsystems.com>.
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, adrianc@apache.org 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