diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StringInputStream.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StringInputStream.java new file mode 100644 index 000000000..abfc50491 --- /dev/null +++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StringInputStream.java @@ -0,0 +1,115 @@ +/* + * 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 + * . + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; + +/** + * Wrap a String as an InputStream + * + * @author Magesh Umasankar + * @created 20 February 2002 + */ +public class StringInputStream + extends InputStream +{ + /** Source string is stored as a StringReader */ + private StringReader in; + + /** + * Compose a stream from a String + */ + public StringInputStream(String source) { + in = new StringReader(source); + } + + /** + * Read from the Stringreader + */ + public int read() throws IOException { + return in.read(); + } + + /** + * Close the Stringreader + */ + public void close() throws IOException { + in.close(); + } + + /** + * Mark the read limit of the StringReader + */ + public synchronized void mark(final int limit) { + try { + in.mark(limit); + } catch (IOException ioe) { + throw new RuntimeException(ioe.getMessage()); + } + } + + /** + * Resetthe StringReader + */ + public synchronized void reset() throws IOException { + in.reset(); + } + + public boolean markSupported() { + return true; + } +} + diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java index 0306dc548..e3cd0ae7f 100644 --- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java +++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java @@ -57,9 +57,12 @@ import org.apache.tools.ant.Task; import org.apache.tools.ant.Project; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.types.FilterChain; +import org.apache.tools.ant.filters.StringInputStream; import org.apache.tools.ant.filters.util.ChainReaderHelper; import java.io.*; +import java.util.Enumeration; +import java.util.Properties; import java.util.Vector; /** @@ -131,42 +134,20 @@ public final class LoadProperties extends Task { text = text + "\n"; } - int index = 0; - if (text != null) { - while (index != -1) { - int oldIndex = index; - index = text.indexOf("\n", oldIndex); - if (index != -1) { - String line = text.substring(oldIndex, index); - if (line.endsWith("\r")) { - line = line.substring(0, line.length() - 1); - } - int equalIndex = line.indexOf("="); - int spaceIndex = line.indexOf(" "); - int sepIndex = -1; - - if (equalIndex != -1 || spaceIndex != -1) { - if (equalIndex == -1) { - sepIndex = spaceIndex; - } else if (spaceIndex == -1) { - sepIndex = equalIndex; - } else { - sepIndex = Math.min(spaceIndex, equalIndex); - } - } - - if (sepIndex != -1) { - String key = line.substring(0, sepIndex); - String value = line.substring(sepIndex + 1); - if (value != null && value.trim().length() > 0) { - project.setNewProperty(key, value); - } - } - - ++index; + StringInputStream sis = new StringInputStream(text); + Properties props = new Properties(); + props.load(sis); + Enumeration e = props.keys(); + while (e.hasMoreElements()) { + String key = (String) e.nextElement(); + String value = props.getProperty(key); + if (key != null && value != null + && value.trim().length() > 0) { + project.setNewProperty(key, value); } } + sis.close(); } } catch (final IOException ioe) {