You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by eb...@apache.org on 2005/09/27 15:06:34 UTC

svn commit: r291931 - in /jakarta/commons/proper/configuration/trunk: src/java/org/apache/commons/configuration/ src/test/org/apache/commons/configuration/ xdocs/

Author: ebourg
Date: Tue Sep 27 06:06:23 2005
New Revision: 291931

URL: http://svn.apache.org/viewcvs?rev=291931&view=rev
Log:
Implemented variable interpolation for all getters

Modified:
    jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractConfiguration.java
    jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java
    jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestBaseConfiguration.java
    jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.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?rev=291931&r1=291930&r2=291931&view=diff
==============================================================================
--- 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 Tue Sep 27 06:06:23 2005
@@ -131,6 +131,25 @@
     }
 
     /**
+     * Returns the interpolated value. Non String values are returned without change.
+     *
+     * @param value the value to interpolate
+     *
+     * @return returns the value with variables substituted
+     */
+    protected Object interpolate(Object value)
+    {
+        if (value instanceof String)
+        {
+            return interpolate((String) value);
+        }
+        else
+        {
+            return value;
+        }
+    }
+
+    /**
      * Recursive handler for multple levels of interpolation.
      * 
      * When called the first time, priorVariables should be null.
@@ -388,7 +407,7 @@
         {
             try
             {
-                return PropertyConverter.toBoolean(value);
+                return PropertyConverter.toBoolean(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -436,7 +455,7 @@
         {
             try
             {
-                return PropertyConverter.toByte(value);
+                return PropertyConverter.toByte(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -484,7 +503,7 @@
         {
             try
             {
-                return PropertyConverter.toDouble(value);
+                return PropertyConverter.toDouble(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -532,7 +551,7 @@
         {
             try
             {
-                return PropertyConverter.toFloat(value);
+                return PropertyConverter.toFloat(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -587,7 +606,7 @@
         {
             try
             {
-                return PropertyConverter.toInteger(value);
+                return PropertyConverter.toInteger(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -635,7 +654,7 @@
         {
             try
             {
-                return PropertyConverter.toLong(value);
+                return PropertyConverter.toLong(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -683,7 +702,7 @@
         {
             try
             {
-                return PropertyConverter.toShort(value);
+                return PropertyConverter.toShort(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -727,7 +746,7 @@
         {
             try
             {
-                return PropertyConverter.toBigDecimal(value);
+                return PropertyConverter.toBigDecimal(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -771,7 +790,7 @@
         {
             try
             {
-                return PropertyConverter.toBigInteger(value);
+                return PropertyConverter.toBigInteger(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -887,12 +906,7 @@
             Iterator it = l.iterator();
             while (it.hasNext())
             {
-                Object element = it.next();
-                if (element instanceof String) {
-                    list.add(interpolate((String) element));
-                } else {
-                    list.add(element);
-                }
+                list.add(interpolate(it.next()));
             }
 
         }

Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java?rev=291931&r1=291930&r2=291931&view=diff
==============================================================================
--- jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java (original)
+++ jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java Tue Sep 27 06:06:23 2005
@@ -27,6 +27,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.io.Serializable;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.ArrayUtils;
@@ -45,7 +46,7 @@
  * @version $Revision$, $Date$
  * @since 1.1
  */
-public class DataConfiguration extends AbstractConfiguration
+public class DataConfiguration extends AbstractConfiguration implements Serializable
 {
     /** The key of the property storing the user defined date format. */
     public static final String DATE_FORMAT_KEY = "org.apache.commons.configuration.format.date";
@@ -130,7 +131,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -154,7 +155,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toBoolean(it.next()));
+                list.add(PropertyConverter.toBoolean(interpolate(it.next())));
             }
         }
         else
@@ -163,7 +164,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toBoolean(value));
+                list.add(PropertyConverter.toBoolean(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -229,7 +230,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                array[i++] = PropertyConverter.toBoolean(it.next()).booleanValue();
+                array[i++] = PropertyConverter.toBoolean(interpolate(it.next())).booleanValue();
             }
         }
         else
@@ -238,7 +239,7 @@
             {
                 // attempt to convert a single value
                 array = new boolean[1];
-                array[0] = PropertyConverter.toBoolean(value).booleanValue();
+                array[0] = PropertyConverter.toBoolean(interpolate(value)).booleanValue();
             }
             catch (ConversionException e)
             {
@@ -280,7 +281,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -304,7 +305,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toByte(it.next()));
+                list.add(PropertyConverter.toByte(interpolate(it.next())));
             }
         }
         else
