diff --git a/docs/manual/CoreTasks/loadfile.html b/docs/manual/CoreTasks/loadfile.html new file mode 100644 index 000000000..a565d6ee9 --- /dev/null +++ b/docs/manual/CoreTasks/loadfile.html @@ -0,0 +1,73 @@ + + +LoadFile + + + + +

LoadFile

+

Description

+

+ Load a text file into a single property. Unless an encoding is specified, + the encoding of the current locale is used. There is no explicit limit + upon the size of the file which can be loaded, but loading very large + files is not something anyone has yet explored. + +

+ +

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionRequired
srcFilesource fileYes
propertyproperty to save toYes
encodingencoding to use when loading the fileNo
failonerrorWhether to halt the build on failureNo, default "true"
+ +

Examples

+
    <loadfile property="mail.recipients"
+      srcFile="recipients.txt" / >
+
+Load file recipients.txt into property "mail.recipients" + +
    <loadfile property="encoded-file"
+      srcFile="loadfile.xml"
+      encoding="ISO-8859-1" / >
+
+Load a file using the latin-1 encoding + +
    <loadfile 
+      property="optional.value" 
+      srcFile="optional.txt" 
+      failonerror="false" />
+
+Load a file, don't fail if it is missing (a message is printed, though) + +
+ +

Copyright © 2000,2001 Apache Software Foundation. All rights +Reserved.

+ + + + diff --git a/docs/manual/CoreTasks/overview.html b/docs/manual/CoreTasks/overview.html index 0358dba3a..7ba385e7a 100644 --- a/docs/manual/CoreTasks/overview.html +++ b/docs/manual/CoreTasks/overview.html @@ -193,6 +193,11 @@ specified.

The Javadoc2 task is deprecated. Use the Javadoc task instead.

+ + + LoadFile +

Loads a file into a property

