Author: niallp
Date: Sun Jul  1 19:22:57 2007
New Revision: 552384

URL: http://svn.apache.org/viewvc?view=rev&rev=552384
Log:
BEANUTILS-247 - Support Arrays with multiple dimension

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
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestBean.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=552384&r1=552383&r2=552384
==============================================================================
--- 
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 19:22:57 2007
@@ -26,6 +26,7 @@
 import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -429,6 +430,13 @@
         if (bean == null) {
             throw new IllegalArgumentException("No bean specified");
         }
+        if (name == null || name.length() == 0) {
+            if (bean.getClass().isArray()) {
+                return Array.get(bean, index);
+            } else if (bean instanceof List) {
+                return ((List)bean).get(index);   
+            }
+        }
         if (name == null) {
             throw new IllegalArgumentException("No name specified for bean 
class '" +
                     bean.getClass() + "'");
@@ -1499,6 +1507,15 @@
 
         if (bean == null) {
             throw new IllegalArgumentException("No bean specified");
+        }
+        if (name == null || name.length() == 0) {
+            if (bean.getClass().isArray()) {
+                Array.set(bean, index, value);
+                return;
+            } else if (bean instanceof List) {
+                ((List)bean).set(index, value);   
+                return;
+            }
         }
         if (name == null) {
             throw new IllegalArgumentException("No name specified for bean 
class '" +

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=552384&r1=552383&r2=552384
==============================================================================
--- 
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 19:22:57 2007
@@ -22,6 +22,8 @@
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -1003,6 +1005,59 @@
             fail("Threw " + t + " instead of ArrayIndexOutOfBoundsException");
         }
 
+    }
+
+
+    /**
+     * Test getting an indexed value out of a multi-dimensional array
+     */
+    public void testGetIndexedArray() {
+        String[] firstArray = new String[] {"FIRST-1", "FIRST-2", "FIRST-3"};
+        String[] secondArray = new String[] {"SECOND-1", "SECOND-2", 
"SECOND-3",  "SECOND-4"};
+        String[][] mainArray = {firstArray, secondArray};
+        TestBean bean = new TestBean(mainArray);
+        try {
+            assertEquals("firstArray[0]", firstArray[0],  
PropertyUtils.getProperty(bean, "string2dArray[0][0]"));
+            assertEquals("firstArray[1]", firstArray[1],  
PropertyUtils.getProperty(bean, "string2dArray[0][1]"));
+            assertEquals("firstArray[2]", firstArray[2],  
PropertyUtils.getProperty(bean, "string2dArray[0][2]"));
+            assertEquals("secondArray[0]", secondArray[0], 
PropertyUtils.getProperty(bean, "string2dArray[1][0]"));
+            assertEquals("secondArray[1]", secondArray[1], 
PropertyUtils.getProperty(bean, "string2dArray[1][1]"));
+            assertEquals("secondArray[2]", secondArray[2], 
PropertyUtils.getProperty(bean, "string2dArray[1][2]"));
+            assertEquals("secondArray[3]", secondArray[3], 
PropertyUtils.getProperty(bean, "string2dArray[1][3]"));
+            
+            PropertyUtils.setProperty(bean, "string2dArray[1][3]", "FOO");
+            assertEquals("WRITE", "FOO", secondArray[3]);
+        } catch (Throwable t) {
+            t.printStackTrace();
+            fail("Threw " + t + "");
+        }
+    }
+
+    /**
+     * Test getting an indexed value out of List of Lists
+     */
+    public void testGetIndexedList() {
+        String[] firstArray = new String[] {"FIRST-1", "FIRST-2", "FIRST-3"};
+        String[] secondArray = new String[] {"SECOND-1", "SECOND-2", 
"SECOND-3",  "SECOND-4"};
+        List mainList   = new ArrayList();
+        mainList.add(Arrays.asList(firstArray));
+        mainList.add(Arrays.asList(secondArray));
+        TestBean bean = new TestBean(mainList);
+        try {
+            assertEquals("firstArray[0]", firstArray[0],  
PropertyUtils.getProperty(bean, "listIndexed[0][0]"));
+            assertEquals("firstArray[1]", firstArray[1],  
PropertyUtils.getProperty(bean, "listIndexed[0][1]"));
+            assertEquals("firstArray[2]", firstArray[2],  
PropertyUtils.getProperty(bean, "listIndexed[0][2]"));
+            assertEquals("secondArray[0]", secondArray[0], 
PropertyUtils.getProperty(bean, "listIndexed[1][0]"));
+            assertEquals("secondArray[1]", secondArray[1], 
PropertyUtils.getProperty(bean, "listIndexed[1][1]"));
+            assertEquals("secondArray[2]", secondArray[2], 
PropertyUtils.getProperty(bean, "listIndexed[1][2]"));
+            assertEquals("secondArray[3]", secondArray[3], 
PropertyUtils.getProperty(bean, "listIndexed[1][3]"));
+            
+            PropertyUtils.setProperty(bean, "listIndexed[1][3]", "FOO");
+            assertEquals("WRITE", "FOO", secondArray[3]);
+        } catch (Throwable t) {
+            t.printStackTrace();
+            fail("Threw " + t + "");
+        }
     }
 
 

Modified: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestBean.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestBean.java?view=diff&rev=552384&r1=552383&r2=552384
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestBean.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestBean.java
 Sun Jul  1 19:22:57 2007
@@ -95,6 +95,14 @@
         setStringProperty(stringProperty);
     }
 
+    public TestBean(List listIndexed) {
+        this.listIndexed = listIndexed;
+    }
+
+    public TestBean(String[][] string2dArray) {
+        this.string2dArray = string2dArray;
+    }
+
     // ------------------------------------------------------------- Properties
 
 
@@ -492,6 +500,10 @@
         stringIndexed[index] = value;
     }
 
+    private String[][] string2dArray = new String[][] {new String[] {"1", "2", 
"3"}, new String[] {"4","5","6"}};
+    public String[] getString2dArray(int index) {
+        return string2dArray[index];
+    }
 
     /**
      * A String property.



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

Reply via email to