I much prefer the earlier proposal -- but if that one's just too controversial, I think this one is at least better than not having any way to determine the actual value of a property.
Diane --- Jose Alberto Fernandez <[EMAIL PROTECTED]> wrote: > Ok, Here is the <case> taks I proposed in my previous e-mail. > It provides a declarative way to set properties based on the value of > others: > > <case property="prop.name" > > <when value="value1" property="prop.name.value1" /> > <when value="value2" property="prop.name.value2" /> > <else property="prop.name.noneoftheabove" value="none" /> > </case> > > <else> is optional and its value attribute is optional and defaults to > "true". > > > Hope this can be added to 1.2 as to have all the basic functionality > right > there in core. > > Jose Alberto > > ATTACHMENT part 2 application/octet-stream name=Jose Alberto Fernandez.vcf > Index: src/main/org/apache/tools/ant/taskdefs/Case.java > =================================================================== > RCS file: Case.java > diff -N Case.java > --- /dev/null Tue Oct 10 13:48:25 2000 > +++ Case.java Tue Oct 10 13:48:26 2000 > @@ -0,0 +1,169 @@ > +/* > + * The Apache Software License, Version 1.1 > + * > + * Copyright (c) 1999 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", "Tomcat", 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; > + > +import java.io.*; > +import java.util.*; > +import org.apache.tools.ant.*; > +import org.apache.tools.ant.types.*; > + > +/** > + * Will set one of the given properties depending on the result of > testing > + * the value of another property. > + * > + * <!ELEMENT case (when*, else) > > + * <!ATTLIST case property CDATA #REQUIRED > The name of the property > to test > + * <!ELEMENT when EMPTY > > + * <!ATTLIST when value CDATA #REQUIRED > The value to compare and set > prop. > + * <!ATTLIST when property CDATA #REQUIRED > The name of the property > to set > + * <!ELEMENT else EMPTY > > + * <!ATTLIST else property CDATA #REQUIRED > The name of the property > to set otherwise > + * <!ATTLIST else value CDATA #IMPLIED > The value to set; default > "true". > + * > + * @author Jose Alberto Fernandez <a > href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> > + */ > + > +public class Case extends Task { > + > + public class When { > + private String property; > + private String value; > + > + public void setProperty(String name) { > + property = name; > + } > + > + public String getProperty() { > + return property; > + } > + > + public void setValue(String val) { > + value = val; > + } > + > + public String getValue() { > + return value; > + } > + > + public boolean tryCase(String caseValue) throws BuildException { > + if (property == null) > + throw new BuildException("Property attribute is mandatory"); > + > + if (value == null) > + throw new BuildException("Value attribute is mandatory"); > + > + if (!value.equals(caseValue)) return false; > + > + if (getProject().getProperty(property) == null) { > + getProject().setProperty(property, value); > + } else { > + log("Override ignored for " + property, Project.MSG_VERBOSE); > + } > + return true; > + } > + > + public void doElse() throws BuildException { > + if (property == null) > + throw new BuildException("Property attribute is mandatory"); > + > + String elseValue = (value == null) ? "true" : value; > + > + if (getProject().getProperty(property) == null) { > + getProject().setProperty(property, elseValue); > + } else { > + log("Override ignored for " + property, Project.MSG_VERBOSE); > + } > + } > + } > + > + private String caseProperty; > + private Vector whenList = new Vector(); > + private When elseCase = null; > + > + public When createWhen() throws BuildException { > + When w = new When(); > + whenList.addElement(w); > + return w; > + } > + > + public When createElse() throws BuildException { > + if (elseCase != null) > + throw new BuildException("Only one else element allowed per > case"); > + > + return (elseCase = new When()); > + } > + > + public void setProperty(String property) { > + this.caseProperty = property; > + } > + > + public void execute() throws BuildException { > + if (caseProperty == null) { > + throw new BuildException("property attribute is required", > + location); > + } > + > + String caseValue = getProject().getProperty(caseProperty); > + > + for (Enumeration e = whenList.elements(); e.hasMoreElements(); > ) { > + When w = (When)e.nextElement(); > + if (w.tryCase(caseValue)) return; > + } > + > + if (elseCase != null) > + elseCase.doElse(); > + } > + > +} > Index: src/main/org/apache/tools/ant/taskdefs/defaults.properties > =================================================================== > RCS file: > /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v > retrieving revision 1.46 > diff -u -r1.46 defaults.properties > --- src/main/org/apache/tools/ant/taskdefs/defaults.properties > 2000/10/06 10:54:09 1.46 > +++ src/main/org/apache/tools/ant/taskdefs/defaults.properties > 2000/10/10 20:48:26 > @@ -42,6 +42,7 @@ > fail=org.apache.tools.ant.taskdefs.Exit > war=org.apache.tools.ant.taskdefs.War > uptodate=org.apache.tools.ant.taskdefs.UpToDate > +case=org.apache.tools.ant.taskdefs.Case > > # optional tasks > script=org.apache.tools.ant.taskdefs.optional.Script > ===== ([EMAIL PROTECTED]) __________________________________________________ Do You Yahoo!? Get Yahoo! Mail - Free email you can access from anywhere! http://mail.yahoo.com/
