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.Parameter; | |||
| import org.apache.tools.ant.types.Parameterizable; | |||
| import org.apache.tools.ant.util.ChainReaderHelper; | |||
| import java.io.*; | |||
| import java.lang.reflect.Constructor; | |||
| import java.lang.reflect.InvocationTargetException; | |||
| import java.util.Vector; | |||
| /** | |||
| @@ -194,7 +193,12 @@ public final class LoadFile extends Task { | |||
| 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) { | |||
| 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. | |||
| */ | |||
| @@ -60,10 +60,9 @@ 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 org.apache.tools.ant.util.ChainReaderHelper; | |||
| import java.io.*; | |||
| import java.lang.reflect.Constructor; | |||
| import java.lang.reflect.InvocationTargetException; | |||
| import java.util.Vector; | |||
| /** | |||
| @@ -125,7 +124,12 @@ public final class LoadProperties extends Task { | |||
| bis = new BufferedInputStream(fis); | |||
| 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")) { | |||
| 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. | |||
| */ | |||
| @@ -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; | |||
| } | |||
| } | |||