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]