git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271518 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -60,10 +60,9 @@ import org.apache.tools.ant.types.AntFilterReader; | |||||
| import org.apache.tools.ant.types.FilterReaderSet; | import org.apache.tools.ant.types.FilterReaderSet; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| import org.apache.tools.ant.types.Parameterizable; | import org.apache.tools.ant.types.Parameterizable; | ||||
| import org.apache.tools.ant.util.ChainReaderHelper; | |||||
| import java.io.*; | import java.io.*; | ||||
| import java.lang.reflect.Constructor; | |||||
| import java.lang.reflect.InvocationTargetException; | |||||
| import java.util.Vector; | import java.util.Vector; | ||||
| /** | /** | ||||
| @@ -194,7 +193,12 @@ public final class LoadFile extends Task { | |||||
| instream = new InputStreamReader(bis, encoding); | instream = new InputStreamReader(bis, encoding); | ||||
| } | } | ||||
| String text = processStream(instream, size); | |||||
| ChainReaderHelper crh = new ChainReaderHelper(); | |||||
| crh.setBufferSize(size); | |||||
| crh.setPrimaryReader(instream); | |||||
| crh.setFilterReaderSets(filterReaderSets); | |||||
| String text = crh.processStream(); | |||||
| if(evaluateProperties) { | if(evaluateProperties) { | ||||
| text = project.replaceProperties(text); | text = project.replaceProperties(text); | ||||
| @@ -229,79 +233,6 @@ public final class LoadFile extends Task { | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Process the input by passing it through the reader chain. | |||||
| */ | |||||
| private final String processStream(final Reader inputReader, final int size) | |||||
| throws BuildException, IOException { | |||||
| Reader instream = inputReader; | |||||
| final char[] buffer = new char[size]; | |||||
| final int filterReadersCount = filterReaderSets.size(); | |||||
| final Vector finalFilters = new Vector(); | |||||
| for (int i = 0; i < filterReadersCount; i++) { | |||||
| final FilterReaderSet filterset = | |||||
| (FilterReaderSet) filterReaderSets.elementAt(i); | |||||
| 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); | |||||
| } | |||||
| } | |||||
| final int filtersCount = finalFilters.size(); | |||||
| if (filtersCount > 0) { | |||||
| for (int i = 0; i < filtersCount; i++) { | |||||
| final AntFilterReader filter = | |||||
| (AntFilterReader) finalFilters.elementAt(i); | |||||
| final String className = filter.getClassName(); | |||||
| if (className != null) { | |||||
| try { | |||||
| final Class clazz = Class.forName(className); | |||||
| if (clazz != null) { | |||||
| 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); | |||||
| } | |||||
| } | |||||
| } catch (final ClassNotFoundException cnfe) { | |||||
| throw new BuildException(cnfe, location); | |||||
| } catch (final InstantiationException ie) { | |||||
| throw new BuildException(ie, location); | |||||
| } catch (final IllegalAccessException iae) { | |||||
| throw new BuildException(iae, location); | |||||
| } catch (final InvocationTargetException ite) { | |||||
| throw new BuildException(ite, location); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| int bufferLength = 0; | |||||
| String text = null; | |||||
| while (bufferLength != -1) { | |||||
| bufferLength = instream.read(buffer); | |||||
| if (bufferLength != -1) { | |||||
| if (text == null) { | |||||
| text = new String(buffer, 0, bufferLength); | |||||
| } else { | |||||
| text += new String(buffer, 0, bufferLength); | |||||
| } | |||||
| } | |||||
| } | |||||
| return text; | |||||
| } | |||||
| /** | /** | ||||
| * Add the FilterReaderSet element. | * Add the FilterReaderSet element. | ||||
| */ | */ | ||||
| @@ -60,10 +60,9 @@ import org.apache.tools.ant.types.AntFilterReader; | |||||
| import org.apache.tools.ant.types.FilterReaderSet; | import org.apache.tools.ant.types.FilterReaderSet; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| import org.apache.tools.ant.types.Parameterizable; | import org.apache.tools.ant.types.Parameterizable; | ||||
| import org.apache.tools.ant.util.ChainReaderHelper; | |||||
| import java.io.*; | import java.io.*; | ||||
| import java.lang.reflect.Constructor; | |||||
| import java.lang.reflect.InvocationTargetException; | |||||
| import java.util.Vector; | import java.util.Vector; | ||||
| /** | /** | ||||
| @@ -125,7 +124,12 @@ public final class LoadProperties extends Task { | |||||
| bis = new BufferedInputStream(fis); | bis = new BufferedInputStream(fis); | ||||
| instream = new InputStreamReader(bis); | instream = new InputStreamReader(bis); | ||||
| String text = processStream(instream, size); | |||||
| ChainReaderHelper crh = new ChainReaderHelper(); | |||||
| crh.setBufferSize(size); | |||||
| crh.setPrimaryReader(instream); | |||||
| crh.setFilterReaderSets(filterReaderSets); | |||||
| String text = crh.processStream(); | |||||
| if (!text.endsWith("\n")) { | if (!text.endsWith("\n")) { | ||||
| text = text + "\n"; | text = text + "\n"; | ||||
| } | } | ||||
| @@ -184,79 +188,6 @@ public final class LoadProperties extends Task { | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Process the input by passing it through the reader chain. | |||||
| */ | |||||
| private final String processStream(final Reader inputReader, final int size) | |||||
| throws BuildException, IOException { | |||||
| Reader instream = inputReader; | |||||
| final char[] buffer = new char[size]; | |||||
| final int filterReadersCount = filterReaderSets.size(); | |||||
| final Vector finalFilters = new Vector(); | |||||
| for (int i = 0; i < filterReadersCount; i++) { | |||||
| final FilterReaderSet filterset = | |||||
| (FilterReaderSet) filterReaderSets.elementAt(i); | |||||
| 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); | |||||
| } | |||||
| } | |||||
| final int filtersCount = finalFilters.size(); | |||||
| if (filtersCount > 0) { | |||||
| for (int i = 0; i < filtersCount; i++) { | |||||
| final AntFilterReader filter = | |||||
| (AntFilterReader) finalFilters.elementAt(i); | |||||
| final String className = filter.getClassName(); | |||||
| if (className != null) { | |||||
| try { | |||||
| final Class clazz = Class.forName(className); | |||||
| if (clazz != null) { | |||||
| 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); | |||||
| } | |||||
| } | |||||
| } catch (final ClassNotFoundException cnfe) { | |||||
| throw new BuildException(cnfe, location); | |||||
| } catch (final InstantiationException ie) { | |||||
| throw new BuildException(ie, location); | |||||
| } catch (final IllegalAccessException iae) { | |||||
| throw new BuildException(iae, location); | |||||
| } catch (final InvocationTargetException ite) { | |||||
| throw new BuildException(ite, location); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| int bufferLength = 0; | |||||
| String text = null; | |||||
| while (bufferLength != -1) { | |||||
| bufferLength = instream.read(buffer); | |||||
| if (bufferLength != -1) { | |||||
| if (text == null) { | |||||
| text = new String(buffer, 0, bufferLength); | |||||
| } else { | |||||
| text += new String(buffer, 0, bufferLength); | |||||
| } | |||||
| } | |||||
| } | |||||
| return text; | |||||
| } | |||||
| /** | /** | ||||
| * Add the FilterReaderSet element. | * Add the FilterReaderSet element. | ||||
| */ | */ | ||||
| @@ -0,0 +1,188 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.util; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.types.AntFilterReader; | |||||
| import org.apache.tools.ant.types.FilterReaderSet; | |||||
| import org.apache.tools.ant.types.Parameter; | |||||
| import org.apache.tools.ant.types.Parameterizable; | |||||
| import java.io.*; | |||||
| import java.lang.reflect.Constructor; | |||||
| import java.lang.reflect.InvocationTargetException; | |||||
| import java.util.Vector; | |||||
| /** | |||||
| * Process a FilterReader chain. | |||||
| * | |||||
| * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a> | |||||
| * @created 23 February 2002 | |||||
| */ | |||||
| public final class ChainReaderHelper { | |||||
| /** | |||||
| * The primary reader to which the reader chain is to be attached. | |||||
| */ | |||||
| public Reader primaryReader; | |||||
| /** | |||||
| * The size of the buffer to be used. | |||||
| */ | |||||
| public int bufferSize = 4096; | |||||
| /** | |||||
| * Collection of 'FilterReaderSet's. | |||||
| */ | |||||
| public Vector filterReaderSets = new Vector(); | |||||
| /** | |||||
| * Sets the primary reader | |||||
| */ | |||||
| public final void setPrimaryReader(Reader rdr) { | |||||
| primaryReader = rdr; | |||||
| } | |||||
| /** | |||||
| * Sets the buffer size to be used. Defaults to 4096, | |||||
| * if this method is not invoked. | |||||
| */ | |||||
| public final void setBufferSize(int size) { | |||||
| bufferSize = size; | |||||
| } | |||||
| /** | |||||
| * Sets the collection of filter reader sets | |||||
| */ | |||||
| public final void setFilterReaderSets(Vector frsets) { | |||||
| filterReaderSets = frsets; | |||||
| } | |||||
| /** | |||||
| * Process the reader chain | |||||
| */ | |||||
| public final String processStream() | |||||
| throws BuildException, IOException { | |||||
| if (primaryReader == null) { | |||||
| throw new BuildException("primaryReader must not be null."); | |||||
| } | |||||
| Reader instream = primaryReader; | |||||
| final char[] buffer = new char[bufferSize]; | |||||
| final int filterReadersCount = filterReaderSets.size(); | |||||
| final Vector finalFilters = new Vector(); | |||||
| for (int i = 0; i < filterReadersCount; i++) { | |||||
| final FilterReaderSet filterset = | |||||
| (FilterReaderSet) filterReaderSets.elementAt(i); | |||||
| 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); | |||||
| } | |||||
| } | |||||
| final int filtersCount = finalFilters.size(); | |||||
| if (filtersCount > 0) { | |||||
| for (int i = 0; i < filtersCount; i++) { | |||||
| final AntFilterReader filter = | |||||
| (AntFilterReader) finalFilters.elementAt(i); | |||||
| final String className = filter.getClassName(); | |||||
| if (className != null) { | |||||
| try { | |||||
| final Class clazz = Class.forName(className); | |||||
| if (clazz != null) { | |||||
| 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); | |||||
| } | |||||
| } | |||||
| } 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); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| int bufferLength = 0; | |||||
| String text = null; | |||||
| while (bufferLength != -1) { | |||||
| bufferLength = instream.read(buffer); | |||||
| if (bufferLength != -1) { | |||||
| if (text == null) { | |||||
| text = new String(buffer, 0, bufferLength); | |||||
| } else { | |||||
| text += new String(buffer, 0, bufferLength); | |||||
| } | |||||
| } | |||||
| } | |||||
| return text; | |||||
| } | |||||
| } | |||||