Author: bodewig Date: Thu Aug 27 07:17:24 2009 New Revision: 808304 URL: http://svn.apache.org/viewvc?rev=808304&view=rev Log: UniqFilter is not only simpler if implemented as a TokenFilter, it is even more useful as well
Added: ant/core/trunk/src/tests/antunit/filters/expected/unique-columns.txt (with props) ant/core/trunk/src/tests/antunit/filters/input/unique-columns.txt (with props) Modified: ant/core/trunk/WHATSNEW ant/core/trunk/docs/manual/CoreTypes/filterchain.html ant/core/trunk/src/main/org/apache/tools/ant/filters/UniqFilter.java ant/core/trunk/src/tests/antunit/filters/uniq-test.xml Modified: ant/core/trunk/WHATSNEW URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=808304&r1=808303&r2=808304&view=diff ============================================================================== --- ant/core/trunk/WHATSNEW (original) +++ ant/core/trunk/WHATSNEW Thu Aug 27 07:17:24 2009 @@ -927,8 +927,8 @@ added. Bugzilla Report 40504. - * A new filterreader <uniqfilter> that suppresses lines that match - their ancestor line has been added. + * A new token filter <uniqfilter> that suppresses tokens that match + their ancestor token has been added. Changes from Ant 1.7.0 TO Ant 1.7.1 ============================================= Modified: ant/core/trunk/docs/manual/CoreTypes/filterchain.html URL: http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/CoreTypes/filterchain.html?rev=808304&r1=808303&r2=808304&view=diff ============================================================================== --- ant/core/trunk/docs/manual/CoreTypes/filterchain.html (original) +++ ant/core/trunk/docs/manual/CoreTypes/filterchain.html Thu Aug 27 07:17:24 2009 @@ -125,7 +125,6 @@ <a href="#tokenfilter">TokenFilter</a><br> <a href="../CoreTasks/fixcrlf.html">FixCRLF</a><br> <a href="#sortfilter">SortFilter</a><br> -<a href="#uniqfilter">UniqFilter</a><br> <h3><a name="filterreader">FilterReader</a></h3> @@ -1032,6 +1031,7 @@ <a href="#trim">Trim</a><br> <a href="#ignoreblank">IgnoreBlank</a><br> <a href="#filterdeletecharacters">DeleteCharacters</a><br> + <a href="#uniqfilter">UniqFilter</a><br> </p> The following string filters are provided by the optional distribution. @@ -1360,6 +1360,20 @@ </pre></blockquote> +<p><b><em><a name="uniqfilter">UniqFilter</a></em></b></p> + +<p>Suppresses all tokens that match their ancestor token. It is most + useful if combined with a sort filter.</p> + +<h4>Example:</h4> + +This suppresses duplicate lines. +<blockquote><pre> +<tokenfilter> + <uniqfilter/> +</tokenfilter> +</pre></blockquote> + <p><b><em><a name="scriptfilter">ScriptFilter</a></em></b></p> This is an optional filter that executes a script in a <a href="http://jakarta.apache.org/bsf" target="_top">Apache BSF</a> @@ -1495,21 +1509,4 @@ </copy> </pre></blockquote> -<h3><a name="uniqfilter">UniqFilter</a></h3> - -<p>Suppresses all lines that match their ancestor line. It is most - useful if combined with a sort filter.</p> - -<h4>Example:</h4> - -This suppresses duplicate lines. -<blockquote><pre> -<filterreader classname="org.apache.tools.ant.filters.UniqFilter"/> -</pre></blockquote> - -Convenience method: -<blockquote><pre> -<uniqfilter/> -</pre></blockquote> - </body></html> Modified: ant/core/trunk/src/main/org/apache/tools/ant/filters/UniqFilter.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/filters/UniqFilter.java?rev=808304&r1=808303&r2=808304&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/filters/UniqFilter.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/filters/UniqFilter.java Thu Aug 27 07:17:24 2009 @@ -17,53 +17,23 @@ */ package org.apache.tools.ant.filters; -import java.io.IOException; -import java.io.Reader; - /** - * Like the Unix uniq(1) command, only returns lines that are - * different from their ancestor line. + * Like the Unix uniq(1) command, only returns tokens that are + * different from their ancestor token. * - * <p>This filter is probably most useful if used together with a sortfilter.</p> + * <p>This filter is probably most useful if used together with a + * sortfilter.</p> * * @since Ant 1.8.0 */ -public class UniqFilter extends BaseFilterReader implements ChainableReader { +public class UniqFilter implements TokenFilter.Filter { private String lastLine = null; - private String currentLine = null; public UniqFilter() { } - public UniqFilter(Reader rdr) { - super(rdr); - } - - public int read() throws IOException { - int ch = -1; - if (currentLine != null) { - ch = currentLine.charAt(0); - if (currentLine.length() == 1) { - currentLine = null; - } else { - currentLine = currentLine.substring(1); - } - } else { - do { - currentLine = readLine(); - } while (lastLine != null && currentLine != null - && lastLine.equals(currentLine)); - lastLine = currentLine; - if (currentLine != null) { - return read(); - } - } - return ch; - } - - public Reader chain(final Reader rdr) { - UniqFilter newFilter = new UniqFilter(rdr); - newFilter.setInitialized(true); - return newFilter; + public String filter(String string) { + return lastLine == null || !lastLine.equals(string) + ? (lastLine = string) : null; } } Added: ant/core/trunk/src/tests/antunit/filters/expected/unique-columns.txt URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/filters/expected/unique-columns.txt?rev=808304&view=auto ============================================================================== --- ant/core/trunk/src/tests/antunit/filters/expected/unique-columns.txt (added) +++ ant/core/trunk/src/tests/antunit/filters/expected/unique-columns.txt Thu Aug 27 07:17:24 2009 @@ -0,0 +1 @@ +A B C B Propchange: ant/core/trunk/src/tests/antunit/filters/expected/unique-columns.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: ant/core/trunk/src/tests/antunit/filters/input/unique-columns.txt URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/filters/input/unique-columns.txt?rev=808304&view=auto ============================================================================== --- ant/core/trunk/src/tests/antunit/filters/input/unique-columns.txt (added) +++ ant/core/trunk/src/tests/antunit/filters/input/unique-columns.txt Thu Aug 27 07:17:24 2009 @@ -0,0 +1 @@ +A A B C B Propchange: ant/core/trunk/src/tests/antunit/filters/input/unique-columns.txt ------------------------------------------------------------------------------ svn:eol-style = native Modified: ant/core/trunk/src/tests/antunit/filters/uniq-test.xml URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/filters/uniq-test.xml?rev=808304&r1=808303&r2=808304&view=diff ============================================================================== --- ant/core/trunk/src/tests/antunit/filters/uniq-test.xml (original) +++ ant/core/trunk/src/tests/antunit/filters/uniq-test.xml Thu Aug 27 07:17:24 2009 @@ -26,7 +26,9 @@ <copy file="input/uniq.txt" tofile="${output}/uniq.txt"> <filterchain> - <uniqfilter/> + <tokenfilter> + <uniqfilter/> + </tokenfilter> </filterchain> </copy> <au:assertFilesMatch @@ -39,11 +41,29 @@ tofile="${output}/uniq.txt"> <filterchain> <sortfilter/> - <uniqfilter/> + <tokenfilter> + <uniqfilter/> + </tokenfilter> </filterchain> </copy> <au:assertFilesMatch expected="expected/sortuniq.txt" actual="${output}/uniq.txt"/> </target> + + <target name="testUniqueColumns" depends="setUp"> + <copy file="input/unique-columns.txt" + tofile="${output}/unique-columns.txt"> + <filterchain> + <tokenfilter> + <stringtokenizer/> + <uniqfilter/> + </tokenfilter> + </filterchain> + </copy> + <au:assertFilesMatch + expected="expected/unique-columns.txt" + actual="${output}/unique-columns.txt"/> + </target> + </project>