You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/02/27 20:37:44 UTC
svn commit: r155633 - in struts/flow/trunk/src:
java/org/apache/struts/flow/sugar/ScriptableDynaBean.java
java/org/apache/struts/flow/sugar/ScriptableMap.java
java/org/apache/struts/flow/sugar/SugarWrapFactory.java test/wrappersTest.js
Author: mrdon
Date: Sun Feb 27 11:37:42 2005
New Revision: 155633
URL: http://svn.apache.org/viewcvs?view=rev&rev=155633
Log:
Changed lookup order of Map and DynaBean to be property, map value which means
if you called map.size() and there existed a map.put("size", "foo"), you would
always call the map's size function. This replaces the other inverse order
which relied on function prefixes to ensure you called the function.
Modified:
struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableDynaBean.java
struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableMap.java
struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java
struts/flow/trunk/src/test/wrappersTest.js
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableDynaBean.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableDynaBean.java?view=diff&r1=155632&r2=155633
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableDynaBean.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableDynaBean.java Sun Feb 27 11:37:42 2005
@@ -34,7 +34,6 @@
public class ScriptableDynaBean extends JavaObjectWrapper implements Scriptable, Wrapper, Serializable {
private DynaBean bean;
- private String functionPrefix = null;
public ScriptableDynaBean() {
super();
@@ -44,9 +43,8 @@
this.bean = bean;
}
- public ScriptableDynaBean(Scriptable scope, Object javaObject, Class staticType, String functionPrefix, Map functions) {
+ public ScriptableDynaBean(Scriptable scope, Object javaObject, Class staticType, Map functions) {
super(scope, javaObject, staticType, functions);
- this.functionPrefix = functionPrefix;
if (javaObject instanceof DynaBean) {
this.bean = (DynaBean)javaObject;
} else {
@@ -59,7 +57,7 @@
}
public boolean has(String name, Scriptable start) {
- return (has(name) || super.has(name, start));
+ return (super.has(name, start) || has(name));
}
/**
@@ -70,15 +68,12 @@
}
public Object get(String name, Scriptable start) {
- if (functionPrefix != null && name.startsWith(functionPrefix)) {
- return super.get(name.substring(functionPrefix.length()), start);
+ if (super.has(name, start)) {
+ return super.get(name, start);
+ } else if (has(name)) {
+ return wrap(this.bean.get(name), start);
} else {
-
- if (has(name)) {
- return wrap(this.bean.get(name), start);
- } else {
- return super.get(name, start);
- }
+ return Scriptable.NOT_FOUND;
}
}
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableMap.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableMap.java?view=diff&r1=155632&r2=155633
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableMap.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ScriptableMap.java Sun Feb 27 11:37:42 2005
@@ -28,7 +28,6 @@
public class ScriptableMap extends JavaObjectWrapper implements Scriptable, Wrapper, Serializable {
private Map map;
- private String functionPrefix = null;
public ScriptableMap() {
super();
@@ -38,9 +37,8 @@
this.map = map;
}
- public ScriptableMap(Scriptable scope, Object javaObject, Class staticType, String functionPrefix, Map functions) {
+ public ScriptableMap(Scriptable scope, Object javaObject, Class staticType, Map functions) {
super(scope, javaObject, staticType, functions);
- this.functionPrefix = functionPrefix;
if (javaObject instanceof Map) {
this.map = (Map)javaObject;
} else {
@@ -53,7 +51,7 @@
}
public boolean has(String name, Scriptable start) {
- return (this.map.containsKey(name) || super.has(name, start));
+ return (super.has(name, start) || this.map.containsKey(name));
}
/**
@@ -64,14 +62,12 @@
}
public Object get(String name, Scriptable start) {
- if (functionPrefix != null && name.startsWith(functionPrefix)) {
- return super.get(name.substring(functionPrefix.length()), start);
+ if (super.has(name, start)) {
+ return super.get(name, start);
+ } else if (this.map.containsKey(name)) {
+ return this.map.get(name);
} else {
- if (this.map.containsKey(name)) {
- return this.map.get(name);
- } else {
- return super.get(name, start);
- }
+ return Scriptable.NOT_FOUND;
}
}
Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java?view=diff&r1=155632&r2=155633
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java Sun Feb 27 11:37:42 2005
@@ -27,8 +27,6 @@
*/
public class SugarWrapFactory extends WrapFactory {
- private String mapFuncPrefix = "fn_";
-
private List functionRegistry = new ArrayList();
private Map functionMappings = new HashMap();
@@ -41,10 +39,6 @@
addExtensionFunctions(FileExtensions.class);
}
- public void setMapFunctionPrefix(String prefix) {
- this.mapFuncPrefix = prefix;
- }
-
public void addExtensionFunction(Class cls, String name, Method func) {
int modifier = func.getModifiers();
if (Modifier.isStatic(modifier) && Modifier.isPublic(modifier)) {
@@ -91,9 +85,9 @@
Scriptable wrap = null;
if (javaObject instanceof Map) {
- wrap = new ScriptableMap(scope, javaObject, staticType, mapFuncPrefix, map);
+ wrap = new ScriptableMap(scope, javaObject, staticType, map);
} else if (javaObject instanceof DynaBean) {
- wrap = new ScriptableDynaBean(scope, javaObject, staticType, mapFuncPrefix, map);
+ wrap = new ScriptableDynaBean(scope, javaObject, staticType, map);
} else if (javaObject instanceof List) {
wrap = new ScriptableList(scope, javaObject, staticType, map);
} else {
Modified: struts/flow/trunk/src/test/wrappersTest.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/test/wrappersTest.js?view=diff&r1=155632&r2=155633
==============================================================================
--- struts/flow/trunk/src/test/wrappersTest.js (original)
+++ struts/flow/trunk/src/test/wrappersTest.js Sun Feb 27 11:37:42 2005
@@ -6,6 +6,14 @@
assertTrue("normal map get() didn't work", map.get("foo") == "bar");
}
+function testMapFuncPropCollide() {
+ map = new java.util.HashMap();
+ map.put("foo", "bar");
+ map.put("size", "100");
+ assertTrue("Size not right", map.size() == 2);
+ assertTrue("Size property not called", map.get("size") == "100");
+}
+
function testBeanIndex() {
bean = new Packages.org.apache.commons.beanutils.LazyDynaBean();
bean.set("foo", "bar");
@@ -21,6 +29,14 @@
if (x == "jim") jimFound = true;
}
assertTrue("jim not found in for..in", jimFound);
+}
+
+function testDynaBeanFuncPropCollide() {
+ bean = new Packages.org.apache.commons.beanutils.LazyDynaBean();
+ bean.set("foo", "bar");
+ bean.set("get", "100");
+ assertTrue("Get function shouldn't be overridden", bean.get("foo") == "bar");
+ assertTrue("Get property not called", bean.get("get") == "100");
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org