diff --git a/src/main/java/ognl/OgnlContext.java b/src/main/java/ognl/OgnlContext.java index 8fe04414..5f1315d7 100644 --- a/src/main/java/ognl/OgnlContext.java +++ b/src/main/java/ognl/OgnlContext.java @@ -102,11 +102,11 @@ public class OgnlContext extends Object implements Map /** * Constructs a new OgnlContext with the given class resolver, type converter and member access. - * If any of these parameters is null the default will be used. + * If any of these parameters is null the default will be used, except memberAccess which must be non-null. * * @param classResolver the ClassResolver for a new OgnlContext. * @param typeConverter the TypeConverter for a new OgnlContext. - * @param memberAccess the MemberAccess for a new OgnlContext. + * @param memberAccess the MemberAccess for a new OgnlContext. Must be non-null. */ public OgnlContext(ClassResolver classResolver, TypeConverter typeConverter, MemberAccess memberAccess) { @@ -115,19 +115,22 @@ public OgnlContext(ClassResolver classResolver, TypeConverter typeConverter, Mem } /** - * @deprecated use on of the constructors which require {@link MemberAccess}, this one can be removed soon + * Constructs a new OgnlContext with the given member access, class resolver, type converter and values. + * If any of these parameters is null the default will be used, except memberAccess which must be non-null. + * + * @param memberAccess the MemberAccess for a new OgnlContext. Must be non-null. + * @param classResolver the ClassResolver for a new OgnlContext. + * @param typeConverter the TypeConverter for a new OgnlContext. + * @param values the Map of values to provide for a new OgnlContext. */ - @Deprecated - public OgnlContext(Map values) - { - // nulls will prevent overriding the default class resolver, type converter and member access - this(null, null, null, values); - } - public OgnlContext(MemberAccess memberAccess, ClassResolver classResolver, TypeConverter typeConverter, Map values) { super(); - this._values = values; + if (values != null) { + this._values = values; + } else { + this._values = new HashMap(23); // No 'values' map has been specified, so we create one of the default size: 23 entries + } if (classResolver != null) { this._classResolver = classResolver; } else { @@ -141,10 +144,15 @@ public OgnlContext(MemberAccess memberAccess, ClassResolver classResolver, TypeC if (memberAccess != null) { this._memberAccess = memberAccess; } else { - throw new RuntimeException("MemberAccess implementation must be provided!"); + throw new IllegalArgumentException("MemberAccess implementation must be provided - null not permitted!"); } } + /** + * Set (put) the provided value map content into the existing values Map for this OgnlContext. + * + * @param value a Map of additional values to put into this OgnlContext. + */ public void setValues(Map value) { for (Object k : value.keySet()) { @@ -152,6 +160,11 @@ public void setValues(Map value) } } + /** + * Get the values Map for this OgnlContext. + * + * @return Map of values for this OgnlContext. + */ public Map getValues() { return _values; @@ -477,26 +490,31 @@ public Map getLocalReferences() } /* ================= Map interface ================= */ + @Override public int size() { return _values.size(); } + @Override public boolean isEmpty() { return _values.isEmpty(); } + @Override public boolean containsKey(Object key) { return _values.containsKey(key); } + @Override public boolean containsValue(Object value) { return _values.containsValue(value); } + @Override public Object get(Object key) { Object result; @@ -529,6 +547,7 @@ public Object get(Object key) return result; } + @Override public Object put(Object key, Object value) { Object result; @@ -567,6 +586,7 @@ public Object put(Object key, Object value) return result; } + @Override public Object remove(Object key) { Object result; @@ -604,6 +624,7 @@ public Object remove(Object key) return result; } + @Override public void putAll(Map t) { for (Object k : t.keySet()) { @@ -611,6 +632,7 @@ public void putAll(Map t) } } + @Override public void clear() { _values.clear(); @@ -631,29 +653,34 @@ public void clear() setCurrentNode(null); } + @Override public Set keySet() { /* Should root, currentObject, classResolver, typeConverter & memberAccess be included here? */ return _values.keySet(); } + @Override public Collection values() { /* Should root, currentObject, classResolver, typeConverter & memberAccess be included here? */ return _values.values(); } + @Override public Set entrySet() { /* Should root, currentObject, classResolver, typeConverter & memberAccess be included here? */ return _values.entrySet(); } + @Override public boolean equals(Object o) { return _values.equals(o); } + @Override public int hashCode() { return _values.hashCode();