@@ -313,7 +314,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toByte(value));
+                list.add(PropertyConverter.toByte(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -378,7 +379,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                array[i++] = PropertyConverter.toByte(it.next()).byteValue();
+                array[i++] = PropertyConverter.toByte(interpolate(it.next())).byteValue();
             }
         }
         else
@@ -387,7 +388,7 @@
             {
                 // attempt to convert a single value
                 array = new byte[1];
-                array[0] = PropertyConverter.toByte(value).byteValue();
+                array[0] = PropertyConverter.toByte(interpolate(value)).byteValue();
             }
             catch (ConversionException e)
             {
@@ -429,7 +430,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -453,7 +454,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toShort(it.next()));
+                list.add(PropertyConverter.toShort(interpolate(it.next())));
             }
         }
         else
@@ -462,7 +463,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toShort(value));
+                list.add(PropertyConverter.toShort(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -527,7 +528,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                array[i++] = PropertyConverter.toShort(it.next()).shortValue();
+                array[i++] = PropertyConverter.toShort(interpolate(it.next())).shortValue();
             }
         }
         else
@@ -536,7 +537,7 @@
             {
                 // attempt to convert a single value
                 array = new short[1];
-                array[0] = PropertyConverter.toShort(value).shortValue();
+                array[0] = PropertyConverter.toShort(interpolate(value)).shortValue();
             }
             catch (ConversionException e)
             {
@@ -579,7 +580,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -603,7 +604,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toInteger(it.next()));
+                list.add(PropertyConverter.toInteger(interpolate(it.next())));
             }
         }
         else
@@ -612,7 +613,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toInteger(value));
+                list.add(PropertyConverter.toInteger(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -677,7 +678,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                array[i++] = PropertyConverter.toInteger(it.next()).intValue();
+                array[i++] = PropertyConverter.toInteger(interpolate(it.next())).intValue();
             }
         }
         else
@@ -686,7 +687,7 @@
             {
                 // attempt to convert a single value
                 array = new int[1];
-                array[0] = PropertyConverter.toInteger(value).intValue();
+                array[0] = PropertyConverter.toInteger(interpolate(value)).intValue();
             }
             catch (ConversionException e)
             {
@@ -728,7 +729,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -752,7 +753,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toLong(it.next()));
+                list.add(PropertyConverter.toLong(interpolate(it.next())));
             }
         }
         else
@@ -761,7 +762,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toLong(value));
+                list.add(PropertyConverter.toLong(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -826,7 +827,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                array[i++] = PropertyConverter.toLong(it.next()).longValue();
+                array[i++] = PropertyConverter.toLong(interpolate(it.next())).longValue();
             }
         }
         else
@@ -835,7 +836,7 @@
             {
                 // attempt to convert a single value
                 array = new long[1];
-                array[0] = PropertyConverter.toLong(value).longValue();
+                array[0] = PropertyConverter.toLong(interpolate(value)).longValue();
             }
             catch (ConversionException e)
             {
@@ -877,7 +878,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -901,7 +902,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toFloat(it.next()));
+                list.add(PropertyConverter.toFloat(interpolate(it.next())));
             }
         }
         else
@@ -910,7 +911,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toFloat(value));
+                list.add(PropertyConverter.toFloat(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -975,7 +976,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                array[i++] = PropertyConverter.toFloat(it.next()).floatValue();
+                array[i++] = PropertyConverter.toFloat(interpolate(it.next())).floatValue();
             }
         }
         else
@@ -984,7 +985,7 @@
             {
                 // attempt to convert a single value
                 array = new float[1];
-                array[0] = PropertyConverter.toFloat(value).floatValue();
+                array[0] = PropertyConverter.toFloat(interpolate(value)).floatValue();
             }
             catch (ConversionException e)
             {
@@ -1027,7 +1028,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -1051,7 +1052,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toDouble(it.next()));
+                list.add(PropertyConverter.toDouble(interpolate(it.next())));
             }
         }
         else
@@ -1060,7 +1061,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toDouble(value));
+                list.add(PropertyConverter.toDouble(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -1125,7 +1126,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                array[i++] = PropertyConverter.toDouble(it.next()).doubleValue();
+                array[i++] = PropertyConverter.toDouble(interpolate(it.next())).doubleValue();
             }
         }
         else
@@ -1134,7 +1135,7 @@
             {
                 // attempt to convert a single value
                 array = new double[1];
-                array[0] = PropertyConverter.toDouble(value).doubleValue();
+                array[0] = PropertyConverter.toDouble(interpolate(value)).doubleValue();
             }
             catch (ConversionException e)
             {
@@ -1176,7 +1177,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -1195,7 +1196,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toBigInteger(it.next()));
+                list.add(PropertyConverter.toBigInteger(interpolate(it.next())));
             }
         }
         else
