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:
    * =======
    *
  + * &lt;headfilter lines="3"/&gt;
  + *
  + * Or:
  + *
    * &lt;filterreader classname="org.apache.tools.ant.filters.HeadFilter"&gt;
    *    &lt;param name="lines" value="3"/&gt;
    * &lt;/filterreader&gt;
  @@ -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]>

Reply via email to