Return-Path: Delivered-To: apmail-ant-dev-archive@www.apache.org Received: (qmail 36571 invoked from network); 18 Jan 2005 10:09:45 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 18 Jan 2005 10:09:45 -0000 Received: (qmail 42012 invoked by uid 500); 18 Jan 2005 10:09:40 -0000 Delivered-To: apmail-ant-dev-archive@ant.apache.org Received: (qmail 41942 invoked by uid 500); 18 Jan 2005 10:09:39 -0000 Mailing-List: contact dev-help@ant.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Ant Developers List" Reply-To: "Ant Developers List" Delivered-To: mailing list dev@ant.apache.org Received: (qmail 41922 invoked by uid 500); 18 Jan 2005 10:09:39 -0000 Received: (qmail 41917 invoked by uid 99); 18 Jan 2005 10:09:39 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Tue, 18 Jan 2005 02:09:38 -0800 Received: (qmail 36510 invoked by uid 1539); 18 Jan 2005 10:09:37 -0000 Date: 18 Jan 2005 10:09:37 -0000 Message-ID: <20050118100937.36509.qmail@minotaur.apache.org> From: peterreilly@apache.org To: ant-cvs@apache.org Subject: cvs commit: ant/src/main/org/apache/tools/ant/types PropertySet.java X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N peterreilly 2005/01/18 02:09:37 Modified: src/main/org/apache/tools/ant/types Tag: ANT_16_BRANCH PropertySet.java Log: sync Revision Changes Path No revision No revision 1.8.2.9 +154 -47 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.8 retrieving revision 1.8.2.9 diff -u -r1.8.2.8 -r1.8.2.9 --- PropertySet.java 10 Jan 2005 08:40:52 -0000 1.8.2.8 +++ PropertySet.java 18 Jan 2005 10:09:37 -0000 1.8.2.9 @@ -19,8 +19,10 @@ import java.util.Enumeration; import java.util.Iterator; +import java.util.Map; import java.util.HashSet; import java.util.Set; +import java.util.TreeMap; import java.util.Hashtable; import java.util.Properties; import java.util.Stack; @@ -28,7 +30,6 @@ 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; @@ -45,8 +46,12 @@ private Set cachedNames; private Vector ptyRefs = new Vector(); private Vector setRefs = new Vector(); - private Mapper _mapper; + private Mapper mapper; + /** + * this is a nested class containing a reference to some properties + * and optionally a source of properties. + */ public static class PropertyRef { private int count; @@ -55,25 +60,41 @@ private String prefix; private String builtin; + /** + * Set the name. + * @param name a String value + */ public void setName(String name) { assertValid("name", name); this.name = name; } + /** + * Set the regular expression to use to filter the properties. + * @param regex a regular expression + */ public void setRegex(String regex) { assertValid("regex", regex); this.regex = regex; } + /** + * Set the prefix to use. + * @param prefix a String value + */ public void setPrefix(String prefix) { assertValid("prefix", prefix); this.prefix = prefix; } + /** + * Builtin property names - all, system or commandline. + * @param b an enumerated BuildinPropertySetName value + */ public void setBuiltin(BuiltinPropertySetName b) { - String builtin = b.getValue(); - assertValid("builtin", builtin); - this.builtin = builtin; + String pBuiltIn = b.getValue(); + assertValid("builtin", pBuiltIn); + this.builtin = pBuiltIn; } private void assertValid(String attr, String value) { @@ -87,37 +108,63 @@ } } + /** + * a debug toString() + * @return a string version of this object + */ public String toString() { return "name=" + name + ", regex=" + regex + ", prefix=" + prefix + ", builtin=" + builtin; } - } + } //end nested class + /** + * Allow properties of a particular name in the set. + * @param name the property name to allow + */ public void appendName(String name) { - PropertyRef ref = new PropertyRef(); - ref.setName(name); - addPropertyref(ref); + PropertyRef r = new PropertyRef(); + r.setName(name); + addPropertyref(r); } + /** + * Allow properties whose names match a regex in the set. + * @param regex the regular expression to use + */ public void appendRegex(String regex) { - PropertyRef ref = new PropertyRef(); - ref.setRegex(regex); - addPropertyref(ref); + PropertyRef r = new PropertyRef(); + r.setRegex(regex); + addPropertyref(r); } + /** + * Allow properties whose names start with a prefix in the set. + * @param prefix the prefix to use + */ public void appendPrefix(String prefix) { - PropertyRef ref = new PropertyRef(); - ref.setPrefix(prefix); - addPropertyref(ref); + PropertyRef r = new PropertyRef(); + r.setPrefix(prefix); + addPropertyref(r); } + /** + * Allow builtin (all, system or commandline) properties in the set. + * @param b the type of builtin properties + */ public void appendBuiltin(BuiltinPropertySetName b) { - PropertyRef ref = new PropertyRef(); - ref.setBuiltin(b); - addPropertyref(ref); + PropertyRef r = new PropertyRef(); + r.setBuiltin(b); + addPropertyref(r); } + /** + * set a mapper to change property names + * @param type mapper type + * @param from source pattern + * @param to output pattern + */ public void setMapper(String type, String from, String to) { Mapper mapper = createMapper(); Mapper.MapperType mapperType = new Mapper.MapperType(); @@ -126,23 +173,35 @@ mapper.setTo(to); } + /** + * Add a property reference (nested element) to the references to be used. + * @param ref a property reference. + */ public void addPropertyref(PropertyRef ref) { assertNotReference(); ptyRefs.addElement(ref); } + /** + * Add another property set to this set. + * @param ref another property set + */ public void addPropertyset(PropertySet ref) { assertNotReference(); setRefs.addElement(ref); } + /** + * Create a mapper to map the property names. + * @return a mapper to be configured + */ public Mapper createMapper() { assertNotReference(); - if (_mapper != null) { + if (mapper != null) { throw new BuildException("Too many s!"); } - _mapper = new Mapper(getProject()); - return _mapper; + mapper = new Mapper(getProject()); + return mapper; } /** @@ -154,22 +213,45 @@ createMapper().add(fileNameMapper); } + /** + * Whether to reevaluate the set everytime the set is used. + * Default is true. + * + * @param dynamic if true, reevaluate the property set each time + * the set is used. if false cache the property set + * the first time and use the cached set on subsequent + * occasions. + */ public void setDynamic(boolean dynamic) { assertNotReference(); this.dynamic = dynamic; } + /** + * Whether to negate results. + * If "true", all properties not selected by nested elements will be returned. + * Default is "false" + * @param negate if true, negate the selection criteria + */ public void setNegate(boolean negate) { assertNotReference(); this.negate = negate; } + /** + * Get the dynamic attribute. + * @return true if the property set is to be evalulated each time it is used + */ public boolean getDynamic() { return isReference() ? getRef().dynamic : dynamic; } + /** + * Get the mapper attribute. + * @return the mapper attribute + */ public Mapper getMapper() { - return isReference() ? getRef()._mapper : _mapper; + return isReference() ? getRef().mapper : mapper; } /** @@ -181,20 +263,20 @@ Hashtable ret = new Hashtable(); for (Enumeration e = System.getProperties().propertyNames(); e.hasMoreElements();) { - Object o = e.nextElement(); - if (o instanceof String) { - String name = (String) o; - ret.put(name, System.getProperties().getProperty(name)); - } + String name = (String) e.nextElement(); + ret.put(name, System.getProperties().getProperty(name)); } return ret; } /** * this is the operation to get the existing or recalculated properties. - * @return + * @return the properties for this propertyset */ public Properties getProperties() { + if (isReference()) { + return getRef().getProperties(); + } Set names = null; Project prj = getProject(); Hashtable props = @@ -202,11 +284,7 @@ if (getDynamic() || cachedNames == null) { names = new HashSet(); - if (isReference()) { - getRef().addPropertyNames(names, props); - } else { - addPropertyNames(names, props); - } + addPropertyNames(names, props); // Add this PropertySet's nested PropertySets' property names. for (Enumeration e = setRefs.elements(); e.hasMoreElements();) { PropertySet set = (PropertySet) e.nextElement(); @@ -236,6 +314,7 @@ String name = (String) iter.next(); String value = (String) props.get(name); if (mapper != null) { + //map the names String[] newname = mapper.mapFileName(name); if (newname != null) { name = newname[0]; @@ -257,35 +336,35 @@ // Add this PropertySet's property names. for (Enumeration e = ptyRefs.elements(); e.hasMoreElements();) { - PropertyRef ref = (PropertyRef) e.nextElement(); - if (ref.name != null) { - if (prj != null && prj.getProperty(ref.name) != null) { - names.add(ref.name); + PropertyRef r = (PropertyRef) e.nextElement(); + if (r.name != null) { + if (prj != null && prj.getProperty(r.name) != null) { + names.add(r.name); } - } else if (ref.prefix != null) { + } else if (r.prefix != null) { for (Enumeration p = properties.keys(); p.hasMoreElements();) { String name = (String) p.nextElement(); - if (name.startsWith(ref.prefix)) { + if (name.startsWith(r.prefix)) { names.add(name); } } - } else if (ref.regex != null) { + } else if (r.regex != null) { RegexpMatcherFactory matchMaker = new RegexpMatcherFactory(); RegexpMatcher matcher = matchMaker.newRegexpMatcher(); - matcher.setPattern(ref.regex); + matcher.setPattern(r.regex); for (Enumeration p = properties.keys(); p.hasMoreElements();) { String name = (String) p.nextElement(); if (matcher.matches(name)) { names.add(name); } } - } else if (ref.builtin != null) { + } else if (r.builtin != null) { - if (ref.builtin.equals(BuiltinPropertySetName.ALL)) { + if (r.builtin.equals(BuiltinPropertySetName.ALL)) { names.addAll(properties.keySet()); - } else if (ref.builtin.equals(BuiltinPropertySetName.SYSTEM)) { + } else if (r.builtin.equals(BuiltinPropertySetName.SYSTEM)) { names.addAll(System.getProperties().keySet()); - } else if (ref.builtin.equals(BuiltinPropertySetName + } else if (r.builtin.equals(BuiltinPropertySetName .COMMANDLINE)) { names.addAll(getProject().getUserProperties().keySet()); } else { @@ -300,7 +379,8 @@ /** * Performs the check for circular references and returns the - * referenced FileList. + * referenced PropertySet. + * @return the referenced PropertySet */ protected PropertySet getRef() { if (!isChecked()) { @@ -349,6 +429,11 @@ } noAttributeSet = false; } + + /** + * flag which tracks whether any attribute has been set; used by + * {@link #assertNotReference()} and {@link #setRefid(Reference)} + */ private boolean noAttributeSet = true; /** @@ -358,9 +443,31 @@ static final String ALL = "all"; static final String SYSTEM = "system"; static final String COMMANDLINE = "commandline"; + /** @see EnumeratedAttribute#getValues() */ public String[] getValues() { return new String[] {ALL, SYSTEM, COMMANDLINE}; } } -} // END class PropertySet + /** + * A debug toString. + * This gets a comma separated list of key=value pairs for + * the properties in the set. + * The output order is sorted according to the keys' natural order. + * @return a string rep of this object + */ + public String toString() { + StringBuffer b = new StringBuffer(); + TreeMap sorted = new TreeMap(getProperties()); + for (Iterator i = sorted.entrySet().iterator(); i.hasNext();) { + Map.Entry e = (Map.Entry) i.next(); + if (b.length() != 0) { + b.append(", "); + } + b.append(e.getKey().toString()); + b.append("="); + b.append(e.getValue().toString()); + } + return b.toString(); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org For additional commands, e-mail: dev-help@ant.apache.org