From a225264f50200b37db98b16d0f8f83f5db84de6c Mon Sep 17 00:00:00 2001
From: Steve Loughran
Date: Tue, 25 Dec 2001 06:14:40 +0000
Subject: [PATCH] new loadfile task
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270374 13f79535-47bb-0310-9956-ffa450edef68
---
docs/manual/CoreTasks/loadfile.html | 73 +++++++
docs/manual/CoreTasks/overview.html | 5 +
docs/manual/coretasklist.html | 1 +
src/etc/testcases/taskdefs/loadfile.xml | 53 +++++
.../apache/tools/ant/taskdefs/LoadFile.java | 205 ++++++++++++++++++
.../tools/ant/taskdefs/defaults.properties | 4 +
.../tools/ant/taskdefs/LoadFileTest.java | 157 ++++++++++++++
7 files changed, 498 insertions(+)
create mode 100644 docs/manual/CoreTasks/loadfile.html
create mode 100644 src/etc/testcases/taskdefs/loadfile.xml
create mode 100644 src/main/org/apache/tools/ant/taskdefs/LoadFile.java
create mode 100644 src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java
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
+
+
+
+
+
+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
+
+
+ Attribute |
+ Description |
+ Required |
+
+
+ srcFile |
+ source file |
+ Yes |
+
+
+ property |
+ property to save to |
+ Yes |
+
+
+ encoding |
+ encoding to use when loading the file |
+ No |
+
+
+ failonerror |
+ Whether to halt the build on failure |
+ No, 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");
+
+ }
+
+}
+