Author: oheger
Date: Tue Mar 6 13:15:00 2007
New Revision: 515306
URL: http://svn.apache.org/viewvc?view=rev&rev=515306
Log:
CONFIGURATION-256: MapConfiguration and the web-based configurations now treat
escaped list delimiters correctly
Modified:
jakarta/commons/proper/configuration/trunk/RELEASE-NOTES.txt
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/MapConfiguration.java
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/AppletConfiguration.java
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletConfiguration.java
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletContextConfiguration.java
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletFilterConfiguration.java
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletRequestConfiguration.java
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestAbstractConfiguration.java
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestMapConfiguration.java
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestAppletConfiguration.java
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletConfiguration.java
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletContextConfiguration.java
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletFilterConfiguration.java
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletRequestConfiguration.java
jakarta/commons/proper/configuration/trunk/xdocs/changes.xml
Modified: jakarta/commons/proper/configuration/trunk/RELEASE-NOTES.txt
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/RELEASE-NOTES.txt?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
--- jakarta/commons/proper/configuration/trunk/RELEASE-NOTES.txt (original)
+++ jakarta/commons/proper/configuration/trunk/RELEASE-NOTES.txt Tue Mar 6
13:15:00 2007
@@ -94,6 +94,11 @@
DatabaseConfiguration now handles list delimiters in property values
correctly.
+* [CONFIGURATION-256]
+ MapConfiguration and the web-based configurations now treat strings that
+ contain an escaped list delimiter correctly: The escape character will be
+ removed, so that for instance "foo\,bar" becomes "foo,bar".
+
IMPROVEMENTS IN 1.4
===================
* [CONFIGURATION-155]
Modified:
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/MapConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/MapConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/MapConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/MapConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -62,7 +62,7 @@
if ((value instanceof String) && (!isDelimiterParsingDisabled()))
{
List list = PropertyConverter.split((String) value,
getListDelimiter());
- return list.size() > 1 ? list : value;
+ return list.size() > 1 ? list : list.get(0);
}
else
{
Modified:
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/AppletConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/AppletConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/AppletConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/AppletConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -19,10 +19,8 @@
import java.applet.Applet;
import java.util.Iterator;
-import java.util.List;
import org.apache.commons.collections.iterators.ArrayIterator;
-import org.apache.commons.configuration.PropertyConverter;
/**
* A configuration wrapper to read applet parameters. This configuration is
@@ -51,14 +49,7 @@
public Object getProperty(String key)
{
- Object value = applet.getParameter(key);
- if (!isDelimiterParsingDisabled())
- {
- List list = PropertyConverter.split((String) value,
getListDelimiter());
- value = list.size() > 1 ? list : value;
- }
-
- return value;
+ return handleDelimiters(applet.getParameter(key));
}
public Iterator getKeys()
Modified:
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/BaseWebConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/BaseWebConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -16,7 +16,10 @@
*/
package org.apache.commons.configuration.web;
+import java.util.List;
+
import org.apache.commons.configuration.AbstractConfiguration;
+import org.apache.commons.configuration.PropertyConverter;
/**
* <p>
@@ -82,5 +85,25 @@
protected void addPropertyDirect(String key, Object obj)
{
throw new UnsupportedOperationException("Read only configuration");
+ }
+
+ /**
+ * Takes care of list delimiters in property values. This method checks if
+ * delimiter parsing is enabled and the passed in value contains a
delimiter
+ * character. If this is the case, a split operation is performed.
+ *
+ * @param value the property value to be examined
+ * @return the processed value
+ */
+ protected Object handleDelimiters(Object value)
+ {
+ if (!isDelimiterParsingDisabled() && value instanceof String)
+ {
+ List list = PropertyConverter.split((String) value,
+ getListDelimiter());
+ value = list.size() > 1 ? list : list.get(0);
+ }
+
+ return value;
}
}
Modified:
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -18,12 +18,10 @@
package org.apache.commons.configuration.web;
import java.util.Iterator;
-import java.util.List;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import org.apache.commons.collections.iterators.EnumerationIterator;
-import org.apache.commons.configuration.PropertyConverter;
/**
* A configuration wrapper around a [EMAIL PROTECTED] ServletConfig}. This
configuration
@@ -62,14 +60,7 @@
public Object getProperty(String key)
{
- Object value = config.getInitParameter(key);
- if (!isDelimiterParsingDisabled())
- {
- List list = PropertyConverter.split((String) value,
getListDelimiter());
- value = list.size() > 1 ? list : value;
- }
-
- return value;
+ return handleDelimiters(config.getInitParameter(key));
}
public Iterator getKeys()
Modified:
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletContextConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletContextConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletContextConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletContextConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -18,12 +18,10 @@
package org.apache.commons.configuration.web;
import java.util.Iterator;
-import java.util.List;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import org.apache.commons.collections.iterators.EnumerationIterator;
-import org.apache.commons.configuration.PropertyConverter;
/**
* A configuration wrapper to read the initialization parameters of a servlet
@@ -63,14 +61,7 @@
public Object getProperty(String key)
{
- Object value = context.getInitParameter(key);
- if (!isDelimiterParsingDisabled())
- {
- List list = PropertyConverter.split((String) value,
getListDelimiter());
- value = list.size() > 1 ? list : value;
- }
-
- return value;
+ return handleDelimiters(context.getInitParameter(key));
}
public Iterator getKeys()
Modified:
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletFilterConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletFilterConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletFilterConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletFilterConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -18,11 +18,9 @@
package org.apache.commons.configuration.web;
import java.util.Iterator;
-import java.util.List;
import javax.servlet.FilterConfig;
import org.apache.commons.collections.iterators.EnumerationIterator;
-import org.apache.commons.configuration.PropertyConverter;
/**
* A configuration wrapper around a [EMAIL PROTECTED] FilterConfig}. This
configuration is
@@ -50,14 +48,7 @@
public Object getProperty(String key)
{
- Object value = config.getInitParameter(key);
- if (!isDelimiterParsingDisabled())
- {
- List list = PropertyConverter.split((String) value,
getListDelimiter());
- value = list.size() > 1 ? list : value;
- }
-
- return value;
+ return handleDelimiters(config.getInitParameter(key));
}
public Iterator getKeys()
Modified:
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletRequestConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletRequestConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletRequestConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/web/ServletRequestConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -17,8 +17,11 @@
package org.apache.commons.configuration.web;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
-import java.util.Arrays;
+import java.util.List;
+
import javax.servlet.ServletRequest;
import org.apache.commons.collections.iterators.EnumerationIterator;
@@ -57,11 +60,25 @@
}
else if (values.length == 1)
{
- return values[0];
+ return handleDelimiters(values[0]);
}
else
{
- return Arrays.asList(values);
+ // ensure that escape characters in all list elements are removed
+ List result = new ArrayList(values.length);
+ for (int i = 0; i < values.length; i++)
+ {
+ Object val = handleDelimiters(values[i]);
+ if (val instanceof Collection)
+ {
+ result.addAll((Collection) val);
+ }
+ else
+ {
+ result.add(val);
+ }
+ }
+ return result;
}
}
Modified:
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestAbstractConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestAbstractConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestAbstractConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestAbstractConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -36,11 +36,12 @@
public abstract class TestAbstractConfiguration extends TestCase
{
/**
- * Return an abstract configuration with 2 key/value pairs:<br>
+ * Return an abstract configuration with the following data:<br>
* <pre>
* key1 = value1
* key2 = value2
* list = value1, value2
+ * listesc = value1\\,value2
* </pre>
*/
protected abstract AbstractConfiguration getConfiguration();
@@ -69,6 +70,16 @@
assertTrue("'value2' is not in the list", list.contains("value2"));
}
+ /**
+ * Tests whether the escape character for list delimiters is recocknized
and
+ * removed.
+ */
+ public void testListEscaped()
+ {
+ assertEquals("Wrong value for escaped list", "value1,value2",
+ getConfiguration().getString("listesc"));
+ }
+
public void testAddPropertyDirect()
{
AbstractConfiguration config = getConfiguration();
@@ -118,6 +129,7 @@
expectedKeys.add("key1");
expectedKeys.add("key2");
expectedKeys.add("list");
+ expectedKeys.add("listesc");
assertNotNull("null iterator", keys);
assertTrue("empty iterator", keys.hasNext());
Modified:
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestMapConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestMapConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestMapConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestMapConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -37,6 +37,7 @@
map.put("key1", "value1");
map.put("key2", "value2");
map.put("list", "value1, value2");
+ map.put("listesc", "value1\\,value2");
return new MapConfiguration(map);
}
Modified:
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestAppletConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestAppletConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestAppletConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestAppletConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -64,6 +64,7 @@
parameters.setProperty("key1", "value1");
parameters.setProperty("key2", "value2");
parameters.setProperty("list", "value1, value2");
+ parameters.setProperty("listesc", "value1\\,value2");
if (supportsApplet)
{
@@ -80,7 +81,8 @@
{
{ "key1", "String", "" },
{ "key2", "String", "" },
- { "list", "String[]", "" } };
+ { "list", "String[]", "" },
+ { "listesc", "String", "" } };
}
};
Modified:
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -39,6 +39,7 @@
config.setInitParameter("key1", "value1");
config.setInitParameter("key2", "value2");
config.setInitParameter("list", "value1, value2");
+ config.setInitParameter("listesc", "value1\\,value2");
Servlet servlet = new HttpServlet() {
public ServletConfig getServletConfig()
Modified:
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletContextConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletContextConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletContextConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletContextConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -43,6 +43,7 @@
parameters.setProperty("key1", "value1");
parameters.setProperty("key2", "value2");
parameters.setProperty("list", "value1, value2");
+ parameters.setProperty("listesc", "value1\\,value2");
// create a servlet context
ServletContext context = new MockServletContext()
Modified:
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletFilterConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletFilterConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletFilterConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletFilterConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -39,6 +39,7 @@
config.setInitParameter("key1", "value1");
config.setInitParameter("key2", "value2");
config.setInitParameter("list", "value1, value2");
+ config.setInitParameter("listesc", "value1\\,value2");
return new ServletFilterConfiguration(config);
}
Modified:
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletRequestConfiguration.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletRequestConfiguration.java?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
---
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletRequestConfiguration.java
(original)
+++
jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/web/TestServletRequestConfiguration.java
Tue Mar 6 13:15:00 2007
@@ -18,6 +18,8 @@
package org.apache.commons.configuration.web;
import java.util.Enumeration;
+import java.util.List;
+
import javax.servlet.ServletRequest;
import com.mockobjects.servlet.MockHttpServletRequest;
@@ -26,6 +28,7 @@
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.TestAbstractConfiguration;
+import org.apache.commons.lang.StringUtils;
/**
* Test case for the [EMAIL PROTECTED] ServletRequestConfiguration} class.
@@ -38,16 +41,25 @@
protected AbstractConfiguration getConfiguration()
{
final Configuration configuration = new BaseConfiguration();
+ ((BaseConfiguration) configuration).setListDelimiter('\0');
configuration.setProperty("key1", "value1");
configuration.setProperty("key2", "value2");
configuration.addProperty("list", "value1");
configuration.addProperty("list", "value2");
+ configuration.addProperty("listesc", "value1\\,value2");
+
+ return createConfiguration(configuration);
+ }
+
+ protected AbstractConfiguration getEmptyConfiguration()
+ {
+ final Configuration configuration = new BaseConfiguration();
ServletRequest request = new MockHttpServletRequest()
{
- public String[] getParameterValues(String key)
+ public String getParameter(String key)
{
- return configuration.getStringArray(key);
+ return null;
}
public Enumeration getParameterNames()
@@ -59,20 +71,26 @@
return new ServletRequestConfiguration(request);
}
- protected AbstractConfiguration getEmptyConfiguration()
+ /**
+ * Returns a new servlet request configuration that is backed by the passed
+ * in configuration.
+ *
+ * @param base the configuration with the underlying values
+ * @return the servlet request configuration
+ */
+ private ServletRequestConfiguration createConfiguration(
+ final Configuration base)
{
- final Configuration configuration = new BaseConfiguration();
-
ServletRequest request = new MockHttpServletRequest()
{
- public String getParameter(String key)
+ public String[] getParameterValues(String key)
{
- return null;
+ return base.getStringArray(key);
}
public Enumeration getParameterNames()
{
- return new IteratorEnumeration(configuration.getKeys());
+ return new IteratorEnumeration(base.getKeys());
}
};
@@ -105,4 +123,27 @@
}
}
+ /**
+ * Tests a list with elements that contain an escaped list delimiter.
+ */
+ public void testListWithEscapedElements()
+ {
+ String[] values =
+ { "test1", "test2\\,test3", "test4\\,test5" };
+ final String listKey = "test.list";
+ BaseConfiguration config = new BaseConfiguration();
+ config.setListDelimiter('\0');
+ config.addProperty(listKey, values);
+ assertEquals("Wrong number of list elements", values.length, config
+ .getList(listKey).size());
+ Configuration c = createConfiguration(config);
+ List v = c.getList(listKey);
+ assertEquals("Wrong number of elements in list", values.length, v
+ .size());
+ for (int i = 0; i < values.length; i++)
+ {
+ assertEquals("Wrong value at index " + i, StringUtils.replace(
+ values[i], "\\", StringUtils.EMPTY), v.get(i));
+ }
+ }
}
Modified: jakarta/commons/proper/configuration/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/xdocs/changes.xml?view=diff&rev=515306&r1=515305&r2=515306
==============================================================================
--- jakarta/commons/proper/configuration/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Tue Mar 6
13:15:00 2007
@@ -23,6 +23,11 @@
<body>
<release version="1.4-SNAPSHOT" date="in SVN">
+ <action dev="oheger" type="update" issue="CONFIGURATION-256">
+ MapConfiguration and the web-based configurations now treat strings
+ that contain an escaped list delimiter correctly: The escape character
+ will be removed, so that for instance "foo\,bar" becomes "foo,bar".
+ </action>
<action dev="oheger" type="update" issue="CONFIGURATION-255">
DatabaseConfiguration now handles list delimiters in property values
correctly.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]