From ea67f0d44a5ed4eeb7101366fd83e00c0657ac28 Mon Sep 17 00:00:00 2001 From: Antoine Levy-Lambert Date: Tue, 6 Jun 2006 08:23:01 +0000 Subject: [PATCH] ReplaceTokens should allow properties files. Bugzilla 39688 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@412040 13f79535-47bb-0310-9956-ffa450edef68 --- CONTRIBUTORS | 1 + WHATSNEW | 2 ++ contributors.xml | 4 +++ docs/manual/CoreTypes/filterchain.html | 20 +++++++++++++- src/etc/testcases/filters/build.xml | 11 ++++++++ .../testcases/filters/input/sample.properties | 1 + .../tools/ant/filters/ReplaceTokens.java | 27 ++++++++++++++++++- .../tools/ant/filters/ReplaceTokensTest.java | 9 ++++++- 8 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 src/etc/testcases/filters/input/sample.properties diff --git a/CONTRIBUTORS b/CONTRIBUTORS index dcf109346..530e044b0 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -229,6 +229,7 @@ Tim Fennell Timothy Gerard Endres Tim Stephenson Tom Ball +Tom Cunningham Tom Dimock Tom Eugelink Ulrich Schmidt diff --git a/WHATSNEW b/WHATSNEW index eb805dc08..5c02578cc 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -424,6 +424,8 @@ Other changes: * new condition. Bugzilla report 32804. +* ReplaceTokens should allow properties files. Bugzilla report 39688. + Changes from Ant 1.6.4 to Ant 1.6.5 =================================== diff --git a/contributors.xml b/contributors.xml index 1137e0b4c..7204e9783 100644 --- a/contributors.xml +++ b/contributors.xml @@ -925,6 +925,10 @@ Tom Ball + + Tom + Cunningham + Tom Dimock diff --git a/docs/manual/CoreTypes/filterchain.html b/docs/manual/CoreTypes/filterchain.html index f2b888d08..1f9d90644 100644 --- a/docs/manual/CoreTypes/filterchain.html +++ b/docs/manual/CoreTypes/filterchain.html @@ -470,9 +470,15 @@ user defined values. token User defined String. - User defined search String + User defined search String. Yes + + propertiesfile + Not applicable. + Properties file to take tokens from. + No +

@@ -503,6 +509,18 @@ Convenience method: </loadfile> +This will treat each properties file entry in sample.properties as a token/key pair : +

+<loadfile srcfile="${src.file}" property="${src.file.replaced}">
+  <filterchain>
+    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+      <param type="propertiesfile" value="sample.properties"/>
+    </filterreader>
+  </filterchain>
+</loadfile>
+</filterchain>
+
+

StripJavaComments

This filter reader strips away comments from the data, diff --git a/src/etc/testcases/filters/build.xml b/src/etc/testcases/filters/build.xml index 32e5a9786..ed8123d47 100644 --- a/src/etc/testcases/filters/build.xml +++ b/src/etc/testcases/filters/build.xml @@ -79,6 +79,17 @@ + + + + + + + + + + + This has no new lines diff --git a/src/etc/testcases/filters/input/sample.properties b/src/etc/testcases/filters/input/sample.properties new file mode 100644 index 000000000..2dee873bf --- /dev/null +++ b/src/etc/testcases/filters/input/sample.properties @@ -0,0 +1 @@ +foo= diff --git a/src/main/org/apache/tools/ant/filters/ReplaceTokens.java b/src/main/org/apache/tools/ant/filters/ReplaceTokens.java index c546eccb6..6236d4e0f 100644 --- a/src/main/org/apache/tools/ant/filters/ReplaceTokens.java +++ b/src/main/org/apache/tools/ant/filters/ReplaceTokens.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2005 The Apache Software Foundation + * Copyright 2002-2006 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,9 +16,12 @@ */ package org.apache.tools.ant.filters; +import java.io.FileInputStream; import java.io.IOException; import java.io.Reader; +import java.util.Enumeration; import java.util.Hashtable; +import java.util.Properties; import org.apache.tools.ant.types.Parameter; import org.apache.tools.ant.BuildException; @@ -218,6 +221,21 @@ public final class ReplaceTokens hash.put(token.getKey(), token.getValue()); } + /** + * Returns properties from a specified properties file. + * + * @param fileName The file to load properties from. + */ + private Properties getPropertiesFromFile (String fileName) { + Properties props = new Properties(); + try { + props.load(new FileInputStream(fileName)); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return props; + } + /** * Sets the map of tokens to replace. * @@ -286,6 +304,13 @@ public final class ReplaceTokens final String name = params[i].getName(); final String value = params[i].getValue(); hash.put(name, value); + } else if ("propertiesfile".equals(type)) { + Properties props = getPropertiesFromFile(params[i].getValue()); + for (Enumeration e = props.keys(); e.hasMoreElements();) { + String key = (String) e.nextElement(); + String value = props.getProperty(key); + hash.put(key, value); + } } } } diff --git a/src/testcases/org/apache/tools/ant/filters/ReplaceTokensTest.java b/src/testcases/org/apache/tools/ant/filters/ReplaceTokensTest.java index 1ff8850a1..a4b711a9e 100644 --- a/src/testcases/org/apache/tools/ant/filters/ReplaceTokensTest.java +++ b/src/testcases/org/apache/tools/ant/filters/ReplaceTokensTest.java @@ -26,7 +26,7 @@ import org.apache.tools.ant.util.FileUtils; /** */ public class ReplaceTokensTest extends BuildFileTest { - + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); public ReplaceTokensTest(String name) { @@ -48,4 +48,11 @@ public class ReplaceTokensTest extends BuildFileTest { assertTrue(FILE_UTILS.contentEquals(expected, result)); } + public void testReplaceTokensPropertyFile() throws IOException { + executeTarget("testReplaceTokensPropertyFile"); + File expected = FILE_UTILS.resolveFile(getProjectDir(), "expected/replacetokens.test"); + File result = FILE_UTILS.resolveFile(getProjectDir(), "result/replacetokensPropertyFile.test"); + assertTrue(FILE_UTILS.contentEquals(expected, result)); + } + }