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