Author: niallp
Date: Sun Jul  1 20:27:17 2007
New Revision: 552391

URL: http://svn.apache.org/viewvc?view=rev&rev=552391
Log:
BEANUTILS-43 - Support Mapped property inside a mapped property

Modified:
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java?view=diff&rev=552391&r1=552390&r2=552391
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
 Sun Jul  1 20:27:17 2007
@@ -780,6 +780,13 @@
         throws IllegalArgumentException, IllegalAccessException, 
         InvocationTargetException, NoSuchMethodException {
 
+        if (resolver.isMapped(propertyName)) {
+            String name = resolver.getProperty(propertyName);
+            if (name == null || name.length() == 0) {
+                propertyName = resolver.getKey(propertyName);
+            }
+        }
+
         if (resolver.isIndexed(propertyName) ||
             resolver.isMapped(propertyName)) {
             throw new IllegalArgumentException(
@@ -1885,6 +1892,13 @@
     protected void setPropertyOfMapBean(Map bean, String propertyName, Object 
value)
         throws IllegalArgumentException, IllegalAccessException, 
         InvocationTargetException, NoSuchMethodException {
+
+        if (resolver.isMapped(propertyName)) {
+            String name = resolver.getProperty(propertyName);
+            if (name == null || name.length() == 0) {
+                propertyName = resolver.getKey(propertyName);
+            }
+        }
 
         if (resolver.isIndexed(propertyName) ||
             resolver.isMapped(propertyName)) {

Modified: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java?view=diff&rev=552391&r1=552390&r2=552391
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java
 Sun Jul  1 20:27:17 2007
@@ -1122,6 +1122,25 @@
 
 
     /**
+     * Test getting a value out of a mapped Map
+     */
+    public void testGetMappedMap() {
+        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);
+        try {
+            assertEquals("sub-value-1", PropertyUtils.getProperty(bean, 
"mapProperty(mappedMap)(sub-key-1)"));
+            assertEquals("sub-value-2", PropertyUtils.getProperty(bean, 
"mapProperty(mappedMap)(sub-key-2)"));
+            assertEquals("sub-value-3", PropertyUtils.getProperty(bean, 
"mapProperty(mappedMap)(sub-key-3)"));
+        } catch (Throwable t) {
+            fail("Threw " + t + "");
+        }
+    }
+
+    /**
      * Test getting mapped values with periods in the key.
      */
     public void testGetMappedPeriods() {
@@ -2804,6 +2823,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 {
+            PropertyUtils.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"));
+    }
 
     /**
      * Positive and negative tests on setMappedProperty valid arguments.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to