You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2009/08/01 05:58:31 UTC
svn commit: r799796 -
/commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
Author: sebb
Date: Sat Aug 1 03:58:30 2009
New Revision: 799796
URL: http://svn.apache.org/viewvc?rev=799796&view=rev
Log:
Allow Read/write of both local and global scopes
TODO how to create global keys?
Modified:
commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
Modified: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java?rev=799796&r1=799795&r2=799796&view=diff
==============================================================================
--- commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java (original)
+++ commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java Sat Aug 1 03:58:30 2009
@@ -141,6 +141,13 @@
context = _context;
}
+ /*
+ * TODO how to handle clear, containsKey() etc.?
+ * Should they be restricted to engine scope, or should they apply to the
+ * union of the two scopes?
+ * Are they actually used by Jexl?
+ */
+
public void clear() {
Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
bnd.clear();
@@ -161,9 +168,12 @@
return bnd.entrySet();
}
+ // Fetch first match of key, either engine or global
public Object get(final Object key) {
- Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
- return bnd.get(key);
+ if (key instanceof String) {
+ return context.getAttribute((String) key);
+ }
+ return null;
}
public boolean isEmpty() {
@@ -176,9 +186,14 @@
return bnd.keySet();
}
+ // Update existing key if found, else create new engine key
+ // TODO - how do we create global keys?
public Object put(final String key, final Object value) {
- Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
- return bnd.put(key, value);
+ int scope = context.getAttributesScope(key);
+ if (scope == -1) { // not found, default to engine
+ scope = ScriptContext.ENGINE_SCOPE;
+ }
+ return context.getBindings(scope).put(key , value);
}
public void putAll(Map t) {
@@ -186,9 +201,15 @@
bnd.putAll(t); // N.B. SimpleBindings checks for valid keys
}
+ // N.B. if there is more than one copy of the key, only the nearest will be removed.
public Object remove(Object key) {
- Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
- return bnd.remove(key);
+ if (key instanceof String){
+ int scope = context.getAttributesScope((String) key);
+ if (scope != -1) { // found an entry
+ return context.removeAttribute((String)key, scope);
+ }
+ }
+ return null;
}
public int size() {