You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2008/03/24 00:26:12 UTC

svn commit: r640274 - in /commons/proper/beanutils/trunk/src: java/org/apache/commons/beanutils/BeanUtilsBean.java test/org/apache/commons/beanutils/BeanUtilsTestCase.java

Author: niallp
Date: Sun Mar 23 16:26:11 2008
New Revision: 640274

URL: http://svn.apache.org/viewvc?rev=640274&view=rev
Log:
Fix BEANUTILS-294 BeanUtilsBean.setProperty() does not support nested map - reported by Stephen Leung

Modified:
    commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/BeanUtilsBean.java
    commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java

Modified: commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/BeanUtilsBean.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/BeanUtilsBean.java?rev=640274&r1=640273&r2=640274&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/BeanUtilsBean.java (original)
+++ commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/BeanUtilsBean.java Sun Mar 23 16:26:11 2008
@@ -924,6 +924,8 @@
                 return; // Skip this property setter
             }
             type = dynaProperty.getType();
+        } else if (target instanceof Map) {
+            type = Object.class;
         } else {
             PropertyDescriptor descriptor = null;
             try {
@@ -1009,15 +1011,7 @@
 
         // Invoke the setter method
         try {
-            if (index >= 0) {
-                getPropertyUtils().setIndexedProperty(target, propName,
-                                                 index, newValue);
-            } else if (key != null) {
-                getPropertyUtils().setMappedProperty(target, propName,
-                                                key, newValue);
-            } else {
-                getPropertyUtils().setProperty(target, propName, newValue);
-            }
+          getPropertyUtils().setProperty(target, name, newValue);
         } catch (NoSuchMethodException e) {
             throw new InvocationTargetException
                 (e, "Cannot set " + propName);

Modified: commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java?rev=640274&r1=640273&r2=640274&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java (original)
+++ commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java Sun Mar 23 16:26:11 2008
@@ -1471,6 +1471,26 @@
 
     }
 
+    /**
+     * Test setting a value out of a mapped Map
+     */
+    public void testSetMappedMap() {
+        TestBean bean = new TestBean();
+        Map map = new HashMap();
+        map.put("sub-key-1", "sub-value-1");
+        map.put("sub-key-2", "sub-value-2");
+        map.put("sub-key-3", "sub-value-3");
+        bean.getMapProperty().put("mappedMap", map);
+
+        assertEquals("BEFORE", "sub-value-3", ((Map)bean.getMapProperty().get("mappedMap")).get("sub-key-3"));
+        try {
+            BeanUtils.setProperty(bean, "mapProperty(mappedMap)(sub-key-3)", "SUB-KEY-3-UPDATED");
+        } catch (Throwable t) {
+            fail("Threw " + t + "");
+        }
+        assertEquals("AFTER", "SUB-KEY-3-UPDATED", ((Map)bean.getMapProperty().get("mappedMap")).get("sub-key-3"));
+    }
+
     /** Tests that separate instances can register separate instances */
     public void testSeparateInstances() throws Exception {
         BeanUtilsBean utilsOne = new BeanUtilsBean(