diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java
index e87c216bc..97de2f1c5 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java
@@ -67,12 +67,12 @@ import org.apache.tools.ant.types.Parameterizable;
* Example:
* =======
*
- * <headfilter lines="3"/>
+ * <headfilter lines="3"/>
*
* Or:
*
- * <filterreader classname="org.apache.tools.ant.filters.HeadFilter">
- * <param name="lines" value="3"/>
+ * <filterreader classname="org.apache.tools.ant.filters.HeadFilter">
+ * <param name="lines" value="3"/>
* </filterreader>
*
* @author Magesh Umasankar
@@ -180,15 +180,15 @@ public final class HeadFilter
this.lines = lines;
}
- public final long getLines() {
+ private final long getLines() {
return lines;
}
- public final void setInitialized(final boolean initialized) {
+ private final void setInitialized(final boolean initialized) {
this.initialized = initialized;
}
- public final boolean getInitialized() {
+ private final boolean getInitialized() {
return initialized;
}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContains.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContains.java
index 63d592a66..7a08ebe95 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContains.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContains.java
@@ -3,6 +3,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
import java.util.Vector;
import org.apache.tools.ant.types.Parameter;
@@ -15,6 +16,13 @@ import org.apache.tools.ant.types.Parameterizable;
* Example:
* =======
*
+ * <linecontains>
+ * <contains value="foo">
+ * <contains value="bar">
+ * </linecontains>
+ *
+ * Or:
+ *
* <filterreader classname="org.apache.tools.ant.filters.LineContains">
* <param type="contains" value="foo"/>
* <param type="contains" value="bar"/>
@@ -26,7 +34,7 @@ import org.apache.tools.ant.types.Parameterizable;
*/
public final class LineContains
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
private static final String CONTAINS_KEY = "contains";
@@ -34,12 +42,26 @@ public final class LineContains
private boolean initialized = false;
- private final Vector contains = new Vector();
-
- private int containsSize = 0;
+ private Vector contains = new Vector();
private String line = null;
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public LineContains() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
+
/**
* Create a new filtered reader.
*
@@ -78,9 +100,11 @@ public final class LineContains
}
if (line != null) {
+ int containsSize = contains.size();
for (int i = 0; i < containsSize; i++) {
String containsStr = (String) contains.elementAt(i);
if (line.indexOf(containsStr) == -1) {
+ System.out.println("Hello");
line = null;
break;
}
@@ -116,6 +140,33 @@ public final class LineContains
return n;
}
+ public final void addConfiguredContains(final Contains contains) {
+ this.contains.addElement(contains.getValue());
+ }
+
+ private void setContains(final Vector contains) {
+ this.contains = contains;
+ }
+
+ private final Vector getContains() {
+ return contains;
+ }
+
+ private final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ private final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ LineContains newFilter = new LineContains(rdr);
+ newFilter.setContains(getContains());
+ newFilter.setInitialized(true);
+ return newFilter;
+ }
+
/**
* Set Parameters
*/
@@ -131,7 +182,18 @@ public final class LineContains
contains.addElement(parameters[i].getValue());
}
}
- containsSize = contains.size();
+ }
+ }
+
+ public static class Contains {
+ private String value;
+
+ public final void setValue(String contains) {
+ value = contains;
+ }
+
+ public final String getValue() {
+ return value;
}
}
}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/PrefixLines.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/PrefixLines.java
index 63e44f9aa..b142446d8 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/PrefixLines.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/PrefixLines.java
@@ -3,6 +3,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.Parameterizable;
@@ -10,11 +11,22 @@ import org.apache.tools.ant.types.Parameterizable;
/**
* Attach a prefix to every line
*
+ * Example:
+ * =======
+ *
+ * <prefixlines prefix="Foo"/>
+ *
+ * Or:
+ *
+ * <filterreader classname="org.apache.tools.ant.filters.PrefixLines">
+ * <param name="prefix" value="Foo"/>
+ * </filterreader>
+ *
* @author Magesh Umasankar
*/
public final class PrefixLines
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
/**
* prefix key
@@ -29,6 +41,22 @@ public final class PrefixLines
private String queuedData = null;
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public PrefixLines() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
+
/**
* Create a new filtered reader.
*
@@ -39,9 +67,9 @@ public final class PrefixLines
}
public final int read() throws IOException {
- if (!initialized) {
+ if (!getInitialized()) {
initialize();
- initialized = true;
+ setInitialized(true);
}
int ch = -1;
@@ -101,12 +129,35 @@ public final class PrefixLines
return n;
}
+ public final void setPrefix(final String prefix) {
+ this.prefix = prefix;
+ }
+
+ private final String getPrefix() {
+ return prefix;
+ }
+
+ private final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ private final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ PrefixLines newFilter = new PrefixLines(rdr);
+ newFilter.setPrefix(getPrefix());
+ newFilter.setInitialized(true);
+ return newFilter;
+ }
+
/**
* Set Parameters
*/
public final void setParameters(final Parameter[] parameters) {
this.parameters = parameters;
- initialized = false;
+ setInitialized(false);
}
private final void initialize() {
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ReplaceTokens.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ReplaceTokens.java
index 061356123..c04871c52 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ReplaceTokens.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ReplaceTokens.java
@@ -56,6 +56,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
import java.util.Hashtable;
import org.apache.tools.ant.types.Parameter;
@@ -66,17 +67,24 @@ import org.apache.tools.ant.types.Parameterizable;
*
* Example Usage:
* =============
+ *
+ * <replacetokens begintoken="#" endtoken="#">
+ * <token key="DATE" value="${TODAY}"/>
+ * </replacetokens>
+ *
+ * Or:
+ *
* <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
* <param type="tokenchar" name="begintoken" value="#"/>
* <param type="tokenchar" name="endtoken" value="#"/>
- * <param type="token" name="DATE" value="${DATE}"/>
+ * <param type="token" name="DATE" value="${TODAY}"/>
* </filterreader>
*
* @author Magesh Umasankar
*/
public final class ReplaceTokens
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
private static final char DEFAULT_BEGIN_TOKEN = '@';
@@ -94,6 +102,22 @@ public final class ReplaceTokens
private char endToken = DEFAULT_END_TOKEN;
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public ReplaceTokens() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
+
/**
* Create a new filtered reader.
*
@@ -107,9 +131,9 @@ public final class ReplaceTokens
* Replace tokens with values.
*/
public final int read() throws IOException {
- if (!initialized) {
+ if (!getInitialized()) {
initialize();
- initialized = true;
+ setInitialized(true);
}
if (queuedData != null && queuedData.length() > 0) {
@@ -177,12 +201,57 @@ public final class ReplaceTokens
return n;
}
+ public final void setBeginToken(final char beginToken) {
+ this.beginToken = beginToken;
+ }
+
+ private final char getBeginToken() {
+ return beginToken;
+ }
+
+ public final void setEndToken(final char endToken) {
+ this.endToken = endToken;
+ }
+
+ private final char getEndToken() {
+ return endToken;
+ }
+
+ public final void addConfiguredToken(final Token token) {
+ hash.put(token.getKey(), token.getValue());
+ }
+
+ private void setTokens(final Hashtable hash) {
+ this.hash = hash;
+ }
+
+ private final Hashtable getTokens() {
+ return hash;
+ }
+
+ private final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ private final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ ReplaceTokens newFilter = new ReplaceTokens(rdr);
+ newFilter.setBeginToken(getBeginToken());
+ newFilter.setEndToken(getEndToken());
+ newFilter.setTokens(getTokens());
+ newFilter.setInitialized(true);
+ return newFilter;
+ }
+
/**
* Set Parameters
*/
public final void setParameters(final Parameter[] parameters) {
this.parameters = parameters;
- initialized = false;
+ setInitialized(false);
}
/**
@@ -209,4 +278,26 @@ public final class ReplaceTokens
}
}
}
+
+ public static class Token {
+ private String key;
+
+ private String value;
+
+ public final void setKey(String key) {
+ this.key = key;
+ }
+
+ public final void setValue(String value) {
+ this.value = value;
+ }
+
+ public final String getKey() {
+ return key;
+ }
+
+ public final String getValue() {
+ return value;
+ }
+ }
}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripJavaComments.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripJavaComments.java
index 4ca414168..32a31fe24 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripJavaComments.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripJavaComments.java
@@ -56,6 +56,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
/**
* This is a java comment and string stripper reader that filters
@@ -64,7 +65,25 @@ import java.io.Reader;
* Since this class heavily relies on the single char read function,
* you are reccomended to make it work on top of a buffered reader.
*/
-public final class StripJavaComments extends FilterReader {
+public final class StripJavaComments
+ extends FilterReader
+ implements CloneableReader
+{
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public StripJavaComments() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
/**
* Create a new filtered reader.
@@ -147,4 +166,9 @@ public final class StripJavaComments extends FilterReader {
}
return n;
}
+
+ public final Reader clone(final Reader rdr) {
+ StripJavaComments newFilter = new StripJavaComments(rdr);
+ return newFilter;
+ }
}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineBreaks.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineBreaks.java
index 82fd2e0b2..680aaf870 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineBreaks.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineBreaks.java
@@ -56,6 +56,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.Parameterizable;
@@ -63,12 +64,18 @@ import org.apache.tools.ant.types.Parameterizable;
/**
* Filter to flatten the stream to a single line.
*
+ * <striplinebreaks/>
+ *
+ * Or:
+ *
+ * <filterreader classname="org.apache.tools.ant.filters.StripLineBreaks"/>
+ *
* @author Steve Loughran
* @author Magesh Umasankar
*/
public final class StripLineBreaks
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
/**
* Linebreaks. What do to on funny IBM mainframes with odd line endings?
@@ -87,6 +94,22 @@ public final class StripLineBreaks
private boolean initialized = false;
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public StripLineBreaks() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
+
/**
* Create a new filtered reader.
*
@@ -98,21 +121,8 @@ public final class StripLineBreaks
public final int read() throws IOException {
if (!initialized) {
- String userDefinedLineBreaks = null;
- if (parameters != null) {
- for (int i = 0; i < parameters.length; i++) {
- if (LINE_BREAKS_KEY.equals(parameters[i].getName())) {
- userDefinedLineBreaks = parameters[i].getValue();
- break;
- }
- }
- }
-
- if (userDefinedLineBreaks != null) {
- lineBreaks = userDefinedLineBreaks;
- }
-
- initialized = true;
+ initialize();
+ setInitialized(true);
}
int ch = in.read();
@@ -151,11 +161,49 @@ public final class StripLineBreaks
return n;
}
+ public final void setLineBreaks(final String lineBreaks) {
+ this.lineBreaks = lineBreaks;
+ }
+
+ private final String getLineBreaks() {
+ return lineBreaks;
+ }
+
+ private final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ private final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ StripLineBreaks newFilter = new StripLineBreaks(rdr);
+ newFilter.setLineBreaks(getLineBreaks());
+ newFilter.setInitialized(true);
+ return newFilter;
+ }
+
/**
* Set Parameters
*/
public final void setParameters(final Parameter[] parameters) {
this.parameters = parameters;
- initialized = false;
+ setInitialized(false);
+ }
+
+ private final void initialize() {
+ String userDefinedLineBreaks = null;
+ if (parameters != null) {
+ for (int i = 0; i < parameters.length; i++) {
+ if (LINE_BREAKS_KEY.equals(parameters[i].getName())) {
+ userDefinedLineBreaks = parameters[i].getValue();
+ break;
+ }
+ }
+ }
+ if (userDefinedLineBreaks != null) {
+ lineBreaks = userDefinedLineBreaks;
+ }
}
}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineComments.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineComments.java
index 871a1be31..c2c2fe0cc 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineComments.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineComments.java
@@ -3,6 +3,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
import java.util.Vector;
import org.apache.tools.ant.types.Parameter;
@@ -14,19 +15,29 @@ import org.apache.tools.ant.types.Parameterizable;
* Example:
* =======
*
- * <filterreader classname="org.apache.tools.ant.filters.StripLineComments">
- * <param type="comment" value="#"/>
- * <param type="comment" value="--"/>
- * <param type="comment" value="REM "/>
- * <param type="comment" value="rem "/>
- * <param type="comment" value="//"/>
+ * <striplinecomments>
+ * <comment value="#"/>
+ * <comment value="--"/>
+ * <comment value="REM "/>
+ * <comment value="rem "/>
+ * <comment value="//"/>
+ * </striplinecomments>
+ *
+ * Or:
+ *
+ * <filterreader classname="org.apache.tools.ant.filters.StripLineComments">
+ * <param type="comment" value="#"/>
+ * <param type="comment" value="--"/>
+ * <param type="comment" value="REM "/>
+ * <param type="comment" value="rem "/>
+ * <param type="comment" value="//"/>
* </filterreader>
*
* @author Magesh Umasankar
*/
public final class StripLineComments
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
private static final String COMMENTS_KEY = "comment";
@@ -34,12 +45,26 @@ public final class StripLineComments
private boolean initialized = false;
- private final Vector comments = new Vector();
-
- private int commentsSize = 0;
+ private Vector comments = new Vector();
private String line = null;
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public StripLineComments() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
+
/**
* Create a new filtered reader.
*
@@ -50,9 +75,9 @@ public final class StripLineComments
}
public final int read() throws IOException {
- if (!initialized) {
+ if (!getInitialized()) {
initialize();
- initialized = true;
+ setInitialized(true);
}
int ch = -1;
@@ -78,6 +103,7 @@ public final class StripLineComments
}
if (line != null) {
+ int commentsSize = comments.size();
for (int i = 0; i < commentsSize; i++) {
String comment = (String) comments.elementAt(i);
if (line.startsWith(comment)) {
@@ -115,12 +141,39 @@ public final class StripLineComments
return n;
}
+ public final void addConfiguredComment(final Comment comment) {
+ comments.addElement(comment.getValue());
+ }
+
+ private void setComments(final Vector comments) {
+ this.comments = comments;
+ }
+
+ private final Vector getComments() {
+ return comments;
+ }
+
+ private final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ private final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ StripLineComments newFilter = new StripLineComments(rdr);
+ newFilter.setComments(getComments());
+ newFilter.setInitialized(true);
+ return newFilter;
+ }
+
/**
* Set Parameters
*/
public final void setParameters(final Parameter[] parameters) {
this.parameters = parameters;
- initialized = false;
+ setInitialized(false);
}
private final void initialize() {
@@ -130,7 +183,18 @@ public final class StripLineComments
comments.addElement(parameters[i].getValue());
}
}
- commentsSize = comments.size();
+ }
+ }
+
+ public static class Comment {
+ private String value;
+
+ public final void setValue(String comment) {
+ value = comment;
+ }
+
+ public final String getValue() {
+ return value;
}
}
}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TabsToSpaces.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TabsToSpaces.java
index 67fc27a17..861b992bf 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TabsToSpaces.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TabsToSpaces.java
@@ -56,7 +56,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
-import java.util.Hashtable;
+import java.io.StringReader;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.Parameterizable;
@@ -66,15 +66,20 @@ import org.apache.tools.ant.types.Parameterizable;
*
* Example Usage:
* =============
- *
- *
+ *
+ * <tabtospaces tablength="8"/>
+ *
+ * Or:
+ *
+ *
+ *
*
*
* @author Magesh Umasankar
*/
public final class TabsToSpaces
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
private static final int DEFAULT_TAB_LENGTH = 8;
@@ -88,6 +93,22 @@ public final class TabsToSpaces
private int spacesRemaining = 0;
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public TabsToSpaces() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
+
/**
* Create a new filtered reader.
*
@@ -101,9 +122,9 @@ public final class TabsToSpaces
* Convert tabs with spaces
*/
public final int read() throws IOException {
- if (!initialized) {
+ if (!getInitialized()) {
initialize();
- initialized = true;
+ setInitialized(true);
}
int ch = -1;
@@ -146,16 +167,39 @@ public final class TabsToSpaces
return n;
}
+ public final void setTablength(final int tabLength) {
+ this.tabLength = tabLength;
+ }
+
+ private final int getTablength() {
+ return tabLength;
+ }
+
+ private final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ private final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ TabsToSpaces newFilter = new TabsToSpaces(rdr);
+ newFilter.setTablength(getTablength());
+ newFilter.setInitialized(true);
+ return newFilter;
+ }
+
/**
* Set Parameters
*/
public final void setParameters(final Parameter[] parameters) {
this.parameters = parameters;
- initialized = false;
+ setInitialized(false);
}
/**
- * Initialize tokens and load the replacee-replacer hashtable.
+ * Initialize tokens
*/
private final void initialize() {
if (parameters != null) {
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TailFilter.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TailFilter.java
index 65a92c7b6..1d32a9566 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TailFilter.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TailFilter.java
@@ -56,6 +56,7 @@ package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.Parameterizable;
@@ -66,15 +67,19 @@ import org.apache.tools.ant.types.Parameterizable;
* Example:
* =======
*
- * <filterreader classname="org.apache.tools.ant.filters.TailFilter">
- * <param name="lines" value="3"/>
+ * <tailfilter lines="3"/>
+ *
+ * Or:
+ *
+ * <filterreader classname="org.apache.tools.ant.filters.TailFilter">
+ * <param name="lines" value="3"/>
* </filterreader>
*
* @author Magesh Umasankar
*/
public final class TailFilter
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
private static final String LINES_KEY = "lines";
@@ -96,6 +101,22 @@ public final class TailFilter
private int bufferPos = 0;
+ /**
+ * This constructor is a dummy constructor and is
+ * not meant to be used by any class other than Ant's
+ * introspection mechanism. This will close the filter
+ * that is created making it useless for further operations.
+ */
+ public TailFilter() {
+ // Dummy constructor to be invoked by Ant's Introspector
+ super(new StringReader(new String()));
+ try {
+ close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
+ }
+
/**
* Create a new filtered reader.
*
@@ -110,9 +131,9 @@ public final class TailFilter
* point. Grow buffer as needed.
*/
public final int read() throws IOException {
- if (!initialized) {
+ if (!getInitialized()) {
initialize();
- initialized = true;
+ setInitialized(true);
}
if (!completedReadAhead) {
@@ -200,19 +221,42 @@ public final class TailFilter
return n;
}
+ public final void setLines(final long lines) {
+ this.lines = lines;
+ }
+
+ private final long getLines() {
+ return lines;
+ }
+
+ private final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ private final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ TailFilter newFilter = new TailFilter(rdr);
+ newFilter.setLines(getLines());
+ newFilter.setInitialized(true);
+ return newFilter;
+ }
+
/**
* Set Parameters
*/
public final void setParameters(final Parameter[] parameters) {
this.parameters = parameters;
- initialized = false;
+ setInitialized(false);
}
private final void initialize() {
if (parameters != null) {
for (int i = 0; i < parameters.length; i++) {
if (LINES_KEY.equals(parameters[i].getName())) {
- lines = new Long(parameters[i].getValue()).longValue();
+ setLines(new Long(parameters[i].getValue()).longValue());
break;
}
}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterReaderSet.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterReaderSet.java
index 5c11d0350..2d3108a01 100644
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterReaderSet.java
+++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterReaderSet.java
@@ -56,6 +56,14 @@ package org.apache.tools.ant.types;
import java.util.Vector;
import org.apache.tools.ant.filters.HeadFilter;
+import org.apache.tools.ant.filters.LineContains;
+import org.apache.tools.ant.filters.PrefixLines;
+import org.apache.tools.ant.filters.ReplaceTokens;
+import org.apache.tools.ant.filters.StripJavaComments;
+import org.apache.tools.ant.filters.StripLineBreaks;
+import org.apache.tools.ant.filters.StripLineComments;
+import org.apache.tools.ant.filters.TabsToSpaces;
+import org.apache.tools.ant.filters.TailFilter;
/**
* Set of FilterReaders
@@ -77,4 +85,39 @@ public final class FilterReaderSet {
public final void addHeadFilter(final HeadFilter headFilter) {
filterReaders.addElement(headFilter);
}
+
+ public final void addLineContains(final LineContains lineContains) {
+ filterReaders.addElement(lineContains);
+ }
+
+ public final void addPrefixLines(final PrefixLines prefixLines) {
+ filterReaders.addElement(prefixLines);
+ }
+
+ public final void addReplaceTokens(final ReplaceTokens replaceTokens) {
+ filterReaders.addElement(replaceTokens);
+ }
+
+ public final void addStripJavaComments(final StripJavaComments
+ stripJavaComments) {
+ filterReaders.addElement(stripJavaComments);
+ }
+
+ public final void addStripLineBreaks(final StripLineBreaks
+ stripLineBreaks) {
+ filterReaders.addElement(stripLineBreaks);
+ }
+
+ public final void addStripLineComments(final StripLineComments
+ stripLineComments) {
+ filterReaders.addElement(stripLineComments);
+ }
+
+ public final void addTabsToSpaces(final TabsToSpaces tabsToSpaces) {
+ filterReaders.addElement(tabsToSpaces);
+ }
+
+ public final void addTailFilter(final TailFilter tailFilter) {
+ filterReaders.addElement(tailFilter);
+ }
}