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/08 19:00:22 UTC
svn commit: r724428 - in
/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string:
FlexibleStringExpander.java UelUtil.java
Author: adrianc
Date: Mon Dec 8 10:00:22 2008
New Revision: 724428
URL: http://svn.apache.org/viewvc?rev=724428&view=rev
Log:
More work on the Unified Expression Language code:
1. Renamed some things in UelUtil.java to make them more understandable
2. Moved exception handling out of UelUtil.java and into calling methods
3. Added missing UEL implementation to FlexibleStringExpander.java
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java
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=724428&r1=724427&r2=724428&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 Mon Dec 8 10:00:22 2008
@@ -29,7 +29,6 @@
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.ObjectType;
import org.ofbiz.base.util.cache.UtilCache;
-import org.ofbiz.base.util.collections.FlexibleMapAccessor;
import org.ofbiz.base.util.UtilDateTime;
import org.ofbiz.base.util.UtilFormatOut;
import org.ofbiz.base.util.UtilMisc;
@@ -280,7 +279,7 @@
}
protected static class BshElem implements StrElem {
- String str;
+ protected String str;
protected BshElem(String scriptlet) {
this.str = scriptlet;
}
@@ -305,20 +304,23 @@
}
protected static class CurrElem implements StrElem {
- String str;
+ protected String valueStr;
protected FlexibleStringExpander codeExpr = null;
protected CurrElem(String original) {
int currencyPos = original.indexOf("?currency(");
- int closeBracket = original.indexOf(")", currencyPos+10);
- this.codeExpr = FlexibleStringExpander.getInstance(original.substring(currencyPos+10, closeBracket));
- this.str = original.substring(0, currencyPos);
+ int closeParen = original.indexOf(")", currencyPos + 10);
+ this.codeExpr = FlexibleStringExpander.getInstance(original.substring(currencyPos + 10, closeParen));
+ this.valueStr = openBracket + original.substring(0, currencyPos) + closeBracket;
}
public void append(StringBuilder buffer, Map<String, ? extends Object> context, TimeZone timeZone, Locale locale) {
- FlexibleMapAccessor<Object> fma = new FlexibleMapAccessor<Object>(this.str);
- Object obj = fma.get(context, locale);
- if (obj != null) {
- String currencyCode = this.codeExpr.expandString(context, timeZone, locale);
- buffer.append(UtilFormatOut.formatCurrency(Double.valueOf(obj.toString()), currencyCode, locale));
+ try {
+ Object obj = UelUtil.evaluate(context, this.valueStr);
+ if (obj != null) {
+ String currencyCode = this.codeExpr.expandString(context, timeZone, locale);
+ buffer.append(UtilFormatOut.formatCurrency(Double.valueOf(obj.toString()), currencyCode, locale));
+ }
+ } catch (Exception e) {
+ Debug.logVerbose("Error evaluating expression: " + e, module);
}
}
}
@@ -345,35 +347,37 @@
this.hint = expr.length();
}
}
- Object obj = UelUtil.evaluate(context, openBracket + expr.toString() + closeBracket);
- if (obj != null) {
- try {
- buffer.append((String) ObjectType.simpleTypeConvert(obj, "String", null, timeZone, locale, true));
- } catch (Exception e) {
- buffer.append(obj);
+ try {
+ Object obj = UelUtil.evaluate(context, openBracket + expr.toString() + closeBracket);
+ if (obj != null) {
+ buffer.append((String) ObjectType.simpleTypeConvert(obj, "String", null, timeZone, locale, false));
}
+ } catch (Exception e) {
+ Debug.logVerbose("Error evaluating expression: " + e, module);
}
}
}
protected static class VarElem implements StrElem {
protected String original = null;
+ protected String bracketedOriginal = null;
protected VarElem(String original) {
this.original = original;
+ this.bracketedOriginal = openBracket + original + closeBracket;
}
public void append(StringBuilder buffer, Map<String, ? extends Object> context, TimeZone timeZone, Locale locale) {
- Object obj = UelUtil.evaluate(context, openBracket + this.original + closeBracket);
- if (obj == null) {
- if (this.original.startsWith("env.")) {
- obj = System.getProperty(this.original.substring(4));
+ try {
+ Object obj = UelUtil.evaluate(context, this.bracketedOriginal);
+ if (obj == null) {
+ if (this.original.startsWith("env.")) {
+ obj = System.getProperty(this.original.substring(4));
+ }
}
- }
- if (obj != null) {
- try {
- buffer.append((String) ObjectType.simpleTypeConvert(obj, "String", null, timeZone, locale, true));
- } catch (Exception e) {
- buffer.append(obj);
+ if (obj != null) {
+ buffer.append((String) ObjectType.simpleTypeConvert(obj, "String", null, timeZone, locale, false));
}
+ } catch (Exception e) {
+ Debug.logVerbose("Error evaluating expression: " + e, module);
}
}
}
Modified: 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=724428&r1=724427&r2=724428&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java Mon Dec 8 10:00:22 2008
@@ -24,8 +24,6 @@
import javolution.util.FastMap;
-import org.ofbiz.base.util.Debug;
-
/** Implements the Unified Expression Language (JSR-245). */
public class UelUtil {
@@ -46,24 +44,18 @@
* @param context Evaluation context (variables)
* @param expression UEL expression
* @return Result object
+ * @throws Various <code>javax.el.*</code> exceptions
*/
public static Object evaluate(Map<String, ? extends Object> context, String expression) {
- Object obj = null;
- try {
- ELContext elContext = new BasicContext(context);
- ValueExpression ve = exprFactory.createValueExpression(elContext, expression, Object.class);
- obj = ve.getValue(elContext);
- } catch (Exception e) {
- Debug.logVerbose("Error evaluating expression: " + e, module);
- }
- return obj;
+ ELContext elContext = new BasicContext(context);
+ ValueExpression ve = exprFactory.createValueExpression(elContext, expression, Object.class);
+ return ve.getValue(elContext);
}
protected static class BasicContext extends ELContext {
- protected VariableMapper variables = null;
- protected BasicContext() {}
+ protected final VariableMapper variableMapper;
public BasicContext(Map<String, ? extends Object> context) {
- this.variables = new Variables(context);
+ this.variableMapper = new BasicVariableMapper(context, this);
}
public ELResolver getELResolver() {
return defaultResolver;
@@ -72,22 +64,24 @@
return functionMapper;
}
public VariableMapper getVariableMapper() {
- return this.variables;
+ return this.variableMapper;
}
- protected class Variables extends VariableMapper {
- protected Map<String, Object> context = FastMap.newInstance();
- protected Variables(Map<String, ? extends Object> context) {
- this.context.putAll(context);
+ protected class BasicVariableMapper extends VariableMapper {
+ protected ELContext elContext;
+ protected Map<String, Object> variables = FastMap.newInstance();
+ protected BasicVariableMapper(Map<String, ? extends Object> context, ELContext parentContext) {
+ this.variables.putAll(context);
+ this.elContext = parentContext;
}
public ValueExpression resolveVariable(String variable) {
- Object obj = this.context.get(variable);
+ Object obj = this.variables.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)));
+ return new BasicValueExpression(this.variables.put(variable, expression.getValue(this.elContext)));
}
}
@SuppressWarnings("serial")