Author: musachy
Date: Wed Nov  4 00:00:08 2009
New Revision: 832624

URL: http://svn.apache.org/viewvc?rev=832624&view=rev
Log:
use beanutils for reflection

Added:
    
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ReflectionProviderTest.java
    
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
Modified:
    
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelReflectionProvider.java
    
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelValueStack.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
    
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java

Modified: 
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelReflectionProvider.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelReflectionProvider.java?rev=832624&r1=832623&r2=832624&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelReflectionProvider.java
 (original)
+++ 
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelReflectionProvider.java
 Wed Nov  4 00:00:08 2009
@@ -1,6 +1,7 @@
 package org.apache.struts2.uelplugin;
 
 import java.util.Map;
+import java.lang.reflect.InvocationTargetException;
 
 import javax.el.ELContext;
 import javax.el.ExpressionFactory;
@@ -11,6 +12,9 @@
 import com.opensymphony.xwork2.ognl.OgnlReflectionProvider;
 import com.opensymphony.xwork2.util.CompoundRoot;
 import com.opensymphony.xwork2.util.reflection.ReflectionException;
+import org.apache.commons.lang.xwork.StringUtils;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.beanutils.PropertyUtils;
 
 /**
  * A OgnlReflectionProvider based on Unified EL.
@@ -24,35 +28,41 @@
         this.xworkConverter = conv;
     }
 
-    public void initExpressionFactory() {
-        if (factory == null) {
-            factory = ExpressionFactoryHolder.getExpressionFactory();
-        }
-    }
+
 
     @Override
     public Object getValue(String expr, Map context, Object root) throws 
ReflectionException {
-        initExpressionFactory();
-        CompoundRoot compoundRoot = new CompoundRoot();
-        compoundRoot.add(root);
-        ELContext elContext = new CompoundRootELContext();
-        elContext.putContext(XWorkConverter.class, xworkConverter);
-        // parse our expression
-        ValueExpression valueExpr = factory.createValueExpression(elContext,
-                expr, String.class);
-        return (String) valueExpr.getValue(elContext);
+        try {
+            return PropertyUtils.getProperty(root, expr);
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        } catch (InvocationTargetException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        } catch (NoSuchMethodException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        }
+
+        return null;
     }
 
     @Override
     public void setValue(String expr, Map context, Object root, Object value) 
throws ReflectionException {
-        initExpressionFactory();
-        CompoundRoot compoundRoot = new CompoundRoot();
-        compoundRoot.add(root);
-        ELContext elContext = new CompoundRootELContext();
-        elContext.putContext(XWorkConverter.class, xworkConverter);
-        // parse our expression
-        ValueExpression valueExpr = factory.createValueExpression(elContext,
-                expr, String.class);
-        valueExpr.setValue(elContext, value);
+        try {
+            BeanUtils.setProperty(root, expr, value);
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        } catch (InvocationTargetException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        }
+    }
+
+    protected String wrap(String expr) {
+        if (!StringUtils.startsWith(expr, "${") && 
!StringUtils.startsWith(expr, "#{")) {
+            StringBuilder sb = new StringBuilder("${");
+            sb.append(expr);
+            sb.append("}");
+            return sb.toString();
+        } else
+            return expr;
     }
 }

Modified: 
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelValueStack.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelValueStack.java?rev=832624&r1=832623&r2=832624&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelValueStack.java
 (original)
+++ 
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UelValueStack.java
 Wed Nov  4 00:00:08 2009
@@ -27,21 +27,18 @@
 
     private ELContext elContext;
 
-    public UelValueStack(ExpressionFactory factory,
-                         XWorkConverter xworkConverter) {
+    public UelValueStack(ExpressionFactory factory, XWorkConverter 
xworkConverter) {
         this(factory, xworkConverter, new CompoundRoot());
     }
 
-    public UelValueStack(ExpressionFactory factory,
-                         XWorkConverter xworkConverter, ValueStack vs) {
+    public UelValueStack(ExpressionFactory factory, XWorkConverter 
xworkConverter, ValueStack vs) {
         this(factory, xworkConverter, new CompoundRoot(vs.getRoot()));
     }
 
-    public UelValueStack(ExpressionFactory factory,
-                         XWorkConverter xworkConverter, CompoundRoot root) {
+    public UelValueStack(ExpressionFactory factory, XWorkConverter 
xworkConverter, CompoundRoot root) {
         this.xworkConverter = xworkConverter;
         this.factory = factory;
-        setRoot(new CompoundRoot());
+        setRoot(new CompoundRoot(root));
     }
 
     public String findString(String expr, boolean throwException) {
@@ -52,7 +49,7 @@
         return findString(expr, false);
     }
 
-     public Object findValue(String expr) {
+    public Object findValue(String expr) {
         return findValue(expr, Object.class, false);
     }
 
@@ -86,15 +83,13 @@
                 // replace %{ with ${
                 expr = "#" + expr.substring(1);
             }
-            if (expr != null && !expr.startsWith("${")
-                    && !expr.startsWith("#{")) {
+            if (expr != null && !expr.startsWith("${") && 
!expr.startsWith("#{")) {
                 expr = "#{" + expr + "}";
             }
             elContext.putContext(XWorkConverter.class, xworkConverter);
             elContext.putContext(CompoundRoot.class, root);
             // parse our expression
-            ValueExpression valueExpr = factory.createValueExpression(
-                    elContext, expr, Object.class);
+            ValueExpression valueExpr = 
factory.createValueExpression(elContext, expr, Object.class);
             Object retVal = valueExpr.getValue(elContext);
             if (!Object.class.equals(asType)) {
                 retVal = xworkConverter.convertValue(null, retVal, asType);
@@ -156,18 +151,15 @@
         setValue(expr, value, false);
     }
 
-    public void setValue(String expr, Object value,
-                         boolean throwExceptionOnFailure) {
+    public void setValue(String expr, Object value, boolean 
throwExceptionOnFailure) {
         try {
-            if (expr != null && !expr.startsWith("${")
-                    && !expr.startsWith("#{")) {
+            if (expr != null && !expr.startsWith("${") && 
!expr.startsWith("#{")) {
                 expr = "#{" + expr + "}";
             }
             elContext.putContext(XWorkConverter.class, xworkConverter);
             elContext.putContext(CompoundRoot.class, root);
             // parse our expression
-            ValueExpression valueExpr = factory.createValueExpression(
-                    elContext, expr, Object.class);
+            ValueExpression valueExpr = 
factory.createValueExpression(elContext, expr, Object.class);
             valueExpr.setValue(elContext, value);
         } catch (ELException e) {
             if (throwExceptionOnFailure) {

Modified: 
struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml?rev=832624&r1=832623&r2=832624&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml 
(original)
+++ 
struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml 
Wed Nov  4 00:00:08 2009
@@ -32,7 +32,7 @@
                 <interceptor-ref name="actionMappingParams"/>
                 <interceptor-ref name="params">
                     <param name="excludeParams">dojo\..*,^struts\..*</param>
-                    <param 
name="setAcceptParamNames">[[\p{Graph}\s]&amp;&amp;[^,:=]]*</param>
+                    <param 
name="acceptParamNames">[[\p{Graph}\s]&amp;&amp;[^:=]]*</param>
                 </interceptor-ref>
                 <interceptor-ref name="conversionError"/>
                 <interceptor-ref name="validation">

Added: 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ReflectionProviderTest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ReflectionProviderTest.java?rev=832624&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ReflectionProviderTest.java
 (added)
+++ 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ReflectionProviderTest.java
 Wed Nov  4 00:00:08 2009
@@ -0,0 +1,28 @@
+package org.apache.struts2.uelplugin;
+
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
+
+import java.util.HashMap;
+
+public class ReflectionProviderTest extends XWorkTestCase {
+    private ReflectionProvider reflectionProvider;
+
+    public void testGetSimple() {
+        TestObject obj = new TestObject();
+        TestObject obj2 = new TestObject();
+        obj2.setAge(100);
+        obj.setInner(obj2);
+
+        assertSame(obj2, reflectionProvider.getValue("inner", new HashMap(), 
obj));
+        assertEquals(100, reflectionProvider.getValue("inner.age", new 
HashMap(), obj));
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        reflectionProvider = new UelReflectionProvider();
+        container.inject(reflectionProvider);
+    }
+}

Added: 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=832624&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
 (added)
+++ 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
 Wed Nov  4 00:00:08 2009
@@ -0,0 +1,53 @@
+package org.apache.struts2.uelplugin;
+
+import java.util.Date;
+import java.util.Map;
+
+
+public class TestObject {
+        private String value;
+        private int age;
+        private Date date;
+        private TestObject inner;
+        private Map parameters;
+
+        public String getValue() {
+            return value;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        public Date getDate() {
+            return date;
+        }
+
+        public void setDate(Date date) {
+            this.date = date;
+        }
+
+        public TestObject getInner() {
+            return inner;
+        }
+
+        public void setInner(TestObject inner) {
+            this.inner = inner;
+        }
+
+        public Map getParameters() {
+            return parameters;
+        }
+
+        public void setParameters(Map parameters) {
+            this.parameters = parameters;
+        }
+    }

Modified: 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java?rev=832624&r1=832623&r2=832624&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
 (original)
+++ 
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
 Wed Nov  4 00:00:08 2009
@@ -59,8 +59,24 @@
         assertEquals("Hello World", value);
 
         stack.setValue("${age}", "56");
-        String age = stack.findString("${age}");
-        assertEquals("56", age);
+        Integer age = (Integer) stack.findValue("${age}");
+        assertEquals(56, (int)age);
+    }
+
+    public void testNestedFind() throws IllegalAccessException,
+            InvocationTargetException, NoSuchMethodException {
+        CompoundRoot root = new CompoundRoot();
+        TestObject obj = new TestObject();
+        TestObject obj2 = new TestObject();
+        obj2.setAge(100);
+        obj.setInner(obj2);
+        root.add(obj);
+
+        UelValueStack stack = new UelValueStack(factory, converter);
+        stack.setRoot(root);
+
+        assertSame(obj2, stack.findValue("${inner}"));
+        assertEquals(100, stack.findValue("${inner.age}"));
     }
 
     public void testSetStringArray() throws IllegalAccessException,
@@ -166,52 +182,4 @@
         value = stack.findString("VALUENOTHERE");
         assertNull(value);
     }
-
-    public class TestObject {
-        private String value;
-        private int age;
-        private Date date;
-        private TestObject inner;
-        private Map parameters;
-
-        public String getValue() {
-            return value;
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        public int getAge() {
-            return age;
-        }
-
-        public void setAge(int age) {
-            this.age = age;
-        }
-
-        public Date getDate() {
-            return date;
-        }
-
-        public void setDate(Date date) {
-            this.date = date;
-        }
-
-        public TestObject getInner() {
-            return inner;
-        }
-
-        public void setInner(TestObject inner) {
-            this.inner = inner;
-        }
-
-        public Map getParameters() {
-            return parameters;
-        }
-
-        public void setParameters(Map parameters) {
-            this.parameters = parameters;
-        }
-    }
 }


Reply via email to