@@ -1204,7 +1205,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toBigInteger(value));
+                list.add(PropertyConverter.toBigInteger(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -1286,7 +1287,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -1305,7 +1306,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toBigDecimal(it.next()));
+                list.add(PropertyConverter.toBigDecimal(interpolate(it.next())));
             }
         }
         else
@@ -1314,7 +1315,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toBigDecimal(value));
+                list.add(PropertyConverter.toBigDecimal(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -1403,7 +1404,7 @@
         {
             try
             {
-                return PropertyConverter.toURL(value);
+                return PropertyConverter.toURL(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -1443,7 +1444,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -1462,7 +1463,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toURL(it.next()));
+                list.add(PropertyConverter.toURL(interpolate(it.next())));
             }
         }
         else
@@ -1471,7 +1472,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toURL(value));
+                list.add(PropertyConverter.toURL(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -1598,7 +1599,7 @@
         {
             try
             {
-                return PropertyConverter.toDate(value, format);
+                return PropertyConverter.toDate(interpolate(value), format);
             }
             catch (ConversionException e)
             {
@@ -1681,7 +1682,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -1710,7 +1711,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toDate(it.next(), format));
+                list.add(PropertyConverter.toDate(interpolate(it.next()), format));
             }
         }
         else
@@ -1719,7 +1720,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toDate(value, format));
+                list.add(PropertyConverter.toDate(interpolate(value), format));
             }
             catch (ConversionException e)
             {
@@ -1890,7 +1891,7 @@
         {
             try
             {
-                return PropertyConverter.toCalendar(value, format);
+                return PropertyConverter.toCalendar(interpolate(value), format);
             }
             catch (ConversionException e)
             {
@@ -1973,7 +1974,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -2004,7 +2005,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toCalendar(it.next(), format));
+                list.add(PropertyConverter.toCalendar(interpolate(it.next()), format));
             }
         }
         else
