You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2011/02/09 22:05:00 UTC
svn commit: r1069097 - in /commons/proper/configuration/trunk/src:
changes/changes.xml
java/org/apache/commons/configuration/HierarchicalINIConfiguration.java
test/org/apache/commons/configuration/TestHierarchicalINIConfiguration.java
Author: oheger
Date: Wed Feb 9 21:05:00 2011
New Revision: 1069097
URL: http://svn.apache.org/viewvc?rev=1069097&view=rev
Log:
[CONFIGURATION-434] Allow comment characters to be part of property values. To be recognized as a comment character, the character must be preceded by whitespace.
Modified:
commons/proper/configuration/trunk/src/changes/changes.xml
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/HierarchicalINIConfiguration.java
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestHierarchicalINIConfiguration.java
Modified: commons/proper/configuration/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/changes/changes.xml?rev=1069097&r1=1069096&r2=1069097&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/changes/changes.xml (original)
+++ commons/proper/configuration/trunk/src/changes/changes.xml Wed Feb 9 21:05:00 2011
@@ -23,6 +23,13 @@
<body>
<release version="1.7" date="in SVN" description="">
+ <action dev="oheger" type="fix" issue="CONFIGURATION-434">
+ HierarchicalINIConfiguration now recognizes comment characters in
+ property definitions only if they are preceded by whitespace. Thus
+ comment characters can now be part of the property value. This is for
+ instance required for the definition of file paths which use the
+ semicolon as path separator.
+ </action>
<action dev="oheger" type="fix" issue="CONFIGURATION-433">
Minor improvements of the support for indexed properties in
ConfigurationDynaBean.
Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/HierarchicalINIConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/HierarchicalINIConfiguration.java?rev=1069097&r1=1069096&r2=1069097&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/HierarchicalINIConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/HierarchicalINIConfiguration.java Wed Feb 9 21:05:00 2011
@@ -398,6 +398,12 @@ public class HierarchicalINIConfiguratio
* <pre>
* 'value' ; comment -> value
* </pre>
+ * Note that a comment character is only recognized if there is at least one
+ * whitespace character before it. So it can appear in the property value,
+ * e.g.:
+ * <pre>
+ * C:\\Windows;C:\\Windows\\system32
+ * </pre>
*
* @param val the value to be parsed
* @param reader the reader (needed if multiple lines have to be read)
@@ -420,6 +426,7 @@ public class HierarchicalINIConfiguratio
int i = quoted ? 1 : 0;
StringBuffer result = new StringBuffer();
+ char lastChar = 0;
while (i < value.length() && !stop)
{
char c = value.charAt(i);
@@ -452,17 +459,18 @@ public class HierarchicalINIConfiguratio
}
else
{
- if (!isCommentChar(c))
+ if (isCommentChar(c) && Character.isWhitespace(lastChar))
{
- result.append(c);
+ stop = true;
}
else
{
- stop = true;
+ result.append(c);
}
}
i++;
+ lastChar = c;
}
String v = result.toString();
Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestHierarchicalINIConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestHierarchicalINIConfiguration.java?rev=1069097&r1=1069096&r2=1069097&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestHierarchicalINIConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestHierarchicalINIConfiguration.java Wed Feb 9 21:05:00 2011
@@ -684,6 +684,26 @@ public class TestHierarchicalINIConfigur
}
/**
+ * Tests whether a value which contains a semicolon can be loaded
+ * successfully. This test is related to CONFIGURATION-434.
+ */
+ public void testValueWithSemicolon() throws ConfigurationException
+ {
+ final String path =
+ "C:\\Program Files\\jar\\manage.jar;"
+ + "C:\\Program Files\\jar\\guiLauncher.jar";
+ final String content =
+ "[Environment]" + LINE_SEPARATOR + "Application Type=any"
+ + LINE_SEPARATOR + "Class Path=" + path + " ;comment"
+ + LINE_SEPARATOR + "Path=" + path
+ + "\t; another comment";
+ HierarchicalINIConfiguration config = setUpConfig(content);
+ assertEquals("Wrong class path", path,
+ config.getString("Environment.Class Path"));
+ assertEquals("Wrong path", path, config.getString("Environment.Path"));
+ }
+
+ /**
* A thread class for testing concurrent access to the global section.
*/
private static class GlobalSectionTestThread extends Thread