Author: ebourg
Date: Mon Mar 21 09:58:56 2005
New Revision: 158491

URL: http://svn.apache.org/viewcvs?view=rev&rev=158491
Log:
Fix for bug 34104, resolveContainerStore now returns the first element of array 
properties

Modified:
    
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractConfiguration.java
    
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestBaseConfiguration.java
    jakarta/commons/proper/configuration/trunk/xdocs/changes.xml

Modified: 
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractConfiguration.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractConfiguration.java?view=diff&r1=158490&r2=158491
==============================================================================
--- 
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractConfiguration.java
 (original)
+++ 
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractConfiguration.java
 Mon Mar 21 09:58:56 2005
@@ -906,11 +906,55 @@
     protected Object resolveContainerStore(String key)
     {
         Object value = getProperty(key);
-        if (value != null && value instanceof List)
+        if (value != null)
         {
-            List list = (List) value;
-            value = list.isEmpty() ? null : list.get(0);
+            if (value instanceof List)
+            {
+                List list = (List) value;
+                value = list.isEmpty() ? null : list.get(0);
+            }
+            else if (value instanceof Object[])
+            {
+                Object[] array = (Object[]) value;
+                value = array.length == 0 ? null : array[0];
+            }
+            else if (value instanceof boolean[])
+            {
+                boolean[] array = (boolean[]) value;
+                value = array.length == 0 ? null : new Boolean(array[0]);
+            }
+            else if (value instanceof byte[])
+            {
+                byte[] array = (byte[]) value;
+                value = array.length == 0 ? null : new Byte(array[0]);
+            }
+            else if (value instanceof short[])
+            {
+                short[] array = (short[]) value;
+                value = array.length == 0 ? null : new Short(array[0]);
+            }
+            else if (value instanceof int[])
+            {
+                int[] array = (int[]) value;
+                value = array.length == 0 ? null : new Integer(array[0]);
+            }
+            else if (value instanceof long[])
+            {
+                long[] array = (long[]) value;
+                value = array.length == 0 ? null : new Long(array[0]);
+            }
+            else if (value instanceof float[])
+            {
+                float[] array = (float[]) value;
+                value = array.length == 0 ? null : new Float(array[0]);
+            }
+            else if (value instanceof double[])
+            {
+                double[] array = (double[]) value;
+                value = array.length == 0 ? null : new Double(array[0]);
+            }
         }
+
         return value;
     }
 

Modified: 
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestBaseConfiguration.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestBaseConfiguration.java?view=diff&r1=158490&r2=158491
==============================================================================
--- 
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestBaseConfiguration.java
 (original)
+++ 
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestBaseConfiguration.java
 Mon Mar 21 09:58:56 2005
@@ -623,4 +623,44 @@
         assertEquals("long value", 0xFFFFFFFFFFFFFFFFL, 
config.getBigInteger("number").longValue());
     }
 
+    public void testResolveContainerStore()
+    {
+        AbstractConfiguration config = new BaseConfiguration();
+
+        // array of objects
+        config.addPropertyDirect("array", new String[] { "foo", "bar" });
+
+        assertEquals("first element of the 'array' property", "foo", 
config.resolveContainerStore("array"));
+
+        // list of objects
+        List list = new ArrayList();
+        list.add("foo");
+        list.add("bar");
+        config.addPropertyDirect("list", list);
+
+        assertEquals("first element of the 'list' property", "foo", 
config.resolveContainerStore("list"));
+
+        // arrays of primitives
+        config.addPropertyDirect("array.boolean", new boolean[] { true, false 
});
+        assertEquals("first element of the 'array.boolean' property", true, 
config.getBoolean("array.boolean"));
+
+        config.addPropertyDirect("array.byte", new byte[] { 1, 2 });
+        assertEquals("first element of the 'array.byte' property", 1, 
config.getByte("array.byte"));
+
+        config.addPropertyDirect("array.short", new short[] { 1, 2 });
+        assertEquals("first element of the 'array.short' property", 1, 
config.getShort("array.short"));
+
+        config.addPropertyDirect("array.int", new int[] { 1, 2 });
+        assertEquals("first element of the 'array.int' property", 1, 
config.getInt("array.int"));
+
+        config.addPropertyDirect("array.long", new long[] { 1, 2 });
+        assertEquals("first element of the 'array.long' property", 1, 
config.getLong("array.long"));
+
+        config.addPropertyDirect("array.float", new float[] { 1, 2 });
+        assertEquals("first element of the 'array.float' property", 1, 
config.getFloat("array.float"), 0);
+
+        config.addPropertyDirect("array.double", new double[] { 1, 2 });
+        assertEquals("first element of the 'array.double' property", 1, 
config.getDouble("array.double"), 0);
+    }
+
 }

Modified: jakarta/commons/proper/configuration/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/xdocs/changes.xml?view=diff&r1=158490&r2=158491
==============================================================================
--- jakarta/commons/proper/configuration/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Mon Mar 21 
09:58:56 2005
@@ -27,6 +27,12 @@
         Fixed a ConcurrentModificationException thrown when calling clear()
         on a SubsetConfiguration applied to a BaseConfiguration.
       </action>
+      <action dev="ebourg" type="update" issue="34104">
+        The resolveContainerStore() method in AbstractConfiguration now works
+        properly with arrays of objects and arrays of primitives. This means
+        it is possible to store an array of value in the configuration and
+        retrieve the first element with the getString(), getInt()... methods.
+      </action>
     </release>
 
     <release version="1.1-rc2" date="2005-03-06">



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

Reply via email to