git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270374 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,73 @@ | |||||
| <html> | |||||
| <head> | |||||
| <title>LoadFile</title> | |||||
| </head> | |||||
| <body> | |||||
| <h2><a name="loadfile">LoadFile</a></h2> | |||||
| <h3>Description</h3> | |||||
| <p> | |||||
| 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. | |||||
| </p> | |||||
| <h3>Parameters</h3> | |||||
| <table border="1" cellpadding="2" cellspacing="0"> | |||||
| <tr> | |||||
| <td valign="top"><b>Attribute</b></td> | |||||
| <td valign="top"><b>Description</b></td> | |||||
| <td align="center" valign="top"><b>Required</b></td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">srcFile</td> | |||||
| <td valign="top">source file</td> | |||||
| <td valign="top" align="center">Yes</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">property</td> | |||||
| <td valign="top">property to save to</td> | |||||
| <td valign="top" align="center">Yes</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">encoding</td> | |||||
| <td valign="top">encoding to use when loading the file</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">failonerror</td> | |||||
| <td valign="top">Whether to halt the build on failure</td> | |||||
| <td align="center" valign="top">No, default "true"</td> | |||||
| </tr> | |||||
| </table> | |||||
| <h3>Examples</h3> | |||||
| <pre> <loadfile property="mail.recipients" | |||||
| srcFile="recipients.txt" / > | |||||
| </pre> | |||||
| Load file recipients.txt into property "mail.recipients" | |||||
| <pre> <loadfile property="encoded-file" | |||||
| srcFile="loadfile.xml" | |||||
| encoding="ISO-8859-1" / > | |||||
| </pre> | |||||
| Load a file using the latin-1 encoding | |||||
| <pre> <loadfile | |||||
| property="optional.value" | |||||
| srcFile="optional.txt" | |||||
| failonerror="false" /> | |||||
| </pre> | |||||
| Load a file, don't fail if it is missing (a message is printed, though) | |||||
| <hr> | |||||
| <p align="center">Copyright © 2000,2001 Apache Software Foundation. All rights | |||||
| Reserved.</p> | |||||
| </body> | |||||
| </html> | |||||
| @@ -193,6 +193,11 @@ specified.</p></td> | |||||
| <p><i>The Javadoc2 task is deprecated. Use the Javadoc task | <p><i>The Javadoc2 task is deprecated. Use the Javadoc task | ||||
| instead.</i></p></td> | instead.</i></p></td> | ||||
| </tr> | </tr> | ||||
| <tr valign="top"> | |||||
| <td><a href="loadfile.html">LoadFile</a></td> | |||||
| <td><p>Loads a file into a property</p></td> | |||||
| </tr> | |||||
| <tr valign="top"> | <tr valign="top"> | ||||
| <td><a href="mail.html">Mail</a></td> | <td><a href="mail.html">Mail</a></td> | ||||
| @@ -56,6 +56,7 @@ | |||||
| <a href="CoreTasks/java.html">Java</a><br> | <a href="CoreTasks/java.html">Java</a><br> | ||||
| <a href="CoreTasks/javac.html">Javac</a><br> | <a href="CoreTasks/javac.html">Javac</a><br> | ||||
| <a href="CoreTasks/javadoc.html">Javadoc/<i>Javadoc2</i></a><br> | <a href="CoreTasks/javadoc.html">Javadoc/<i>Javadoc2</i></a><br> | ||||
| <a href="CoreTasks/loadfile.html">LoadFile</a><br> | |||||
| <a href="CoreTasks/mail.html">Mail</a><br> | <a href="CoreTasks/mail.html">Mail</a><br> | ||||
| <a href="CoreTasks/manifest.html">Manifest</a><br> | <a href="CoreTasks/manifest.html">Manifest</a><br> | ||||
| <a href="CoreTasks/mkdir.html">Mkdir</a><br> | <a href="CoreTasks/mkdir.html">Mkdir</a><br> | ||||
| @@ -0,0 +1,53 @@ | |||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||||
| <project name="loadfile-test" basedir="." default="testLoadAFile"> | |||||
| <!-- this is a latin one file containing the UKP £ symbol --> | |||||
| <target name="init"> | |||||
| </target> | |||||
| <target name="testNoSourcefileDefined" depends="init"> | |||||
| <loadfile property="foo" /> | |||||
| </target> | |||||
| <target name="testNoPropertyDefined" | |||||
| depends="init"> | |||||
| <loadfile srcFile="somefile" /> | |||||
| </target> | |||||
| <target name="testNoSourcefilefound" | |||||
| depends="init"> | |||||
| <loadfile property="missing" srcFile="somefile" /> | |||||
| </target> | |||||
| <target name="testFailOnError" | |||||
| depends="init"> | |||||
| <loadfile | |||||
| property="testFailOnError" | |||||
| srcFile="somefile" | |||||
| failonerror="false"/> | |||||
| </target> | |||||
| <target name="testLoadAFile" | |||||
| depends="init"> | |||||
| <echo | |||||
| message="What's it going to be then, eh?" | |||||
| file="loadfile1.tmp" | |||||
| /> | |||||
| <loadfile property="testLoadAFile" srcFile="loadfile1.tmp" /> | |||||
| <echo>${testLoadAFile}</echo> | |||||
| </target> | |||||
| <target name="testLoadAFileEnc" | |||||
| depends="init"> | |||||
| <loadfile property="testLoadAFileEnc" | |||||
| srcFile="loadfile.xml" | |||||
| encoding="ISO-8859-1"/> | |||||
| </target> | |||||
| <target name="cleanup"> | |||||
| <delete file="loadfile1.tmp"/> | |||||
| </target> | |||||
| </project> | |||||
| @@ -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 | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| 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. <p> | |||||
| * | |||||
| * For a list of possible values see <a href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html"> | |||||
| * http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html | |||||
| * </a>.</p> | |||||
| * | |||||
| * @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 | |||||
| } | |||||
| @@ -58,8 +58,12 @@ bunzip2=org.apache.tools.ant.taskdefs.BUnzip2 | |||||
| checksum=org.apache.tools.ant.taskdefs.Checksum | checksum=org.apache.tools.ant.taskdefs.Checksum | ||||
| waitfor=org.apache.tools.ant.taskdefs.WaitFor | waitfor=org.apache.tools.ant.taskdefs.WaitFor | ||||
| input=org.apache.tools.ant.taskdefs.Input | input=org.apache.tools.ant.taskdefs.Input | ||||
| <<<<<<< defaults.properties | |||||
| loadfile=org.apache.tools.ant.taskdefs.LoadFile | |||||
| ======= | |||||
| manifest=org.apache.tools.ant.taskdefs.Manifest | manifest=org.apache.tools.ant.taskdefs.Manifest | ||||
| >>>>>>> 1.100 | |||||
| # optional tasks | # optional tasks | ||||
| script=org.apache.tools.ant.taskdefs.optional.Script | script=org.apache.tools.ant.taskdefs.optional.Script | ||||
| netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC | netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC | ||||
| @@ -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 | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| 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"); | |||||
| } | |||||
| } | |||||