git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275266 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -103,6 +103,7 @@ nested elements.<BR> | |||
| <a href="#tabstospaces">TabsToSpaces</a><BR> | |||
| <a href="#tailfilter">TailFilter</a><BR> | |||
| <a href="#deletecharacters">DeleteCharacters</a><BR> | |||
| <a href="#concatfilter">ConcatFilter</a><BR> | |||
| <a href="#tokenfilter">TokenFilter</a><BR> | |||
| <H3><a name="filterreader">FilterReader</a></H3> | |||
| @@ -818,6 +819,49 @@ Delete tabs and returns from the data. | |||
| <deletecharacters chars="\t\r"/> | |||
| </PRE></BLOCKQUOTE> | |||
| <H3><a name="concatfilter">ConcatFilter</a></H3> | |||
| <p>This filter prepends or appends the content file to the filtered files.</p> | |||
| <p><em>since Ant 1.6</em></p> | |||
| <TABLE cellSpacing=0 cellPadding=2 border=1> | |||
| <TR> | |||
| <TD vAlign=top><B>Parameter Name</B></TD> | |||
| <TD vAlign=top><B>Parameter Value</B></TD> | |||
| <TD vAlign=top align="center"><B>Required</B></TD> | |||
| </TR> | |||
| <TR> | |||
| <TD vAlign=top>prepend</TD> | |||
| <TD vAlign=top> | |||
| The name of the file which content should be prepended to the file. | |||
| </TD> | |||
| <TD vAlign=top align="center">No</TD> | |||
| </TR> | |||
| <TR> | |||
| <TD vAlign=top>append</TD> | |||
| <TD vAlign=top> | |||
| The name of the file which content should be appended to the file. | |||
| </TD> | |||
| <TD vAlign=top align="center">No</TD> | |||
| </TR> | |||
| </TABLE> | |||
| <P> | |||
| <H4>Examples:</H4> | |||
| Do nothing: | |||
| <BLOCKQUOTE><PRE> | |||
| <filterchain> | |||
| <concatfilter/> | |||
| </filterchain> | |||
| </PRE></BLOCKQUOTE> | |||
| Adds a license text before each java source: | |||
| <BLOCKQUOTE><PRE> | |||
| <filterchain> | |||
| <concatfilter prepend="apache-license-java.txt"/> | |||
| </filterchain> | |||
| </PRE></BLOCKQUOTE> | |||
| <H3><a name="tokenfilter">TokenFilter</a></H3> | |||
| This filter tokenizes the inputstream into strings and passes these | |||
| @@ -1293,4 +1337,4 @@ This may be used as follows: | |||
| <HR> | |||
| <P align=center>Copyright © 2002-2003 Apache Software Foundation. All rights | |||
| Reserved.</P></BODY></HTML> | |||
| Reserved.</P></BODY></HTML> | |||
| @@ -3,8 +3,8 @@ | |||
| <target name="init"> | |||
| <mkdir dir="result" /> | |||
| <echo file="result/before.txt" message="this-should-be-the-first-line${line.separator}"/> | |||
| <echo file="result/after.txt" message="this-should-be-the-last-line${line.separator}"/> | |||
| <echo file="result/prepend.txt" message="this-should-be-the-first-line${line.separator}"/> | |||
| <echo file="result/append.txt" message="this-should-be-the-last-line${line.separator}"/> | |||
| <copy file="input/head-tail.test" tofile="input/concatfilter.test"/> | |||
| <fixcrlf srcDir="input" includes="concatfilter.test"/> | |||
| </target> | |||
| @@ -26,35 +26,35 @@ | |||
| </copy> | |||
| </target> | |||
| <target name="testFilterReaderBefore" depends="init"> | |||
| <target name="testFilterReaderPrepend" depends="init"> | |||
| <copy file="input/concatfilter.test" | |||
| tofile="result/concat.filterReaderBefore.test"> | |||
| tofile="result/concat.filterReaderPrepend.test"> | |||
| <filterchain> | |||
| <filterreader classname="org.apache.tools.ant.filters.ConcatFilter"> | |||
| <param name="before" value="result/before.txt"/> | |||
| <param name="prepend" value="result/prepend.txt"/> | |||
| </filterreader> | |||
| </filterchain> | |||
| </copy> | |||
| </target> | |||
| <target name="testFilterReaderAfter" depends="init"> | |||
| <target name="testFilterReaderAppend" depends="init"> | |||
| <copy file="input/concatfilter.test" | |||
| tofile="result/concat.filterReaderAfter.test"> | |||
| tofile="result/concat.filterReaderAppend.test"> | |||
| <filterchain> | |||
| <filterreader classname="org.apache.tools.ant.filters.ConcatFilter"> | |||
| <param name="after" value="result/after.txt"/> | |||
| <param name="append" value="result/append.txt"/> | |||
| </filterreader> | |||
| </filterchain> | |||
| </copy> | |||
| </target> | |||
| <target name="testFilterReaderBeforeAfter" depends="init"> | |||
| <target name="testFilterReaderPrependAppend" depends="init"> | |||
| <copy file="input/concatfilter.test" | |||
| tofile="result/concat.filterReaderBeforeAfter.test"> | |||
| tofile="result/concat.filterReaderPrependAppend.test"> | |||
| <filterchain> | |||
| <filterreader classname="org.apache.tools.ant.filters.ConcatFilter"> | |||
| <param name="before" value="result/before.txt"/> | |||
| <param name="after" value="result/after.txt"/> | |||
| <param name="prepend" value="result/prepend.txt"/> | |||
| <param name="append" value="result/append.txt"/> | |||
| </filterreader> | |||
| </filterchain> | |||
| </copy> | |||
| @@ -70,32 +70,32 @@ | |||
| </copy> | |||
| </target> | |||
| <target name="testConcatFilterBefore" depends="init"> | |||
| <target name="testConcatFilterPrepend" depends="init"> | |||
| <typedef name="concatfilter" classname="org.apache.tools.ant.filters.ConcatFilter"/> | |||
| <copy file="input/concatfilter.test" | |||
| tofile="result/concat.concatfilterBefore.test"> | |||
| tofile="result/concat.concatfilterPrepend.test"> | |||
| <filterchain> | |||
| <concatfilter before="result/before.txt"/> | |||
| <concatfilter prepend="result/prepend.txt"/> | |||
| </filterchain> | |||
| </copy> | |||
| </target> | |||
| <target name="testConcatFilterAfter" depends="init"> | |||
| <target name="testConcatFilterAppend" depends="init"> | |||
| <typedef name="concatfilter" classname="org.apache.tools.ant.filters.ConcatFilter"/> | |||
| <copy file="input/concatfilter.test" | |||
| tofile="result/concat.concatfilterAfter.test"> | |||
| tofile="result/concat.concatfilterAppend.test"> | |||
| <filterchain> | |||
| <concatfilter after="result/after.txt"/> | |||
| <concatfilter append="result/append.txt"/> | |||
| </filterchain> | |||
| </copy> | |||
| </target> | |||
| <target name="testConcatFilterBeforeAfter" depends="init"> | |||
| <target name="testConcatFilterPrependAppend" depends="init"> | |||
| <typedef name="concatfilter" classname="org.apache.tools.ant.filters.ConcatFilter"/> | |||
| <copy file="input/concatfilter.test" | |||
| tofile="result/concat.concatfilterBeforeAfter.test"> | |||
| tofile="result/concat.concatfilterPrependAppend.test"> | |||
| <filterchain> | |||
| <concatfilter before="result/before.txt" after="result/after.txt"/> | |||
| <concatfilter prepend="result/prepend.txt" append="result/append.txt"/> | |||
| </filterchain> | |||
| </copy> | |||
| </target> | |||
| @@ -67,7 +67,7 @@ import org.apache.tools.ant.types.Parameter; | |||
| * <copy todir="build"> | |||
| * <fileset dir="src" includes="*.java"/> | |||
| * <filterchain> | |||
| * <concatfilter before="apache-license-java.txt"/> | |||
| * <concatfilter prepend="apache-license-java.txt"/> | |||
| * </filterchain> | |||
| * </copy> | |||
| * </pre> | |||
| @@ -83,16 +83,16 @@ public final class ConcatFilter extends BaseParamFilterReader | |||
| implements ChainableReader { | |||
| /** File to add before the content. */ | |||
| private File before; | |||
| private File prepend; | |||
| /** File to add after the content. */ | |||
| private File after; | |||
| private File append; | |||
| /** Reader for before-file. */ | |||
| private Reader beforeReader = new EmptyReader(); | |||
| /** Reader for prepend-file. */ | |||
| private Reader prependReader = new EmptyReader(); | |||
| /** Reader for after-file. */ | |||
| private Reader afterReader = new EmptyReader(); | |||
| /** Reader for append-file. */ | |||
| private Reader appendReader = new EmptyReader(); | |||
| /** | |||
| * Constructor for "dummy" instances. | |||
| @@ -134,49 +134,49 @@ public final class ConcatFilter extends BaseParamFilterReader | |||
| int ch = -1; | |||
| // The readers return -1 if they end. So simply read the "before" | |||
| // after that the "content" and at the end the "after" file. | |||
| ch = beforeReader.read(); | |||
| // The readers return -1 if they end. So simply read the "prepend" | |||
| // after that the "content" and at the end the "append" file. | |||
| ch = prependReader.read(); | |||
| if (ch == -1) { | |||
| ch = super.read(); | |||
| } | |||
| if (ch == -1) { | |||
| ch = afterReader.read(); | |||
| ch = appendReader.read(); | |||
| } | |||
| return ch; | |||
| } | |||
| /** | |||
| * Sets <i>before</i> attribute. | |||
| * @param before new value | |||
| * Sets <i>prepend</i> attribute. | |||
| * @param prepend new value | |||
| */ | |||
| public void setBefore(final File before) { | |||
| this.before = before; | |||
| public void setPrepend(final File prepend) { | |||
| this.prepend = prepend; | |||
| } | |||
| /** | |||
| * Returns <i>before</i> attribute. | |||
| * @return before attribute | |||
| * Returns <i>prepend</i> attribute. | |||
| * @return prepend attribute | |||
| */ | |||
| public File getBefore() { | |||
| return before; | |||
| public File getPrepend() { | |||
| return prepend; | |||
| } | |||
| /** | |||
| * Sets <i>after</i> attribute. | |||
| * @param after new value | |||
| * Sets <i>append</i> attribute. | |||
| * @param append new value | |||
| */ | |||
| public void setAfter(final File after) { | |||
| this.after = after; | |||
| public void setAppend(final File append) { | |||
| this.append = append; | |||
| } | |||
| /** | |||
| * Returns <i>after</i> attribute. | |||
| * @return after attribute | |||
| * Returns <i>append</i> attribute. | |||
| * @return append attribute | |||
| */ | |||
| public File getAfter() { | |||
| return after; | |||
| public File getAppend() { | |||
| return append; | |||
| } | |||
| /** | |||
| @@ -191,10 +191,10 @@ public final class ConcatFilter extends BaseParamFilterReader | |||
| */ | |||
| public Reader chain(final Reader rdr) { | |||
| ConcatFilter newFilter = new ConcatFilter(rdr); | |||
| newFilter.setBefore(getBefore()); | |||
| newFilter.setAfter(getAfter()); | |||
| newFilter.setPrepend(getPrepend()); | |||
| newFilter.setAppend(getAppend()); | |||
| // Usually the initialized is set to true. But here it must not. | |||
| // Because the before and after readers have to be instantiated | |||
| // Because the prepend and append readers have to be instantiated | |||
| // on runtime | |||
| //newFilter.setInitialized(true); | |||
| return newFilter; | |||
| @@ -210,27 +210,27 @@ public final class ConcatFilter extends BaseParamFilterReader | |||
| Parameter[] params = getParameters(); | |||
| if (params != null) { | |||
| for (int i = 0; i < params.length; i++) { | |||
| if ("before".equals(params[i].getName())) { | |||
| setBefore(new File(params[i].getValue())); | |||
| if ("prepend".equals(params[i].getName())) { | |||
| setPrepend(new File(params[i].getValue())); | |||
| continue; | |||
| } | |||
| if ("after".equals(params[i].getName())) { | |||
| setAfter(new File(params[i].getValue())); | |||
| if ("append".equals(params[i].getName())) { | |||
| setAppend(new File(params[i].getValue())); | |||
| continue; | |||
| } | |||
| } | |||
| } | |||
| if (before != null) { | |||
| if (!before.isAbsolute()) { | |||
| before = new File(getProject().getBaseDir(), before.getPath()); | |||
| if (prepend != null) { | |||
| if (!prepend.isAbsolute()) { | |||
| prepend = new File(getProject().getBaseDir(), prepend.getPath()); | |||
| } | |||
| beforeReader = new BufferedReader(new FileReader(before)); | |||
| prependReader = new BufferedReader(new FileReader(prepend)); | |||
| } | |||
| if (after != null) { | |||
| if (!after.isAbsolute()) { | |||
| after = new File(getProject().getBaseDir(), after.getPath()); | |||
| if (append != null) { | |||
| if (!append.isAbsolute()) { | |||
| append = new File(getProject().getBaseDir(), append.getPath()); | |||
| } | |||
| afterReader = new BufferedReader(new FileReader(after)); | |||
| appendReader = new BufferedReader(new FileReader(append)); | |||
| } | |||
| } | |||
| @@ -69,7 +69,7 @@ public class ConcatFilterTest extends BuildFileTest { | |||
| private static FileUtils fu = FileUtils.newFileUtils(); | |||
| private static final String lSep = System.getProperty("line.separator"); | |||
| private static final String FILE_BEGINNING_WITH = | |||
| private static final String FILE_PREPEND_WITH = | |||
| "this-should-be-the-first-line" + lSep | |||
| + "Line 1" + lSep | |||
| + "Line 2" + lSep | |||
| @@ -77,7 +77,7 @@ public class ConcatFilterTest extends BuildFileTest { | |||
| + "Line 4" + lSep | |||
| ; | |||
| private static final String FILE_BEGINNING = | |||
| private static final String FILE_PREPEND = | |||
| "Line 1" + lSep | |||
| + "Line 2" + lSep | |||
| + "Line 3" + lSep | |||
| @@ -85,7 +85,7 @@ public class ConcatFilterTest extends BuildFileTest { | |||
| + "Line 5" + lSep | |||
| ; | |||
| private static final String FILE_ENDING_WITH = | |||
| private static final String FILE_APPEND_WITH = | |||
| "Line 57" + lSep | |||
| + "Line 58" + lSep | |||
| + "Line 59" + lSep | |||
| @@ -93,7 +93,7 @@ public class ConcatFilterTest extends BuildFileTest { | |||
| + "this-should-be-the-last-line" + lSep | |||
| ; | |||
| private static final String FILE_ENDING = | |||
| private static final String FILE_APPEND = | |||
| "Line 56" + lSep | |||
| + "Line 57" + lSep | |||
| + "Line 58" + lSep | |||
| @@ -112,7 +112,7 @@ public class ConcatFilterTest extends BuildFileTest { | |||
| public void tearDown() { | |||
| // I dont know why - but on my machine I always get a | |||
| // "Unable to delete file ...result\after.txt" (or before.txt) | |||
| // "Unable to delete file ...result\append.txt" (or prepend.txt) | |||
| // from Delete.removeDir(Delete.java:612). | |||
| // Win2000, JDK 1.4.1_02 | |||
| // A <sleep> before <delete> doesn´t work. From 10ms to 3000ms. | |||
| @@ -137,59 +137,59 @@ public class ConcatFilterTest extends BuildFileTest { | |||
| } | |||
| public void testFilterReaderBefore() throws IOException { | |||
| executeTarget("testFilterReaderBefore"); | |||
| File resultFile = getProject().resolveFile("result/concat.filterReaderBefore.test"); | |||
| executeTarget("testFilterReaderPrepend"); | |||
| File resultFile = getProject().resolveFile("result/concat.filterReaderPrepend.test"); | |||
| String resultContent = fu.readFully(new java.io.FileReader(resultFile)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_BEGINNING_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_ENDING)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_PREPEND_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_APPEND)); | |||
| } | |||
| public void testFilterReaderAfter() throws IOException { | |||
| executeTarget("testFilterReaderAfter"); | |||
| File resultFile = getProject().resolveFile("result/concat.filterReaderAfter.test"); | |||
| executeTarget("testFilterReaderAppend"); | |||
| File resultFile = getProject().resolveFile("result/concat.filterReaderAppend.test"); | |||
| String resultContent = fu.readFully(new java.io.FileReader(resultFile)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_BEGINNING)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_ENDING_WITH)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_PREPEND)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_APPEND_WITH)); | |||
| } | |||
| public void testFilterReaderBeforeAfter() throws IOException { | |||
| executeTarget("testFilterReaderBeforeAfter"); | |||
| File resultFile = getProject().resolveFile("result/concat.filterReaderBeforeAfter.test"); | |||
| executeTarget("testFilterReaderPrependAppend"); | |||
| File resultFile = getProject().resolveFile("result/concat.filterReaderPrependAppend.test"); | |||
| String resultContent = fu.readFully(new java.io.FileReader(resultFile)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_BEGINNING_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_ENDING_WITH)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_PREPEND_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_APPEND_WITH)); | |||
| } | |||
| public void testConcatFilter() throws IOException { | |||
| executeTarget("testConcatFilter"); | |||
| File resultFile = getProject().resolveFile("result/concat.concatfilter.test"); | |||
| String resultContent = fu.readFully(new java.io.FileReader(resultFile)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_BEGINNING)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_ENDING)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_PREPEND)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_APPEND)); | |||
| } | |||
| public void testConcatFilterBefore() throws IOException { | |||
| executeTarget("testConcatFilterBefore"); | |||
| File resultFile = getProject().resolveFile("result/concat.concatfilterBefore.test"); | |||
| executeTarget("testConcatFilterPrepend"); | |||
| File resultFile = getProject().resolveFile("result/concat.concatfilterPrepend.test"); | |||
| String resultContent = fu.readFully(new java.io.FileReader(resultFile)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_BEGINNING_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_ENDING)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_PREPEND_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_APPEND)); | |||
| } | |||
| public void testConcatFilterAfter() throws IOException { | |||
| executeTarget("testConcatFilterAfter"); | |||
| File resultFile = getProject().resolveFile("result/concat.concatfilterAfter.test"); | |||
| executeTarget("testConcatFilterAppend"); | |||
| File resultFile = getProject().resolveFile("result/concat.concatfilterAppend.test"); | |||
| String resultContent = fu.readFully(new java.io.FileReader(resultFile)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_BEGINNING)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_ENDING_WITH)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_PREPEND)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_APPEND_WITH)); | |||
| } | |||
| public void testConcatFilterBeforeAfter() throws IOException { | |||
| executeTarget("testConcatFilterBeforeAfter"); | |||
| File resultFile = getProject().resolveFile("result/concat.concatfilterBeforeAfter.test"); | |||
| executeTarget("testConcatFilterPrependAppend"); | |||
| File resultFile = getProject().resolveFile("result/concat.concatfilterPrependAppend.test"); | |||
| String resultContent = fu.readFully(new java.io.FileReader(resultFile)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_BEGINNING_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_ENDING_WITH)); | |||
| assertTrue("First 5 lines differs.", resultContent.startsWith(FILE_PREPEND_WITH)); | |||
| assertTrue("Last 5 lines differs.", resultContent.endsWith(FILE_APPEND_WITH)); | |||
| } | |||
| } | |||