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]