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; | |||||
} | |||||
} |