You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2013/10/22 00:35:52 UTC
svn commit: r1534402 - in
/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE: ./
src/changes/ src/main/java/org/apache/commons/configuration/
src/test/java/org/apache/commons/configuration/ src/test/resources/
Author: henning
Date: Mon Oct 21 22:35:52 2013
New Revision: 1534402
URL: http://svn.apache.org/r1534402
Log:
Backport CONFIGURATION-525 from r1457277.
Modified:
commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/RELEASE-NOTES.txt
commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/changes/changes.xml
commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfiguration.java
commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfigurationLayout.java
commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfiguration.java
commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfigurationLayout.java
commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/resources/test.properties
Modified: commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/RELEASE-NOTES.txt?rev=1534402&r1=1534401&r2=1534402&view=diff
==============================================================================
--- commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/RELEASE-NOTES.txt (original)
+++ commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/RELEASE-NOTES.txt Mon Oct 21 22:35:52 2013
@@ -74,17 +74,23 @@ BUG FIXES IN 1.10
IMPROVEMENTS AND NEW FEATURES IN 1.10
=====================================
-* [CONFIGURATION-534] PropertyConfiguration's handling of includes depends on the
- existence of a base path
+* [CONFIGURATION-525] PropertiesConfigurationLayout does not preserve comments at bottom of a file
- The includesAllowed property of PropertyConfiguration is now independent
- from the existence of a base path.
+ PropertiesConfiguration now keeps a comment at the bottom of a
+ properties file. A new footer property was added for reading and
+ writing this footer comment.
* [CONFIGURATION-526] Support loading from and saving to DOM nodes
XMLPropertiesConfiguration now supports loading from and saving to DOM
nodes.
+* [CONFIGURATION-534] PropertyConfiguration's handling of includes depends on the
+ existence of a base path
+
+ The includesAllowed property of PropertyConfiguration is now independent
+ from the existence of a base path.
+
* [CONFIGURATION-550] Missing conversion to char
Conversion to Character is now supported.
Modified: commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/changes/changes.xml?rev=1534402&r1=1534401&r2=1534402&view=diff
==============================================================================
--- commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/changes/changes.xml (original)
+++ commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/changes/changes.xml Mon Oct 21 22:35:52 2013
@@ -31,6 +31,11 @@
XMLConfiguration now adds attributes of elements defining a list to
all list nodes.
</action>
+ <action dev="oheger" type="add" issue="CONFIGURATION-525">
+ PropertiesConfiguration now keeps a comment at the bottom of a
+ properties file. A new footer property was added for reading and
+ writing this footer comment.
+ </action>
<action dev="oheger" type="update" issue="CONFIGURATION-526" due-to="Oliver Kopp">
XMLPropertiesConfiguration now supports loading from and saving to DOM
nodes.
Modified: commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfiguration.java?rev=1534402&r1=1534401&r2=1534402&view=diff
==============================================================================
--- commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfiguration.java (original)
+++ commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfiguration.java Mon Oct 21 22:35:52 2013
@@ -366,6 +366,30 @@ public class PropertiesConfiguration ext
}
/**
+ * Returns the footer comment. This is a comment at the very end of the
+ * file.
+ *
+ * @return the footer comment
+ * @since 1.10
+ */
+ public String getFooter()
+ {
+ return getLayout().getFooterComment();
+ }
+
+ /**
+ * Sets the footer comment. If set, this comment is written after all
+ * properties at the end of the file.
+ *
+ * @param footer the footer comment
+ * @since 1.10
+ */
+ public void setFooter(String footer)
+ {
+ getLayout().setFooterComment(footer);
+ }
+
+ /**
* Returns the encoding to be used when loading or storing configuration
* data. This implementation ensures that the default encoding will be used
* if none has been set explicitly.
Modified: commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfigurationLayout.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfigurationLayout.java?rev=1534402&r1=1534401&r2=1534402&view=diff
==============================================================================
--- commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfigurationLayout.java (original)
+++ commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/main/java/org/apache/commons/configuration/PropertiesConfigurationLayout.java Mon Oct 21 22:35:52 2013
@@ -131,6 +131,9 @@ public class PropertiesConfigurationLayo
/** Stores the header comment. */
private String headerComment;
+ /** Stores the footer comment. */
+ private String footerComment;
+
/** The global separator that will be used for all properties. */
private String globalSeparator;
@@ -206,15 +209,7 @@ public class PropertiesConfigurationLayo
*/
public String getCanonicalComment(String key, boolean commentChar)
{
- String comment = getComment(key);
- if (comment == null)
- {
- return null;
- }
- else
- {
- return trimComment(comment, commentChar);
- }
+ return constructCanonicalComment(getComment(key), commentChar);
}
/**
@@ -283,8 +278,7 @@ public class PropertiesConfigurationLayo
*/
public String getCanonicalHeaderComment(boolean commentChar)
{
- return (getHeaderComment() == null) ? null : trimComment(
- getHeaderComment(), commentChar);
+ return constructCanonicalComment(getHeaderComment(), commentChar);
}
/**
@@ -312,6 +306,47 @@ public class PropertiesConfigurationLayo
}
/**
+ * Returns the footer comment of the represented properties file in a
+ * canonical form. This method works like
+ * {@code getCanonicalHeaderComment()}, but reads the footer comment.
+ *
+ * @param commentChar determines the presence of comment characters
+ * @return the footer comment (can be <b>null</b>)
+ * @see #getCanonicalHeaderComment(boolean)
+ * @since 1.10
+ */
+ public String getCanonicalFooterCooment(boolean commentChar)
+ {
+ return constructCanonicalComment(getFooterComment(), commentChar);
+ }
+
+ /**
+ * Returns the footer comment of the represented properties file. This
+ * method returns the footer comment exactly as it was set using
+ * {@code setFooterComment()} or extracted from the loaded properties
+ * file.
+ *
+ * @return the footer comment (can be <b>null</b>)
+ * @since 1.10
+ */
+ public String getFooterComment()
+ {
+ return footerComment;
+ }
+
+ /**
+ * Sets the footer comment for the represented properties file. This comment
+ * will be output at the bottom of the file.
+ *
+ * @param footerComment the footer comment
+ * @since 1.10
+ */
+ public void setFooterComment(String footerComment)
+ {
+ this.footerComment = footerComment;
+ }
+
+ /**
* Returns a flag whether the specified property is defined on a single
* line. This is meaningful only if this property has multiple values.
*
@@ -512,6 +547,9 @@ public class PropertiesConfigurationLayo
}
}
}
+
+ setFooterComment(extractComment(reader.getCommentLines(), 0, reader
+ .getCommentLines().size() - 1));
}
catch (IOException ioex)
{
@@ -575,6 +613,8 @@ public class PropertiesConfigurationLayo
key), singleLine);
}
}
+
+ writeComment(writer, getCanonicalFooterCooment(true));
writer.flush();
}
catch (IOException ioex)
@@ -821,6 +861,9 @@ public class PropertiesConfigurationLayo
PropertyLayoutData data = c.layoutData.get(key);
layoutData.put(key, data.clone());
}
+
+ setHeaderComment(c.getHeaderComment());
+ setFooterComment(c.getFooterComment());
}
/**
@@ -843,6 +886,21 @@ public class PropertiesConfigurationLayo
}
/**
+ * Helper method for generating a comment string. Depending on the boolean
+ * argument the resulting string either has no comment characters or a
+ * leading comment character at each line.
+ *
+ * @param comment the comment string to be processed
+ * @param commentChar determines the presence of comment characters
+ * @return the canonical comment string (can be <b>null</b>)
+ */
+ private static String constructCanonicalComment(String comment,
+ boolean commentChar)
+ {
+ return (comment == null) ? null : trimComment(comment, commentChar);
+ }
+
+ /**
* A helper class for storing all layout related information for a
* configuration property.
*/
Modified: commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfiguration.java?rev=1534402&r1=1534401&r2=1534402&view=diff
==============================================================================
--- commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfiguration.java (original)
+++ commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfiguration.java Mon Oct 21 22:35:52 2013
@@ -1116,6 +1116,36 @@ public class TestPropertiesConfiguration
}
/**
+ * Tests whether a footer comment is correctly read.
+ */
+ @Test
+ public void testReadFooterComment()
+ {
+ assertEquals("Wrong footer comment", "\n# This is a foot comment\n",
+ conf.getFooter());
+ assertEquals("Wrong footer comment from layout",
+ "\nThis is a foot comment\n", conf.getLayout()
+ .getCanonicalFooterCooment(false));
+ }
+
+ /**
+ * Tests whether a footer comment is correctly written out.
+ */
+ @Test
+ public void testWriteFooterComment() throws ConfigurationException,
+ IOException
+ {
+ final String footer = "my footer";
+ conf.clear();
+ conf.setProperty(PROP_NAME, PROP_VALUE);
+ conf.setFooter(footer);
+ StringWriter out = new StringWriter();
+ conf.save(out);
+ assertEquals("Wrong result", PROP_NAME + " = " + PROP_VALUE + CR + "# "
+ + footer + CR, out.toString());
+ }
+
+ /**
* Helper method for testing the content of a list with elements that
* contain backslashes.
*
Modified: commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfigurationLayout.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfigurationLayout.java?rev=1534402&r1=1534401&r2=1534402&view=diff
==============================================================================
--- commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfigurationLayout.java (original)
+++ commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/java/org/apache/commons/configuration/TestPropertiesConfigurationLayout.java Mon Oct 21 22:35:52 2013
@@ -601,11 +601,14 @@ public class TestPropertiesConfiguration
config, layout);
assertEquals("Wrong number of keys", layout.getKeys().size(), l2
.getKeys().size());
- for (Iterator<String> it = layout.getKeys().iterator(); it.hasNext();)
+ for (String key : layout.getKeys())
{
- Object key = it.next();
assertTrue("Key was not found: " + key, l2.getKeys().contains(key));
}
+ assertEquals("Wrong header comment", layout.getHeaderComment(),
+ l2.getHeaderComment());
+ assertEquals("Wrong footer comment", layout.getFooterComment(),
+ l2.getFooterComment());
}
/**
@@ -699,6 +702,7 @@ public class TestPropertiesConfiguration
builder.addComment(TEST_COMMENT);
builder.addProperty(TEST_KEY, TEST_VALUE);
builder.addProperty("anotherProp", "anotherValue");
+ builder.addComment("A footer comment");
try
{
layout.load(builder.getReader());
Modified: commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/resources/test.properties
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/resources/test.properties?rev=1534402&r1=1534401&r2=1534402&view=diff
==============================================================================
--- commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/resources/test.properties (original)
+++ commons/proper/configuration/branches/CONFIGURATION_1_X_MAINTENANCE/src/test/resources/test.properties Mon Oct 21 22:35:52 2013
@@ -122,3 +122,5 @@ test.share2 = \\\\share2a
test.share2 = \\\\share2b
test.share3 = \\\\\\\\share3a\\\\\\\\,\\\\\\\\share3b\\
+# This is a foot comment
+