|
Author: adrianc
Date: Sun Jan 31 03:24:58 2010 New Revision: 904962 URL: http://svn.apache.org/viewvc?rev=904962&view=rev Log: Based on advice from Adam Heath, made FlexibleMapAccessor and UelUtil methods syntactically correct. Methods that read Maps take read-only Map arguments, and methods that write Maps take writable Map arguments. Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ContextAccessor.java Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java?rev=904962&r1=904961&r2=904962&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java Sun Jan 31 03:24:58 2010 @@ -170,7 +170,7 @@ * @param base the Map to remove from * @return the object removed */ - public T remove(Map<String, ? extends Object> base) { + public T remove(Map<String, Object> base) { if (this.isEmpty()) { return null; } @@ -179,8 +179,7 @@ return null; } try { - Map<String, Object> writableMap = UtilGenerics.cast(base); - UelUtil.removeValue(writableMap, getExpression(base)); + UelUtil.removeValue(base, getExpression(base)); } catch (Exception e) { Debug.logError("UEL exception while removing value: " + e + ", original = " + this.original, 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=904962&r1=904961&r2=904962&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 Sun Jan 31 03:24:58 2010 @@ -82,7 +82,7 @@ */ @SuppressWarnings("unchecked") public static Object evaluate(Map<String, ? extends Object> context, String expression, Class expectedType) { - ELContext elContext = new BasicContext(context); + ELContext elContext = new ReadOnlyContext(context); ValueExpression ve = exprFactory.createValueExpression(elContext, expression, expectedType); return ve.getValue(elContext); } @@ -122,8 +122,29 @@ protected static class BasicContext extends ELContext { protected final Map<String, Object> variables; protected final VariableMapper variableMapper; - public BasicContext(Map<String, ? extends Object> context) { + public BasicContext(Map<String, Object> context) { this.variableMapper = new BasicVariableMapper(this); + this.variables = context; + } + @Override + public ELResolver getELResolver() { + return defaultResolver; + } + @Override + public FunctionMapper getFunctionMapper() { + return UelFunctions.getFunctionMapper(); + } + @Override + public VariableMapper getVariableMapper() { + return this.variableMapper; + } + } + + protected static class ReadOnlyContext extends ELContext { + protected final Map<String, ? extends Object> variables; + protected final VariableMapper variableMapper; + public ReadOnlyContext(Map<String, ? extends Object> context) { + this.variableMapper = new ReadOnlyVariableMapper(this); this.variables = UtilGenerics.cast(context); } @Override @@ -138,6 +159,24 @@ public VariableMapper getVariableMapper() { return this.variableMapper; } + protected static class ReadOnlyVariableMapper extends VariableMapper { + protected final ReadOnlyContext elContext; + protected ReadOnlyVariableMapper(ReadOnlyContext elContext) { + this.elContext = elContext; + } + @Override + public ValueExpression resolveVariable(String variable) { + Object obj = UelUtil.resolveVariable(variable, this.elContext.variables, null); + if (obj != null) { + return new ReadOnlyExpression(obj); + } + return null; + } + @Override + public ValueExpression setVariable(String variable, ValueExpression expression) { + throw new PropertyNotWritableException(); + } + } } protected static class BasicVariableMapper extends VariableMapper { @@ -449,7 +488,7 @@ return result; } - public static Object resolveVariable(String variable, Map<String, Object> variables, Locale locale) { + public static Object resolveVariable(String variable, Map<String, ? extends Object> variables, Locale locale) { Object obj = null; String createObjectType = null; String name = variable; Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ContextAccessor.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ContextAccessor.java?rev=904962&r1=904961&r2=904962&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ContextAccessor.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/ContextAccessor.java Sun Jan 31 03:24:58 2010 @@ -91,7 +91,7 @@ } /** Based on name remove from Map or from List in Map */ - public T remove(Map<String, ? extends Object> theMap, MethodContext methodContext) { + public T remove(Map<String, Object> theMap, MethodContext methodContext) { return fma.remove(theMap); } |
| Free forum by Nabble | Edit this page |