+ Mail diff --git a/docs/manual/coretasklist.html b/docs/manual/coretasklist.html index d25364fd6..8dfc1fd3b 100644 --- a/docs/manual/coretasklist.html +++ b/docs/manual/coretasklist.html @@ -56,6 +56,7 @@ Java
Javac
Javadoc/Javadoc2
+LoadFile
Mail
Manifest
Mkdir
diff --git a/src/etc/testcases/taskdefs/loadfile.xml b/src/etc/testcases/taskdefs/loadfile.xml new file mode 100644 index 000000000..db1ab49c0 --- /dev/null +++ b/src/etc/testcases/taskdefs/loadfile.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${testLoadAFile} + + + + + + + + + + + diff --git a/src/main/org/apache/tools/ant/taskdefs/LoadFile.java b/src/main/org/apache/tools/ant/taskdefs/LoadFile.java new file mode 100644 index 000000000..f9f483470 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/LoadFile.java @@ -0,0 +1,205 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 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.taskdefs; + +import org.apache.tools.ant.Task; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.ProjectHelper; +import org.apache.tools.ant.types.EnumeratedAttribute; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.io.BufferedInputStream; + +/** + * Load a file into a property + * + * @author Steve Loughran + * @created 10 December 2001 + */ +public class LoadFile extends Task { + + /** + * source file, usually null + */ + private File srcFile = null; + + /** + * what to do when it goes pear-shaped + */ + private boolean failOnError = true; + + /** + * Encoding to use for filenames, defaults to the platform's default + * encoding. + */ + private String encoding = null; + + /** + * name of property + */ + private String property = null; + + + /** + * Encoding to use for filenames, defaults to the platform's default + * encoding.

+ * + * For a list of possible values see + * http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html + * .

+ * + * @param encoding The new Encoding value + */ + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + + /** + * Sets the Property attribute of the LoadFile object + * + * @param property The new Property value + */ + public void setProperty(String property) { + this.property = property; + } + + + /** + * Sets the srcfile attribute. + * + * @param srcFile The new SrcFile value + */ + public void setSrcFile(File srcFile) { + this.srcFile = srcFile; + } + + + /** + * Sets the Failonerror attribute of the LoadFile object + * + * @param fail The new Failonerror value + */ + public void setFailonerror(boolean fail) { + failOnError = fail; + } + + + /** + * read in a source file to a property + * + * @exception BuildException if something goes wrong with the build + */ + public void execute() + throws BuildException { + //validation + if (srcFile == null) { + throw new BuildException("source file not defined"); + } + if (property == null) { + throw new BuildException("output property not defined"); + } + FileInputStream fis = null; + BufferedInputStream bis = null; + InputStreamReader instream = null; + log("loading "+srcFile+" into property "+property,Project.MSG_VERBOSE); + try { + long len = srcFile.length(); + log("file size = "+len,Project.MSG_DEBUG); + //discard most of really big files + if (len > Integer.MAX_VALUE) { + log("this file is far to big to load completely"); + } + int size=(int) len; + char[] buffer = new char[size]; + //open up the file + fis = new FileInputStream(srcFile); + bis = new BufferedInputStream(fis); + if (encoding == null) { + instream = new InputStreamReader(bis); + } + else { + instream = new InputStreamReader(bis, encoding); + } + instream.read(buffer); + String text = new String(buffer); + project.setNewProperty(property, text); + log("loaded "+buffer.length+" characters",Project.MSG_VERBOSE); + log(property+" := "+text,Project.MSG_DEBUG); + + } catch (IOException ioe) { + String message = "Unable to load file: " + ioe.toString(); + if (failOnError) { + throw new BuildException(message, ioe, location); + } + else { + log(message, Project.MSG_ERR); + } + } finally { + try { + if (fis != null) { + fis.close(); + } + } catch (IOException ioex) { + } + } + } + +//end class +} + diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties index 465e9fe18..ebd7502fe 100644 --- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties +++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties @@ -58,8 +58,12 @@ bunzip2=org.apache.tools.ant.taskdefs.BUnzip2 checksum=org.apache.tools.ant.taskdefs.Checksum waitfor=org.apache.tools.ant.taskdefs.WaitFor input=org.apache.tools.ant.taskdefs.Input +<<<<<<< defaults.properties +loadfile=org.apache.tools.ant.taskdefs.LoadFile +======= manifest=org.apache.tools.ant.taskdefs.Manifest +>>>>>>> 1.100 # optional tasks script=org.apache.tools.ant.taskdefs.optional.Script netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC diff --git a/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java b/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java new file mode 100644 index 000000000..c40d58a4a --- /dev/null +++ b/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java @@ -0,0 +1,157 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 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.taskdefs; + +import org.apache.tools.ant.BuildFileTest; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.BuildException; +import java.io.File; + +/** + * Test the load file task + * + * @author Steve Loughran + * @created 10 December 2001 + */ +public class LoadFileTest extends BuildFileTest { + + /** + * Constructor for the LoadFileTest object + * + * @param name Description of Parameter + */ + public LoadFileTest(String name) { + super(name); + } + + + /** + * The JUnit setup method + */ + public void setUp() { + configureProject("src/etc/testcases/taskdefs/loadfile.xml"); + } + + + /** + * The teardown method for JUnit + */ + public void tearDown() { + executeTarget("cleanup"); + } + + + /** + * A unit test for JUnit + */ + public void testNoSourcefileDefined() { + expectBuildException("testNoSourcefileDefined", + "source file not defined"); + } + + + /** + * A unit test for JUnit + */ + public void testNoPropertyDefined() { + expectBuildException("testNoPropertyDefined", + "output property not defined"); + } + + + /** + * A unit test for JUnit + */ + public void testNoSourcefilefound() { + expectBuildExceptionContaining("testNoSourcefilefound", + "File not found", + "Unable to load file"); + } + + /** + * A unit test for JUnit + */ + public void testFailOnError() + throws BuildException { + executeTarget("testFailOnError"); + if(project.getProperty("testFailOnError")!=null) { + fail("property should not have been defined"); + } + } + + + /** + * A unit test for JUnit + */ + public void testLoadAFile() + throws BuildException { + executeTarget("testLoadAFile"); + if(project.getProperty("testLoadAFile").indexOf("eh?")<0) + fail("property is not all in the file"); + } + + + /** + * A unit test for JUnit + */ + public void testLoadAFileEnc() + throws BuildException { + executeTarget("testLoadAFileEnc"); + if(project.getProperty("testLoadAFileEnc").indexOf("\u00a3")<0) + fail("property is not all in the file"); + + } + +} +