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 | |||
instead.</i></p></td> | |||
</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"> | |||
<td><a href="mail.html">Mail</a></td> | |||
@@ -56,6 +56,7 @@ | |||
<a href="CoreTasks/java.html">Java</a><br> | |||
<a href="CoreTasks/javac.html">Javac</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/manifest.html">Manifest</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 | |||
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 | |||
@@ -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"); | |||
} | |||
} | |||