mbenson 2004/04/23 08:41:39
Modified: . Tag: ANT_16_BRANCH WHATSNEW
docs/manual/CoreTypes Tag: ANT_16_BRANCH propertyset.html
src/etc/testcases/taskdefs/optional Tag: ANT_16_BRANCH
echoproperties.xml
src/main/org/apache/tools/ant/types Tag: ANT_16_BRANCH
PropertySet.java
src/testcases/org/apache/tools/ant/taskdefs/optional Tag:
ANT_16_BRANCH EchoPropertiesTest.java
Log:
merge <propertyset negate> to 1.6 branch.
Revision Changes Path
No revision
No revision
1.503.2.84 +2 -1 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.503.2.83
retrieving revision 1.503.2.84
diff -u -r1.503.2.83 -r1.503.2.84
--- WHATSNEW 23 Apr 2004 15:32:13 -0000 1.503.2.83
+++ WHATSNEW 23 Apr 2004 15:41:38 -0000 1.503.2.84
@@ -4,7 +4,6 @@
Changes that could break older environments:
--------------------------------------------
-
Fixed bugs:
-----------
@@ -107,6 +106,8 @@
* <nice> task lets you set the priority of the current thread; non-forking
<java> code will inherit this priority in their main thread.
+
+* New attribute "negate" on <propertyset> to invert selection criteria.
Changes from Ant 1.6.0 to Ant 1.6.1
===================================
No revision
No revision
1.2.2.5 +11 -0 ant/docs/manual/CoreTypes/propertyset.html
Index: propertyset.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTypes/propertyset.html,v
retrieving revision 1.2.2.4
retrieving revision 1.2.2.5
diff -u -r1.2.2.4 -r1.2.2.5
--- propertyset.html 9 Feb 2004 22:12:10 -0000 1.2.2.4
+++ propertyset.html 23 Apr 2004 15:41:38 -0000 1.2.2.5
@@ -26,6 +26,14 @@
is used. Default is "<code>true</code>".</td>
<td valign="top" align="center">No</td>
</tr>
+ <tr>
+ <td valign="top">negate</td>
+ <td valign="top">Whether to negate results. If
+ "<code>true</code>", all properties <i>not</i>
+ selected by nested elements will be returned.
+ Default is "<code>false</code>".</td>
+ <td valign="top" align="center">No</td>
+ </tr>
</table>
<h3>Parameters specified as nested elements</h3>
@@ -107,6 +115,9 @@
<p>collects all properties whose name starts with "foo", but
changes the names to start with "bar" instead.</p>
+
+<p>If supplied, the nested mapper will be applied
+subsequent to any negation of matched properties.</p>
<hr>
<p align="center">Copyright © 2003-2004 The Apache Software Foundation.
All rights
No revision
No revision
1.3.2.1 +18 -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.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- echoproperties.xml 14 May 2003 12:40:18 -0000 1.3
+++ echoproperties.xml 23 Apr 2004 15:41:38 -0000 1.3.2.1
@@ -72,6 +72,24 @@
</echoproperties>
</target>
+ <target name="testEchoPrefixAsNegatedPropertyset" depends="setup">
+ <echoproperties destfile="test-prefix.properties">
+ <propertyset negate="true">
+ <propertyref prefix="b."/>
+ </propertyset>
+ </echoproperties>
+ </target>
+
+ <target name="testEchoPrefixAsDoublyNegatedPropertyset" depends="setup">
+ <echoproperties destfile="test-prefix.properties">
+ <propertyset negate="true">
+ <propertyset negate="true">
+ <propertyref prefix="a."/>
+ </propertyset>
+ </propertyset>
+ </echoproperties>
+ </target>
+
<target name="cleanup">
<delete file="test.properties" failonerror="no" />
<delete file="test-prefix.properties" failonerror="no" />
No revision
No revision
1.8.2.5 +40 -30 ant/src/main/org/apache/tools/ant/types/PropertySet.java
Index: PropertySet.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/types/PropertySet.java,v
retrieving revision 1.8.2.4
retrieving revision 1.8.2.5
diff -u -r1.8.2.4 -r1.8.2.5
--- PropertySet.java 9 Mar 2004 17:01:55 -0000 1.8.2.4
+++ PropertySet.java 23 Apr 2004 15:41:38 -0000 1.8.2.5
@@ -18,6 +18,9 @@
package org.apache.tools.ant.types;
import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.HashSet;
+import java.util.Set;
import java.util.Hashtable;
import java.util.Properties;
import java.util.Stack;
@@ -25,6 +28,7 @@
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
+import org.apache.tools.ant.PropertyHelper;
import org.apache.tools.ant.util.FileNameMapper;
import org.apache.tools.ant.util.regexp.RegexpMatcher;
import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
@@ -37,7 +41,8 @@
public class PropertySet extends DataType {
private boolean dynamic = true;
- private Vector cachedNames;
+ private boolean negate = false;
+ private Set cachedNames;
private Vector ptyRefs = new Vector();
private Vector setRefs = new Vector();
private Mapper _mapper;
@@ -145,6 +150,11 @@
this.dynamic = dynamic;
}
+ public void setNegate(boolean negate) {
+ assertNotReference();
+ this.negate = negate;
+ }
+
public boolean getDynamic() {
return isReference() ? getRef().dynamic : dynamic;
}
@@ -154,17 +164,29 @@
}
public Properties getProperties() {
- Vector names = null;
+ Set names = null;
Project prj = getProject();
+ Hashtable props =
+ prj == null ? System.getProperties() : prj.getProperties();
if (getDynamic() || cachedNames == null) {
- names = new Vector(); // :TODO: should be a Set!
+ names = new HashSet();
if (isReference()) {
- getRef().addPropertyNames(names, prj.getProperties());
+ getRef().addPropertyNames(names, props);
} else {
- addPropertyNames(names, prj.getProperties());
+ addPropertyNames(names, props);
+ }
+ // Add this PropertySet's nested PropertySets' property names.
+ for (Enumeration e = setRefs.elements(); e.hasMoreElements();) {
+ PropertySet set = (PropertySet) e.nextElement();
+ names.addAll(set.getProperties().keySet());
+ }
+ if (negate) {
+ //make a copy...
+ HashSet complement = new HashSet(props.keySet());
+ complement.removeAll(names);
+ names = complement;
}
-
if (!getDynamic()) {
cachedNames = names;
}
@@ -178,9 +200,9 @@
mapper = myMapper.getImplementation();
}
Properties properties = new Properties();
- for (Enumeration e = names.elements(); e.hasMoreElements();) {
- String name = (String) e.nextElement();
- String value = prj.getProperty(name);
+ for (Iterator iter = names.iterator(); iter.hasNext();) {
+ String name = (String) iter.next();
+ String value = (String) props.get(name);
if (mapper != null) {
String[] newname = mapper.mapFileName(name);
if (newname != null) {
@@ -193,26 +215,26 @@
}
/**
- * @param names the output vector to fill with the property names
+ * @param names the output Set to fill with the property names
* matching this PropertySet selection criteria.
* @param properties the current Project properties, passed in to
* avoid needless duplication of the Hashtable during recursion.
*/
- private void addPropertyNames(Vector names, Hashtable properties) {
+ private void addPropertyNames(Set names, Hashtable properties) {
Project prj = getProject();
// Add this PropertySet's property names.
for (Enumeration e = ptyRefs.elements(); e.hasMoreElements();) {
PropertyRef ref = (PropertyRef) e.nextElement();
if (ref.name != null) {
- if (prj.getProperty(ref.name) != null) {
- names.addElement(ref.name);
+ if (prj != null && prj.getProperty(ref.name) != null) {
+ names.add(ref.name);
}
} else if (ref.prefix != null) {
for (Enumeration p = properties.keys();
p.hasMoreElements();) {
String name = (String) p.nextElement();
if (name.startsWith(ref.prefix)) {
- names.addElement(name);
+ names.add(name);
}
}
} else if (ref.regex != null) {
@@ -222,37 +244,25 @@
for (Enumeration p = properties.keys();
p.hasMoreElements();) {
String name = (String) p.nextElement();
if (matcher.matches(name)) {
- names.addElement(name);
+ names.add(name);
}
}
} else if (ref.builtin != null) {
- Enumeration e2 = null;
if (ref.builtin.equals(BuiltinPropertySetName.ALL)) {
- e2 = properties.keys();
+ names.addAll(properties.keySet());
} else if
(ref.builtin.equals(BuiltinPropertySetName.SYSTEM)) {
- e2 = System.getProperties().keys();
+ names.addAll(System.getProperties().keySet());
} else if (ref.builtin.equals(BuiltinPropertySetName
.COMMANDLINE)) {
- e2 = getProject().getUserProperties().keys();
+ names.addAll(getProject().getUserProperties().keySet());
} else {
throw new BuildException("Impossible: Invalid builtin "
+ "attribute!");
}
-
- while (e2.hasMoreElements()) {
- names.addElement(e2.nextElement());
- }
-
} else {
throw new BuildException("Impossible: Invalid PropertyRef!");
}
- }
-
- // Add this PropertySet's nested PropertySets' property names.
- for (Enumeration e = setRefs.elements(); e.hasMoreElements();) {
- PropertySet set = (PropertySet) e.nextElement();
- set.addPropertyNames(names, properties);
}
}
No revision
No revision
1.6.2.5 +18 -10
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.6.2.4
retrieving revision 1.6.2.5
diff -u -r1.6.2.4 -r1.6.2.5
--- EchoPropertiesTest.java 9 Mar 2004 17:02:05 -0000 1.6.2.4
+++ EchoPropertiesTest.java 23 Apr 2004 15:41:38 -0000 1.6.2.5
@@ -141,20 +141,28 @@
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"));
+ testEchoPrefixVarious("testEchoPrefix");
}
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"));
+ testEchoPrefixVarious("testEchoPrefixAsPropertyset");
+ }
+
+ public void testEchoPrefixAsNegatedPropertyset() throws Exception {
+ testEchoPrefixVarious("testEchoPrefixAsNegatedPropertyset");
+ }
+
+ public void testEchoPrefixAsDoublyNegatedPropertyset() throws Exception {
+ testEchoPrefixVarious("testEchoPrefixAsDoublyNegatedPropertyset");
+ }
+
+ private void testEchoPrefixVarious(String target) throws Exception {
+ executeTarget(target);
+ 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"));
+ props.getProperty("b.set"));
}
protected Properties loadPropFile(String relativeFilename)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]