stevel 02/02/22 00:29:37
Modified: src/main/org/apache/tools/ant/taskdefs defaults.properties
docs/manual optionaltasklist.html tasksoverview.html
Added: docs/manual/OptionalTasks echoproperties.html
src/main/org/apache/tools/ant/taskdefs/optional
EchoProperties.java
src/etc/testcases/taskdefs/optional echoproperties.xml
src/testcases/org/apache/tools/ant/taskdefs/optional
EchoPropertiesTest.java
Log:
Utility task to list all your current properties along with unit tests, as
written by Matt Albrecht . Added a prefix to save a subset of the properties
for the very silly. Left it in optional.jar although it has no dependencies.
Revision Changes Path
1.109 +1 -0
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties
Index: defaults.properties
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
retrieving revision 1.108
retrieving revision 1.109
diff -u -r1.108 -r1.109
--- defaults.properties 5 Feb 2002 09:32:47 -0000 1.108
+++ defaults.properties 22 Feb 2002 08:29:37 -0000 1.109
@@ -139,6 +139,7 @@
soscheckin=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin
soscheckout=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckout
soslabel=org.apache.tools.ant.taskdefs.optional.sos.SOSLabel
+echoproperties=org.apache.tools.ant.taskdefs.optional.EchoProperties
# deprecated ant tasks (kept for back compatibility)
starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut
1.1 jakarta-ant/docs/manual/OptionalTasks/echoproperties.html
Index: echoproperties.html
===================================================================
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Echoproperties Task</title>
</head>
<body>
<h2><a name="echoproperties">echoproperties</a></h2>
<h3>Description</h3>
<p>Displays all the current properties in the project. The output can be
sent to a file if desired. You can also specify a subset of properties
to save by naming a prefix: only properties starting with this
prefix will be saved. This task can be used as a somewhat contrived
means of returning data from an <tt><ant></tt> invocation,
but is really for debugging build files.</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">destfile</td>
<td valign="top">If specified, the value indicates the name of the
file to send the output of the statement to. The generated output file
is compatible for loading by any Java application as a property file.
If not specified, then the output will go to the Ant log.</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">prefix</td>
<td valign="top">
a prefix which is used to filter the properties
only those properties starting with this prefix will be echoed.
<P>
</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">failonerror</td>
<td valign="top">By default, the "failonerror" attribute is enabled.
If an error occurs while writing the properties to a file, and this
attribute is enabled, then a BuildException will be thrown, causing the
build to fail. If disabled, then IO errors will be reported as a log
statement, and the build will continue without failure from this
task.</td>
<td valign="top" align="center">No</td>
</tr>
</table>
<h3>Examples</h3>
<blockquote><pre>
<echoproperties />
</pre></blockquote>
<p>Report the current properties to the log.</p>
<blockquote><pre>
<echoproperties destfile="my.properties" />
</pre></blockquote>
<p>Report the current properties to the file "my.properties", and will
fail the build if the file could not be created or written to.</p>
<blockquote><pre>
<echoproperties destfile="my.properties" failonerror="false" />
</pre></blockquote>
<p>Report the current properties to the file "my.properties", and will
log a message if the file could not be created or written to, but will still
allow the build to continue.</p>
<blockquote><pre>
<echoproperties prefix="java."/>
</pre></blockquote>
<p>List all properties beginning with "java."</p>
<hr>
<p align="center">Copyright © 2002 Apache Software Foundation. All rights
Reserved.</p>
</body>
</html>
1.1
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java
Index: EchoProperties.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 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 [EMAIL PROTECTED]
*
* 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.optional;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;
import java.util.Properties;
import java.util.Hashtable;
import java.util.Enumeration;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.File;
import java.io.IOException;
import java.io.FileOutputStream;
/**
* Displays all the current properties in the build. The output can be sent
to
* a file if desired. <P>
*
* Attribute "destfile" defines a file to send the properties to. This can be
* processed as a standard property file later. <P>
*
* Attribute "prefix" defines a prefix which is used to filter the properties
* only those properties starting with this prefix will be echoed. <P>
*
* By default, the "failonerror" attribute is enabled. If an error occurs
while
* writing the properties to a file, and this attribute is enabled, then a
* BuildException will be thrown. If disabled, then IO errors will be
reported
* as a log statement, but no error will be thrown. <P>
*
* Examples: <pre>
* <echoproperties />
* </pre> Report the current properties to the log. <P>
*
* <pre>
* <echoproperties destfile="my.properties" />
* </pre> Report the current properties to the file "my.properties", and will
* fail the build if the file could not be created or written to. <P>
*
* <pre>
* <echoproperties destfile="my.properties" failonerror="false"
* prefix="ant" />
* </pre> Report all properties beginning with 'ant' to the file
* "my.properties", and will log a message if the file could not be created
or
* written to, but will still allow the build to continue.
*
[EMAIL PROTECTED] Matt Albrecht <a href="mailto:[EMAIL PROTECTED]">
* [EMAIL PROTECTED]</a>
[EMAIL PROTECTED] 17-Jan-2002
[EMAIL PROTECTED] Ant 1.5
*/
public class EchoProperties extends Task {
/**
* File object pointing to the output file. If this is null, then we
output
* to the project log, not to a file.
*/
private File destfile = null;
/**
* If this is true, then errors generated during file output will become
* build errors, and if false, then such errors will be logged, but not
* thrown.
*/
private boolean failonerror = true;
/**
* prefix string controls which properties to save
*/
private String prefix = null;
/**
* set a file to use for the output
*/
public void setDestfile(File destfile) {
this.destfile = destfile;
}
/**
[EMAIL PROTECTED] failonerror <tt>true</tt> if IO exceptions are
reported as build
* exceptions, or <tt>false</tt> if IO exceptions are ignored.
*/
public void setFailOnError(boolean failonerror) {
this.failonerror = failonerror;
}
/**
[EMAIL PROTECTED] prefix The new prefix value
*/
public void setPrefix(String prefix) {
this.prefix = prefix;
}
/**
* Run the task.
*
[EMAIL PROTECTED] BuildException trouble, probably file IO
*/
public void execute() throws BuildException {
//copy the properties file
Hashtable allProps = project.getProperties();
try {
if (destfile == null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
saveProperties(allProps, baos);
log(baos.toString(), Project.MSG_INFO);
} else {
OutputStream os = new FileOutputStream(this.destfile);
saveProperties(allProps, os);
}
} catch (IOException ioe) {
String message =
"Destfile " + destfile + " could not be written to.";
if (failonerror) {
throw new BuildException(message, ioe,
location);
} else {
log(message, Project.MSG_INFO);
}
}
}
/**
* Send the key/value pairs in the hashtable to the given output stream.
* The output stream will be closed when this method returns.
*
[EMAIL PROTECTED] allProps propfile to save
[EMAIL PROTECTED] os output stream
[EMAIL PROTECTED] IOException trouble
*/
protected void saveProperties(Hashtable allProps, OutputStream os)
throws IOException {
Properties props = new Properties();
Enumeration enum = allProps.keys();
while (enum.hasMoreElements()) {
String name = (String) enum.nextElement();
String value = (String) allProps.get(name);
if (prefix == null || name.indexOf(prefix) == 0 ) {
props.setProperty(name, value);
}
}
try {
props.store(os, "Ant properties");
} finally {
os.close();
}
}
}
1.1
jakarta-ant/src/etc/testcases/taskdefs/optional/echoproperties.xml
Index: echoproperties.xml
===================================================================
<project name="test" default="def" basedir=".">
<target name="def">
</target>
<target name="setup">
<property name="a.set" value="true" />
<property name="b.set" value="false" />
</target>
<target name="testEchoToLog" depends="setup">
<echoproperties />
</target>
<target name="testEchoToBadFile" depends="setup">
<echoproperties destfile="." />
</target>
<target name="testEchoToBadFileFail" depends="setup">
<echoproperties destfile="." failonerror="yes" />
</target>
<target name="testEchoToBadFileNoFail" depends="setup">
<echoproperties destfile="." failonerror="no" />
</target>
<target name="testEchoToGoodFile" depends="setup">
<echoproperties destfile="test.properties" />
</target>
<target name="testEchoToGoodFileFail" depends="setup">
<echoproperties destfile="test.properties" failonerror="yes" />
</target>
<target name="testEchoToGoodFileNoFail" depends="setup">
<echoproperties destfile="test.properties" failonerror="no" />
</target>
<target name="testEchoPrefix" depends="setup">
<echoproperties destfile="test-prefix.properties" prefix="a." />
</target>
<target name="cleanup">
<delete file="test.properties" failonerror="no" />
<delete file="test-prefix.properties" failonerror="no" />
</target>
</project>
1.1
jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java
Index: EchoPropertiesTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-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 [EMAIL PROTECTED]
*
* 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.optional;
import org.apache.tools.ant.BuildFileTest;
import java.io.*;
import java.util.Properties;
/**
* Tests the EchoProperties task.
*
* @author Matt Albrecht <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @created 17-Jan-2002
* @since Ant 1.5
*/
public class EchoPropertiesTest extends BuildFileTest {
private final static String TASKDEFS_DIR =
"src/etc/testcases/taskdefs/optional/";
private static final String GOOD_OUTFILE = "test.properties";
private static final String PREFIX_OUTFILE = "test-prefix.properties";
private static final String BAD_OUTFILE = ".";
public EchoPropertiesTest(String name) {
super(name);
}
public void setUp() {
configureProject(TASKDEFS_DIR + "echoproperties.xml");
project.setProperty( "test.property", "is set" );
}
public void tearDown() {
executeTarget("cleanup");
}
public void testEchoToLog() {
executeTarget( "testEchoToLog" );
String out = getLog();
assertTrue(
"Did not output testEchoToLog.",
out.indexOf( "test.property=is set" ) >= 0 );
}
public void testEchoToBadFile() {
expectBuildExceptionContaining( "testEchoToBadFile",
"outfile is not writeable",
"Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
}
public void testEchoToBadFileFail() {
expectBuildExceptionContaining( "testEchoToBadFileFail",
"outfile is not writeable",
"Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
}
public void testEchoToBadFileNoFail() {
expectLog( "testEchoToBadFileNoFail",
"Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
}
public void testEchoToGoodFile() throws Exception {
executeTarget( "testEchoToGoodFile" );
assertGoodFile();
}
public void testEchoToGoodFileFail() throws Exception {
executeTarget( "testEchoToGoodFileFail" );
assertGoodFile();
}
public void testEchoToGoodFileNoFail() throws Exception {
executeTarget( "testEchoToGoodFileNoFail" );
assertGoodFile();
}
public void testEchoPrefix() throws Exception {
executeTarget( "testEchoPrefix" );
Properties props=loadPropFile(PREFIX_OUTFILE);
// props.list(System.out);
assertEquals("prefix didn't include 'a.set'
property","true",props.getProperty("a.set"));
assertNull("prefix failed to filter out property 'b.set'",
props.getProperty("b.set"));
}
protected Properties loadPropFile(String relativeFilename)
throws IOException {
File f = createRelativeFile( relativeFilename );
Properties props=new Properties();
InputStream in=null;
try {
in=new BufferedInputStream(new FileInputStream(f));
props.load(in);
} finally {
if(in!=null) {
try { in.close(); } catch(IOException e) {}
}
}
return props;
}
protected void assertGoodFile() throws Exception {
File f = createRelativeFile( GOOD_OUTFILE );
assertTrue(
"Did not create "+f.getAbsolutePath(),
f.exists() );
Properties props=loadPropFile(GOOD_OUTFILE);
props.list(System.out);
assertEquals("test property not found ",
"is set",props.getProperty("test.property"));
/*
// read in the file
FileReader fr = new FileReader( f );
try {
BufferedReader br = new BufferedReader( fr );
String read = null;
while ( (read = br.readLine()) != null)
{
if (read.indexOf("test.property=is set") >= 0)
{
// found the property we set - it's good.
return;
}
}
fail( "did not encounter set property in generated file." );
} finally {
try { fr.close(); } catch(IOException e) {}
}
*/
}
protected String toAbsolute( String filename ) {
return createRelativeFile( filename ).getAbsolutePath();
}
protected File createRelativeFile( String filename ) {
if (filename.equals( "." )) {
return getProjectDir();
}
// else
return new File( getProjectDir(), filename );
}
}
1.26 +1 -0 jakarta-ant/docs/manual/optionaltasklist.html
Index: optionaltasklist.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/manual/optionaltasklist.html,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- optionaltasklist.html 20 Feb 2002 01:16:20 -0000 1.25
+++ optionaltasklist.html 22 Feb 2002 08:29:37 -0000 1.26
@@ -20,6 +20,7 @@
<a href="OptionalTasks/ccm.html">Continuus/Synergy Tasks</a><br>
<a href="OptionalTasks/depend.html">Depend</a><br>
<a href="OptionalTasks/ejb.html">EJB Tasks</a><br>
+<a href="OptionalTasks/echoproperties.html">Echoproperties</a><br>
<a href="OptionalTasks/ftp.html">FTP</a><br>
<a href="OptionalTasks/icontract.html">IContract</a><br>
<a href="OptionalTasks/javacc.html">JavaCC</a><br>
1.3 +7 -0 jakarta-ant/docs/manual/tasksoverview.html
Index: tasksoverview.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/manual/tasksoverview.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- tasksoverview.html 20 Feb 2002 01:44:53 -0000 1.2
+++ tasksoverview.html 22 Feb 2002 08:29:37 -0000 1.3
@@ -820,6 +820,13 @@
generalization of <a href="CoreTasks/available.html">Available</a> and
<a href="CoreTasks/uptodate.html">Uptodate</a>.</p></td>
</tr>
+ <tr valign="top">
+ <td nowrap>
+ <a href="OptionalTasks/echoproperties.html">Echoproperties</a><br>
+
+ </td>
+ <td><p>Lists the current properties</p></td>
+ </tr>
<tr valign="top">
<td nowrap><a href="CoreTasks/loadfile.html">LoadFile</a></td>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>