git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274575 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -306,8 +306,8 @@ Other changes: | |||
| 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 | |||
| @@ -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 @@ but is really for debugging build files.</p> | |||
| <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/> | |||
| @@ -79,6 +91,14 @@ allow the build to continue.</p> | |||
| <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> | |||
| <hr> | |||
| <p align="center">Copyright © 2002-2003 Apache Software Foundation. All rights | |||
| @@ -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,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.io.Writer; | |||
| 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 @@ public class EchoProperties extends Task { | |||
| */ | |||
| 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 @@ public class EchoProperties extends Task { | |||
| *@param 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 @@ public class EchoProperties extends Task { | |||
| /* 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 @@ public class EchoProperties extends Task { | |||
| } | |||
| } | |||
| 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 @@ public class EchoProperties extends Task { | |||
| 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)) { | |||
| @@ -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 | |||
| @@ -188,6 +188,14 @@ public class EchoPropertiesTest extends BuildFileTest { | |||
| 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")); | |||
| } | |||
| protected Properties loadPropFile(String relativeFilename) | |||
| throws IOException { | |||
| File f = createRelativeFile( relativeFilename ); | |||