bodewig 2003/05/14 05:40:18
Modified: . WHATSNEW docs/manual/OptionalTasks echoproperties.html src/etc/testcases/taskdefs/optional echoproperties.xml src/testcases/org/apache/tools/ant/taskdefs/optional EchoPropertiesTest.java src/main/org/apache/tools/ant/taskdefs/optional EchoProperties.java Log: Make <echoproperties> support nested <propertyset>s. Revision Changes Path 1.417 +2 -2 ant/WHATSNEW Index: WHATSNEW =================================================================== RCS file: /home/cvs/ant/WHATSNEW,v retrieving revision 1.416 retrieving revision 1.417 diff -u -r1.416 -r1.417 --- WHATSNEW 13 May 2003 14:36:56 -0000 1.416 +++ WHATSNEW 14 May 2003 12:40:17 -0000 1.417 @@ -306,8 +306,8 @@ defaultexcludes task. Bugzilla Report 12700. * There is a new data type <propertyset> that can be used to collect - properties. It is supported by <ant>, <antcall>, <subant>, <java> - and <junit>. + properties. It is supported by <ant>, <antcall>, <subant>, <java>, + <echoproperties> and <junit>. * <concat> can now control the encoding of the output as well and optionally add new-line characters at the end of files that get concatenated but 1.4 +26 -6 ant/docs/manual/OptionalTasks/echoproperties.html Index: echoproperties.html =================================================================== RCS file: /home/cvs/ant/docs/manual/OptionalTasks/echoproperties.html,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- echoproperties.html 14 May 2003 12:28:54 -0000 1.3 +++ echoproperties.html 14 May 2003 12:40:18 -0000 1.4 @@ -9,12 +9,14 @@ <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> + +<p>Displays all the current properties (or a subset of them specified +by a nested <code><propertyset></code>) in the project. The +output can be sent to a file if desired. 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> @@ -59,6 +61,16 @@ <td valign="top" align="center">No</td> </tr> </table> + +<h3>Parameters specified as nested elements</h3> + +<h4>propertyset</h4> + +<p>You can specify subsets of properties to be echoed with <a +href="../CoreTypes/propertyset.html">propertyset</a>s.</p> + +<p><em>since Ant 1.6</em>.</p> + <h3>Examples</h3> <blockquote><pre> <echoproperties/> @@ -77,6 +89,14 @@ allow the build to continue.</p> <blockquote><pre> <echoproperties prefix="java."/> +</pre></blockquote> +<p>List all properties beginning with "java."</p> +<blockquote><pre> + <echoproperties> + <propertyset> + <propertyref prefix="java."/> + </propertyset> + </echoproperties> </pre></blockquote> <p>List all properties beginning with "java."</p> 1.3 +8 -0 ant/src/etc/testcases/taskdefs/optional/echoproperties.xml Index: echoproperties.xml =================================================================== RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/echoproperties.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- echoproperties.xml 29 May 2002 15:24:38 -0000 1.2 +++ echoproperties.xml 14 May 2003 12:40:18 -0000 1.3 @@ -64,6 +64,14 @@ <echoproperties destfile="test-prefix.properties" prefix="a." /> </target> + <target name="testEchoPrefixAsPropertyset" depends="setup"> + <echoproperties destfile="test-prefix.properties"> + <propertyset> + <propertyref prefix="a."/> + </propertyset> + </echoproperties> + </target> + <target name="cleanup"> <delete file="test.properties" failonerror="no" /> <delete file="test-prefix.properties" failonerror="no" /> 1.6 +9 -1 ant/src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java Index: EchoPropertiesTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- EchoPropertiesTest.java 10 Feb 2003 14:14:51 -0000 1.5 +++ EchoPropertiesTest.java 14 May 2003 12:40:18 -0000 1.6 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2000-2002 The Apache Software Foundation. All rights + * Copyright (c) 2000-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -183,6 +183,14 @@ 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")); + } + + public void testEchoPrefixAsPropertyset() throws Exception { + executeTarget( "testEchoPrefixAsPropertyset" ); + Properties props=loadPropFile(PREFIX_OUTFILE); 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")); 1.17 +25 -12 ant/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java Index: EchoProperties.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- EchoProperties.java 10 Feb 2003 14:13:45 -0000 1.16 +++ EchoProperties.java 14 May 2003 12:40:18 -0000 1.17 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2002 The Apache Software Foundation. All rights + * Copyright (c) 2002-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -65,12 +65,14 @@ import java.util.Enumeration; import java.util.Hashtable; import java.util.Properties; +import java.util.Vector; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.EnumeratedAttribute; +import org.apache.tools.ant.types.PropertySet; import org.apache.tools.ant.util.CollectionUtils; import org.apache.tools.ant.util.DOMElementWriter; import org.w3c.dom.Document; @@ -153,11 +155,7 @@ */ private boolean failonerror = true; - /** - * Prefix string controls which properties to save. - */ - private String prefix = null; - + private Vector propertySets = new Vector(); private String format = "text"; @@ -207,9 +205,20 @@ [EMAIL PROTECTED] prefix The new prefix value */ public void setPrefix(String prefix) { - this.prefix = prefix; + PropertySet ps = new PropertySet(); + ps.setProject(getProject()); + ps.appendPrefix(prefix); + addPropertyset(ps); } + /** + * A set of properties to write. + * + * @since Ant 1.6 + */ + public void addPropertyset(PropertySet ps) { + propertySets.addElement(ps); + } public void setFormat(FormatAttribute ea) { format = ea.getValue(); @@ -234,10 +243,10 @@ /* load properties from file if specified, otherwise use Ant's properties */ - if(inFile == null) { + if (inFile == null && propertySets.size() == 0) { // add ant properties CollectionUtils.putAll(allProps, getProject().getProperties()); - } else { + } else if (inFile != null) { if (inFile.exists() && inFile.isDirectory()) { String message = "srcfile is a directory!"; if (failonerror) { @@ -291,6 +300,12 @@ } } + Enumeration enum = propertySets.elements(); + while (enum.hasMoreElements()) { + PropertySet ps = (PropertySet) enum.nextElement(); + CollectionUtils.putAll(allProps, ps.getProperties()); + } + OutputStream os = null; try { if (destfile == null) { @@ -355,9 +370,7 @@ while (enum.hasMoreElements()) { String name = enum.nextElement().toString(); String value = allProps.get(name).toString(); - if (prefix == null || name.indexOf(prefix) == 0) { - props.put(name, value); - } + props.put(name, value); } if ("text".equals(format)) {