umagesh 02/02/27 10:14:11
Modified:
proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters
HeadFilter.java
proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types
FilterReaderSet.java
proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/util
ChainReaderHelper.java
Added:
proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters
CloneableReader.java
Log:
Provide a mechanism by which filter readers recognized by Ant's core
(FilterreaderSet can have a better syntax.
For example, HeadFilter can be added to filterset as this:
<filterreaderset>
<filterreader classname="org.apache.tools.ant.HeadFilter">
<param name="lines" value="3"/>
</filterreader>
</filterreaderset>
or this:
<filterreaderset>
<headfilter lines="3"/>
</filterreaderset>
Revision Changes Path
1.4 +48 -4
jakarta-ant/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java
Index: HeadFilter.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- HeadFilter.java 24 Feb 2002 04:08:14 -0000 1.3
+++ HeadFilter.java 27 Feb 2002 18:14:11 -0000 1.4
@@ -56,6 +56,7 @@
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,6 +67,10 @@
* Example:
* =======
*
+ * <headfilter lines="3"/>
+ *
+ * Or:
+ *
* <filterreader classname="org.apache.tools.ant.filters.HeadFilter">
* <param name="lines" value="3"/>
* </filterreader>
@@ -74,7 +79,7 @@
*/
public final class HeadFilter
extends FilterReader
- implements Parameterizable
+ implements Parameterizable, CloneableReader
{
private static final String LINES_KEY = "lines";
@@ -89,6 +94,22 @@
private boolean ignoreLineFeed = 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 HeadFilter() {
+ // 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.
*
* @param in a Reader object providing the underlying stream.
@@ -98,9 +119,9 @@
}
public final int read() throws IOException {
- if (!initialized) {
+ if (!getInitialized()) {
initialize();
- initialized = true;
+ setInitialized(true);
}
int ch = -1;
@@ -155,12 +176,35 @@
return n;
}
+ public final void setLines(final long lines) {
+ this.lines = lines;
+ }
+
+ public final long getLines() {
+ return lines;
+ }
+
+ public final void setInitialized(final boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ public final boolean getInitialized() {
+ return initialized;
+ }
+
+ public final Reader clone(final Reader rdr) {
+ HeadFilter newFilter = new HeadFilter(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() {
1.1
jakarta-ant/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/CloneableReader.java
Index: CloneableReader.java
===================================================================
package org.apache.tools.ant.filters;
import java.io.Reader;
public interface CloneableReader {
public Reader clone(Reader rdr);
}
1.2 +6 -0
jakarta-ant/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterReaderSet.java
Index: FilterReaderSet.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterReaderSet.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FilterReaderSet.java 15 Feb 2002 21:50:55 -0000 1.1
+++ FilterReaderSet.java 27 Feb 2002 18:14:11 -0000 1.2
@@ -55,6 +55,8 @@
import java.util.Vector;
+import org.apache.tools.ant.filters.HeadFilter;
+
/**
* Set of FilterReaders
*
@@ -70,5 +72,9 @@
public final Vector getFilterReaders() {
return filterReaders;
+ }
+
+ public final void addHeadFilter(final HeadFilter headFilter) {
+ filterReaders.addElement(headFilter);
}
}
1.4 +54 -40
jakarta-ant/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/util/ChainReaderHelper.java
Index: ChainReaderHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/util/ChainReaderHelper.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ChainReaderHelper.java 24 Feb 2002 04:08:14 -0000 1.3
+++ ChainReaderHelper.java 27 Feb 2002 18:14:11 -0000 1.4
@@ -56,6 +56,7 @@
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
+import org.apache.tools.ant.filters.CloneableReader;
import org.apache.tools.ant.types.AntFilterReader;
import org.apache.tools.ant.types.FilterReaderSet;
import org.apache.tools.ant.types.Path;
@@ -133,9 +134,7 @@
final Vector filterReaders = filterset.getFilterReaders();
final int readerCount = filterReaders.size();
for (int j = 0; j < readerCount; j++) {
- final AntFilterReader afr =
- (AntFilterReader) filterReaders.elementAt(j);
- finalFilters.addElement(afr);
+ finalFilters.addElement(filterReaders.elementAt(j));
}
}
@@ -143,47 +142,62 @@
if (filtersCount > 0) {
for (int i = 0; i < filtersCount; i++) {
- final AntFilterReader filter =
- (AntFilterReader) finalFilters.elementAt(i);
- final String className = filter.getClassName();
- final Path classpath = filter.getClasspath();
- final Project project = filter.getProject();
- if (className != null) {
- try {
- Class clazz = null;
- if (classpath == null) {
- clazz = Class.forName(className);
- } else {
- AntClassLoader al = new AntClassLoader(project,
-
classpath);
- clazz = al.loadClass(className);
- AntClassLoader.initializeClass(clazz);
- }
- if (clazz != null) {
- if (!FilterReader.class.isAssignableFrom(clazz))
{
- throw new BuildException(className +
- " does not extend java.io.FilterReader");
+ Object o = finalFilters.elementAt(i);
+
+ if (o instanceof AntFilterReader) {
+ final AntFilterReader filter = (AntFilterReader)
finalFilters.elementAt(i);
+ final String className = filter.getClassName();
+ final Path classpath = filter.getClasspath();
+ final Project project = filter.getProject();
+ if (className != null) {
+ try {
+ Class clazz = null;
+ if (classpath == null) {
+ clazz = Class.forName(className);
+ } else {
+ AntClassLoader al = new
AntClassLoader(project,
+
classpath);
+ clazz = al.loadClass(className);
+ AntClassLoader.initializeClass(clazz);
}
- final Constructor[] constructors =
- clazz.getConstructors();
- final Reader[] rdr = {instream};
- instream =
- (Reader) constructors[0].newInstance(rdr);
- if
(Parameterizable.class.isAssignableFrom(clazz)) {
- final Parameter[] params =
filter.getParams();
- ((Parameterizable)
- instream).setParameters(params);
+ if (clazz != null) {
+ if
(!FilterReader.class.isAssignableFrom(clazz)) {
+ throw new BuildException(className +
+ " does not extend
java.io.FilterReader");
+ }
+ final Constructor[] constructors =
+ clazz.getConstructors();
+ int j = 0;
+ for (; j < constructors.length; j++) {
+ Class[] types = constructors[j]
+ .getParameterTypes();
+ if (types.length == 1 &&
+
types[0].isAssignableFrom(Reader.class)) {
+ break;
+ }
+ }
+ final Reader[] rdr = {instream};
+ instream =
+ (Reader)
constructors[j].newInstance(rdr);
+ if
(Parameterizable.class.isAssignableFrom(clazz)) {
+ final Parameter[] params =
filter.getParams();
+ ((Parameterizable)
+ instream).setParameters(params);
+ }
}
+ } catch (final ClassNotFoundException cnfe) {
+ throw new BuildException(cnfe);
+ } catch (final InstantiationException ie) {
+ throw new BuildException(ie);
+ } catch (final IllegalAccessException iae) {
+ throw new BuildException(iae);
+ } catch (final InvocationTargetException ite) {
+ throw new BuildException(ite);
}
- } catch (final ClassNotFoundException cnfe) {
- throw new BuildException(cnfe);
- } catch (final InstantiationException ie) {
- throw new BuildException(ie);
- } catch (final IllegalAccessException iae) {
- throw new BuildException(iae);
- } catch (final InvocationTargetException ite) {
- throw new BuildException(ite);
}
+ } else if (o instanceof CloneableReader &&
+ o instanceof Reader) {
+ instream = ((CloneableReader) o).clone(instream);
}
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>