@@ -2013,7 +2014,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toCalendar(value, format));
+                list.add(PropertyConverter.toCalendar(interpolate(value), format));
             }
             catch (ConversionException e)
             {
@@ -2152,7 +2153,7 @@
         {
             try
             {
-                return PropertyConverter.toLocale(value);
+                return PropertyConverter.toLocale(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -2192,7 +2193,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -2211,7 +2212,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toLocale(it.next()));
+                list.add(PropertyConverter.toLocale(interpolate(it.next())));
             }
         }
         else
@@ -2220,7 +2221,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toLocale(value));
+                list.add(PropertyConverter.toLocale(interpolate(value)));
             }
             catch (ConversionException e)
             {
@@ -2309,7 +2310,7 @@
         {
             try
             {
-                return PropertyConverter.toColor(value);
+                return PropertyConverter.toColor(interpolate(value));
             }
             catch (ConversionException e)
             {
@@ -2349,7 +2350,7 @@
     {
         Object value = getProperty(key);
 
-        List list = null;
+        List list;
 
         if (value == null || (value instanceof String && StringUtils.isEmpty((String) value)))
         {
@@ -2368,7 +2369,7 @@
             Iterator it = values.iterator();
             while (it.hasNext())
             {
-                list.add(PropertyConverter.toColor(it.next()));
+                list.add(PropertyConverter.toColor(interpolate(it.next())));
             }
         }
         else
@@ -2377,7 +2378,7 @@
             {
                 // attempt to convert a single value
                 list = new ArrayList();
-                list.add(PropertyConverter.toColor(value));
+                list.add(PropertyConverter.toColor(interpolate(value)));
             }
             catch (ConversionException e)
             {

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?rev=291931&r1=291930&r2=291931&view=diff
==============================================================================
--- 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 Tue Sep 27 06:06:23 2005
@@ -429,6 +429,36 @@
         ListAssert.assertEquals("'array' property", list, config.getList("array"));
     }
 
+    public void testGetInterpolatedPrimitives()
+    {
+        config.addProperty("number", "1");
+        config.addProperty("value", "${number}");
+
+        config.addProperty("boolean", "true");
+        config.addProperty("booleanValue", "${boolean}");
+
+        // primitive types
+        assertEquals("boolean interpolation", true, config.getBoolean("booleanValue"));
+        assertEquals("byte interpolation", 1, config.getByte("value"));
+        assertEquals("short interpolation", 1, config.getShort("value"));
+        assertEquals("int interpolation", 1, config.getInt("value"));
+        assertEquals("long interpolation", 1, config.getLong("value"));
+        assertEquals("float interpolation", 1, config.getFloat("value"), 0);
+        assertEquals("double interpolation", 1, config.getDouble("value"), 0);
+
+        // primitive wrappers
+        assertEquals("Boolean interpolation", Boolean.TRUE, config.getBoolean("booleanValue", null));
+        assertEquals("Byte interpolation", new Byte("1"), config.getByte("value", null));
+        assertEquals("Short interpolation", new Short("1"), config.getShort("value", null));
+        assertEquals("Integer interpolation", new Integer("1"), config.getInteger("value", null));
+        assertEquals("Long interpolation", new Long("1"), config.getLong("value", null));
+        assertEquals("Float interpolation", new Float("1"), config.getFloat("value", null));
+        assertEquals("Double interpolation", new Double("1"), config.getDouble("value", null));
+
+        assertEquals("BigInteger interpolation", new BigInteger("1"), config.getBigInteger("value", null));
+        assertEquals("BigDecimal interpolation", new BigDecimal("1"), config.getBigDecimal("value", null));
+    }
+
     public void testCommaSeparatedString()
     {
         String prop = "hey, that's a test";

Modified: jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java?rev=291931&r1=291930&r2=291931&view=diff
==============================================================================
--- jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java (original)
+++ jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java Tue Sep 27 06:06:23 2005
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
+ * Copyright 2004-2005 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -16,17 +16,17 @@
 
 package org.apache.commons.configuration;
 
-import java.awt.Color;
+import java.awt.*;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.Locale;
-import java.util.Date;
-import java.util.Calendar;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 
 import junit.framework.TestCase;
 import junitx.framework.ArrayAssert;
@@ -61,6 +61,7 @@
         conf.addProperty("boolean.list6", booleans);
         conf.addProperty("boolean.string", "true");
         conf.addProperty("boolean.object", Boolean.TRUE);
+        conf.addProperty("boolean.list.interpolated", "${boolean.string},false");
 
         // lists of bytes
         conf.addProperty("byte.list1", "1");
@@ -76,6 +77,7 @@
         conf.addProperty("byte.list6", bytes);
         conf.addProperty("byte.string", "1");
         conf.addProperty("byte.object", new Byte("1"));
+        conf.addProperty("byte.list.interpolated", "${byte.string},2");
 
         // lists of shorts
         conf.addProperty("short.list1", "1");
@@ -91,6 +93,7 @@
         conf.addProperty("short.list6", shorts);
         conf.addProperty("short.string", "1");
         conf.addProperty("short.object", new Short("1"));
+        conf.addProperty("short.list.interpolated", "${short.string},2");
 
         // lists of integers
         conf.addProperty("integer.list1", "1");
@@ -106,6 +109,7 @@
         conf.addProperty("integer.list6", integers);
         conf.addProperty("integer.string", "1");
         conf.addProperty("integer.object", new Integer("1"));
+        conf.addProperty("integer.list.interpolated", "${integer.string},2");
 
         // lists of longs
         conf.addProperty("long.list1", "1");
@@ -121,6 +125,7 @@
         conf.addProperty("long.list6", longs);
         conf.addProperty("long.string", "1");
         conf.addProperty("long.object", new Long("1"));
+        conf.addProperty("long.list.interpolated", "${long.string},2");
 
         // lists of floats
         conf.addProperty("float.list1", "1");
@@ -136,6 +141,7 @@
         conf.addProperty("float.list6", floats);
         conf.addProperty("float.string", "1");
         conf.addProperty("float.object", new Float("1"));
+        conf.addProperty("float.list.interpolated", "${float.string},2");
 
         // lists of doubles
         conf.addProperty("double.list1", "1");
@@ -151,6 +157,7 @@
         conf.addProperty("double.list6", doubles);
         conf.addProperty("double.string", "1");
         conf.addProperty("double.object", new Double("1"));
+        conf.addProperty("double.list.interpolated", "${double.string},2");
 
         // lists of big integers
         conf.addProperty("biginteger.list1", "1");
@@ -165,6 +172,7 @@
         conf.addProperty("biginteger.list6", bigintegers);
         conf.addProperty("biginteger.string", "1");
         conf.addProperty("biginteger.object", new BigInteger("1"));
+        conf.addProperty("biginteger.list.interpolated", "${biginteger.string},2");
 
         // lists of big decimals
         conf.addProperty("bigdecimal.list1", "1");
@@ -179,23 +187,29 @@
         conf.addProperty("bigdecimal.list6", bigdecimals);
         conf.addProperty("bigdecimal.string", "1");
         conf.addProperty("bigdecimal.object", new BigDecimal("1"));
+        conf.addProperty("bigdecimal.list.interpolated", "${bigdecimal.string},2");
 
         // URLs
-        conf.addProperty("url.string", "http://jakarta.apache.org");
-        conf.addProperty("url.object", new URL("http://jakarta.apache.org"));
-        conf.addProperty("url.list1", "http://jakarta.apache.org");
-        conf.addProperty("url.list1", "http://www.apache.org");
-        conf.addProperty("url.list2", "http://jakarta.apache.org, http://www.apache.org");
-        conf.addProperty("url.list3", new URL("http://jakarta.apache.org"));
-        conf.addProperty("url.list3", new URL("http://www.apache.org"));
-        conf.addProperty("url.list4", new URL[] { new URL("http://jakarta.apache.org"), new URL("http://www.apache.org") });
+        String url1 = "http://jakarta.apache.org";
+        String url2 = "http://www.apache.org";
+        conf.addProperty("url.string", url1);
+        conf.addProperty("url.string.interpolated", "${url.string}");
+        conf.addProperty("url.object", new URL(url1));
+        conf.addProperty("url.list1", url1);
+        conf.addProperty("url.list1", url2);
+        conf.addProperty("url.list2", url1 + ", " + url2);
+        conf.addProperty("url.list3", new URL(url1));
+        conf.addProperty("url.list3", new URL(url2));
+        conf.addProperty("url.list4", new URL[] { new URL(url1), new URL(url2) });
         List urls = new ArrayList();
-        urls.add(new URL("http://jakarta.apache.org"));
-        urls.add(new URL("http://www.apache.org"));
+        urls.add(new URL(url1));
+        urls.add(new URL(url2));
         conf.addProperty("url.list6", urls);
+        conf.addProperty("url.list.interpolated", "${url.string}," + url2);
 
         // Locales
         conf.addProperty("locale.string", "fr");
+        conf.addProperty("locale.string.interpolated", "${locale.string}");
         conf.addProperty("locale.object", Locale.FRENCH);
         conf.addProperty("locale.list1", "fr");
         conf.addProperty("locale.list1", "de");
@@ -207,13 +221,17 @@
         locales.add(Locale.FRENCH);
         locales.add(Locale.GERMAN);
         conf.addProperty("locale.list6", locales);
+        conf.addProperty("locale.list.interpolated", "${locale.string},de");
 
         // Colors
-        conf.addProperty("color.string", "FF0000");
+        String color1 = "FF0000";
+        String color2 = "0000FF";
+        conf.addProperty("color.string", color1);
+        conf.addProperty("color.string.interpolated", "${color.string}");
         conf.addProperty("color.object", Color.red);
-        conf.addProperty("color.list1", "FF0000");
-        conf.addProperty("color.list1", "0000FF");
-        conf.addProperty("color.list2", "FF0000, 0000FF");
+        conf.addProperty("color.list1", color1);
+        conf.addProperty("color.list1", color2);
+        conf.addProperty("color.list2", color1 + ", " + color2);
         conf.addProperty("color.list3", Color.red);
         conf.addProperty("color.list3", Color.blue);
         conf.addProperty("color.list4", new Color[] { Color.red, Color.blue });
@@ -221,6 +239,7 @@
         colors.add(Color.red);
         colors.add(Color.blue);
         conf.addProperty("color.list6", colors);
+        conf.addProperty("color.list.interpolated", "${color.string}," + color2);
 
         // Dates & Calendars
         String pattern = "yyyy-MM-dd";
@@ -235,6 +254,7 @@
         calendar2.setTime(date2);
 
         conf.addProperty("date.string", "2004-01-01");
+        conf.addProperty("date.string.interpolated", "${date.string}");
         conf.addProperty("date.object", date1);
         conf.addProperty("date.list1", "2004-01-01");
         conf.addProperty("date.list1", "2004-12-31");
@@ -247,8 +267,10 @@
         dates.add(date1);
         dates.add(date2);
         conf.addProperty("date.list6", dates);
+        conf.addProperty("date.list.interpolated", "${date.string},2004-12-31");
 
         conf.addProperty("calendar.string", "2004-01-01");
+        conf.addProperty("calendar.string.interpolated", "${calendar.string}");
         conf.addProperty("calendar.object", calendar1);
         conf.addProperty("calendar.list1", "2004-01-01");
         conf.addProperty("calendar.list1", "2004-12-31");
@@ -261,6 +283,7 @@
         calendars.add(date1);
         calendars.add(date2);
         conf.addProperty("calendar.list6", calendars);
+        conf.addProperty("calendar.list.interpolated", "${calendar.string},2004-12-31");
     }
 
     public void testGetBooleanArray()
@@ -289,6 +312,9 @@
         // list of Boolean objects
         ArrayAssert.assertEquals(expected, conf.getBooleanArray("boolean.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getBooleanArray("boolean.list.interpolated"));
+
         // single boolean values
         ArrayAssert.assertEquals(new boolean[] { true }, conf.getBooleanArray("boolean.string"));
         ArrayAssert.assertEquals(new boolean[] { true }, conf.getBooleanArray("boolean.object"));
@@ -324,6 +350,9 @@
         // list of Boolean objects
         ListAssert.assertEquals(expected, conf.getBooleanList("boolean.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getBooleanList("boolean.list.interpolated"));
+
         // single boolean values
         expected = new ArrayList();
         expected.add(Boolean.TRUE);
@@ -360,6 +389,9 @@
         // list of Byte objects
         ArrayAssert.assertEquals(expected, conf.getByteArray("byte.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getByteArray("byte.list.interpolated"));
+
         // single byte values
         ArrayAssert.assertEquals(new byte[] { 1 }, conf.getByteArray("byte.string"));
         ArrayAssert.assertEquals(new byte[] { 1 }, conf.getByteArray("byte.object"));
@@ -395,6 +427,9 @@
         // list of Byte objects
         ListAssert.assertEquals(expected, conf.getByteList("byte.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getByteList("byte.list.interpolated"));
+
         // single byte values
         expected = new ArrayList();
         expected.add(new Byte("1"));
@@ -431,6 +466,9 @@
         // list of Byte objects
         ArrayAssert.assertEquals(expected, conf.getShortArray("short.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getShortArray("short.list.interpolated"));
+
         // single byte values
         ArrayAssert.assertEquals(new short[] { 1 }, conf.getShortArray("short.string"));
         ArrayAssert.assertEquals(new short[] { 1 }, conf.getShortArray("short.object"));
@@ -466,6 +504,9 @@
         // list of Short objects
         ListAssert.assertEquals(expected, conf.getShortList("short.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getShortList("short.list.interpolated"));
+
         // single short values
         expected = new ArrayList();
         expected.add(new Short("1"));
@@ -502,6 +543,9 @@
         // list of Integer objects
         ArrayAssert.assertEquals(expected, conf.getIntArray("integer.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getIntArray("integer.list.interpolated"));
+
         // single int values
         ArrayAssert.assertEquals(new int[] { 1 }, conf.getIntArray("integer.string"));
         ArrayAssert.assertEquals(new int[] { 1 }, conf.getIntArray("integer.object"));
@@ -537,6 +581,9 @@
         // list of Integer objects
         ListAssert.assertEquals(expected, conf.getIntegerList("integer.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getIntegerList("integer.list.interpolated"));
+
         // single int values
         expected = new ArrayList();
         expected.add(new Integer("1"));
@@ -573,6 +620,9 @@
         // list of Long objects
         ArrayAssert.assertEquals(expected, conf.getLongArray("long.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getLongArray("long.list.interpolated"));
+
         // single long values
         ArrayAssert.assertEquals(new long[] { 1 }, conf.getLongArray("long.string"));
         ArrayAssert.assertEquals(new long[] { 1 }, conf.getLongArray("long.object"));
@@ -608,6 +658,9 @@
         // list of Long objects
         ListAssert.assertEquals(expected, conf.getLongList("long.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getLongList("long.list.interpolated"));
+
         // single long values
         expected = new ArrayList();
         expected.add(new Long("1"));
@@ -644,6 +697,9 @@
         // list of Float objects
         ArrayAssert.assertEquals(expected, conf.getFloatArray("float.list6"), 0);
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getFloatArray("float.list.interpolated"), 0);
+
         // single float values
         ArrayAssert.assertEquals(new float[] { 1 }, conf.getFloatArray("float.string"), 0);
         ArrayAssert.assertEquals(new float[] { 1 }, conf.getFloatArray("float.object"), 0);
@@ -679,6 +735,9 @@
         // list of Float objects
         ListAssert.assertEquals(expected, conf.getFloatList("float.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getFloatList("float.list.interpolated"));
+
         // single float values
         expected = new ArrayList();
         expected.add(new Float("1"));
@@ -715,6 +774,9 @@
         // list of Double objects
         ArrayAssert.assertEquals(expected, conf.getDoubleArray("double.list6"), 0);
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getDoubleArray("double.list.interpolated"), 0);
+
         // single double values
         ArrayAssert.assertEquals(new double[] { 1 }, conf.getDoubleArray("double.string"), 0);
         ArrayAssert.assertEquals(new double[] { 1 }, conf.getDoubleArray("double.object"), 0);
@@ -750,6 +812,9 @@
         // list of Double objects
         ListAssert.assertEquals(expected, conf.getDoubleList("double.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getDoubleList("double.list.interpolated"));
+
         // single double values
         expected = new ArrayList();
         expected.add(new Double("1"));
@@ -783,6 +848,9 @@
         // list of BigInteger objects
         ArrayAssert.assertEquals(expected, conf.getBigIntegerArray("biginteger.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getBigIntegerArray("biginteger.list.interpolated"));
+
         // single BigInteger values
         ArrayAssert.assertEquals(new BigInteger[] { new BigInteger("1") }, conf.getBigIntegerArray("biginteger.string"));
         ArrayAssert.assertEquals(new BigInteger[] { new BigInteger("1") }, conf.getBigIntegerArray("biginteger.object"));
@@ -815,6 +883,9 @@
         // list of BigInteger objects
         ListAssert.assertEquals(expected, conf.getBigIntegerList("biginteger.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getBigIntegerList("biginteger.list.interpolated"));
+
         // single BigInteger values
         expected = new ArrayList();
         expected.add(new BigInteger("1"));
@@ -848,6 +919,9 @@
         // list of BigDecimal objects
         ArrayAssert.assertEquals(expected, conf.getBigDecimalArray("bigdecimal.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getBigDecimalArray("bigdecimal.list.interpolated"));
+
         // single BigDecimal values
         ArrayAssert.assertEquals(new BigDecimal[] { new BigDecimal("1") }, conf.getBigDecimalArray("bigdecimal.string"));
         ArrayAssert.assertEquals(new BigDecimal[] { new BigDecimal("1") }, conf.getBigDecimalArray("bigdecimal.object"));
@@ -880,6 +954,9 @@
         // list of BigDecimal objects
         ListAssert.assertEquals(expected, conf.getBigDecimalList("bigdecimal.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getBigDecimalList("bigdecimal.list.interpolated"));
+
         // single BigDecimal values
         expected = new ArrayList();
         expected.add(new BigDecimal("1"));
@@ -903,6 +980,9 @@
 
         // URL object
         assertEquals(expected, conf.getURL("url.object"));
+
+        // interpolated value
+        assertEquals(expected, conf.getURL("url.string.interpolated"));
     }
 
     public void testGetURLArray() throws Exception
@@ -928,6 +1008,9 @@
         // list of URL objects
         ArrayAssert.assertEquals(expected, conf.getURLArray("url.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getURLArray("url.list.interpolated"));
+
         // single URL values
         ArrayAssert.assertEquals(new URL[] { new URL("http://jakarta.apache.org") }, conf.getURLArray("url.string"));
         ArrayAssert.assertEquals(new URL[] { new URL("http://jakarta.apache.org") }, conf.getURLArray("url.object"));
@@ -960,6 +1043,9 @@
         // list of URL objects
         ListAssert.assertEquals(expected, conf.getURLList("url.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getURLList("url.list.interpolated"));
+
         // single URL values
         expected = new ArrayList();
         expected.add(new URL("http://www.apache.org"));
@@ -1000,6 +1086,9 @@
         conf.setProperty("locale", "fr");
         assertEquals("Existing key with default value", Locale.FRENCH, conf.getLocale("locale", Locale.GERMAN));
         assertEquals("Missing key with default value", Locale.GERMAN, conf.getLocale("localeNotInConfig", Locale.GERMAN));
+
+        // interpolated value
+        assertEquals(Locale.FRENCH, conf.getLocale("locale.string.interpolated"));
     }
 
     public void testGetLocaleArray() throws Exception
@@ -1025,6 +1114,9 @@
         // list of Locale objects
         ArrayAssert.assertEquals(expected, conf.getLocaleArray("locale.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getLocaleArray("locale.list.interpolated"));
+
         // single Locale values
         ArrayAssert.assertEquals(new Locale[] { Locale.FRENCH }, conf.getLocaleArray("locale.string"));
         ArrayAssert.assertEquals(new Locale[] { Locale.FRENCH }, conf.getLocaleArray("locale.object"));
@@ -1057,6 +1149,9 @@
         // list of Locale objects
         ListAssert.assertEquals(expected, conf.getLocaleList("locale.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getLocaleList("locale.list.interpolated"));
+
         // single Locale values
         expected = new ArrayList();
         expected.add(Locale.FRENCH);
@@ -1085,6 +1180,9 @@
         assertEquals("green", 3, color.getGreen());
         assertEquals("blue",  5, color.getBlue());
         assertEquals("alpha", 7, color.getAlpha());
+
+        // interpolated value
+        assertEquals(Color.red, conf.getColor("color.string.interpolated"));
     }
 
     public void testGetColorArray() throws Exception
@@ -1110,6 +1208,9 @@
         // list of Color objects
         ArrayAssert.assertEquals(expected, conf.getColorArray("color.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getColorArray("color.list.interpolated"));
+
         // single Color values
         ArrayAssert.assertEquals(new Color[] { Color.red }, conf.getColorArray("color.string"));
         ArrayAssert.assertEquals(new Color[] { Color.red }, conf.getColorArray("color.object"));
@@ -1142,6 +1243,9 @@
         // list of Color objects
         ListAssert.assertEquals(expected, conf.getColorList("color.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getColorList("color.list.interpolated"));
+
         // single Color values
         expected = new ArrayList();
         expected.add(Color.red);
@@ -1170,6 +1274,9 @@
 
         // Calendar object
         assertEquals(expected, conf.getDate("calendar.object"));
+
+        // interpolated value
+        assertEquals(expected, conf.getDate("date.string.interpolated"));
     }
 
     public void testGetDateArray() throws Exception
@@ -1202,6 +1309,9 @@
         // list of Date objects
         ArrayAssert.assertEquals(expected, conf.getDateArray("date.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getDateArray("date.list.interpolated"));
+
         // single Date values
         ArrayAssert.assertEquals(new Date[] { date1 }, conf.getDateArray("date.string"));
         ArrayAssert.assertEquals(new Date[] { date1 }, conf.getDateArray("date.object"));
@@ -1241,6 +1351,9 @@
         // list of Date objects
         ListAssert.assertEquals(expected, conf.getDateList("date.list6"));
 
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getDateList("date.list.interpolated"));
+
         // single Date values
         expected = new ArrayList();
         expected.add(date1);
@@ -1271,6 +1384,9 @@
 
         // Date object
         assertEquals(expected, conf.getCalendar("date.object"));
+
+        // interpolated value
+        assertEquals(expected, conf.getCalendar("calendar.string.interpolated"));
     }
 
 
@@ -1308,6 +1424,9 @@
         // list of Calendar objects
         ArrayAssert.assertEquals(expected, conf.getCalendarArray("calendar.list6"));
 
+        // list of interpolated values
+        ArrayAssert.assertEquals(expected, conf.getCalendarArray("calendar.list.interpolated"));
+
         // single Calendar values
         ArrayAssert.assertEquals(new Calendar[] { calendar1 }, conf.getCalendarArray("calendar.string"));
         ArrayAssert.assertEquals(new Calendar[] { calendar1 }, conf.getCalendarArray("calendar.object"));
@@ -1350,6 +1469,9 @@
 
         // list of Calendar objects
         ListAssert.assertEquals(expected, conf.getCalendarList("calendar.list6"));
+
+        // list of interpolated values
+        ListAssert.assertEquals(expected, conf.getCalendarList("calendar.list.interpolated"));
 
         // single Calendar values
         expected = new ArrayList();

Modified: jakarta/commons/proper/configuration/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/xdocs/changes.xml?rev=291931&r1=291930&r2=291931&view=diff
==============================================================================
--- jakarta/commons/proper/configuration/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Tue Sep 27 06:06:23 2005
@@ -23,13 +23,14 @@
   <body>
 
     <release version="1.2-dev" date="in SVN">
-      <action dev="ebourg" type="update" issue="36784  ">
+      <action dev="ebourg" type="update" issue="36784">
         ConfigurationConverter.getProperties() now uses the delimiter of the
         specified configuration to convert the list properties into strings.
       </action>
-      <action dev="ebourg" type="update" issue="36784  ">
-        getList() now returns a list of interpolated values. As a side effect
-        the Properties returned by ConfigurationConverter.getProperties()
+      <action dev="ebourg" type="update" issue="36784">
+        The interpolation of variables (${foo}) is now performed in all property
+        getters of AbstractConfiguration and DataConfiguration. As a side effect
+        the Properties object returned by ConfigurationConverter.getProperties()
         contains only interpolated values.
       </action>
       <action dev="ebourg" type="update" issue="36699">



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org