Can't this be done more cleanly by internally wrapping all if/unless to a Condition instance?
Matt On Mon, Jul 30, 2012 at 4:13 PM, <hi...@apache.org> wrote: > Author: hibou > Date: Mon Jul 30 21:13:02 2012 > New Revision: 1367306 > > URL: http://svn.apache.org/viewvc?rev=1367306&view=rev > Log: > Allow Condition as if and unless attributes of targets and extension points > (Java API only) > > Modified: > ant/core/trunk/src/main/org/apache/tools/ant/Target.java > > Modified: ant/core/trunk/src/main/org/apache/tools/ant/Target.java > URL: > http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/Target.java?rev=1367306&r1=1367305&r2=1367306&view=diff > ============================================================================== > --- ant/core/trunk/src/main/org/apache/tools/ant/Target.java (original) > +++ ant/core/trunk/src/main/org/apache/tools/ant/Target.java Mon Jul 30 > 21:13:02 2012 > @@ -26,6 +26,7 @@ import java.util.List; > import java.util.StringTokenizer; > > import org.apache.tools.ant.property.LocalProperties; > +import org.apache.tools.ant.taskdefs.condition.Condition; > > /** > * Class to implement a target object with required parameters. > @@ -45,6 +46,10 @@ public class Target implements TaskConta > /** The "unless" condition to test on execution. */ > private String unlessCondition = ""; > > + private Condition if_; > + > + private Condition unless; > + > /** List of targets this target is dependent on. */ > private List/*<String>*/ dependencies = null; > > @@ -73,6 +78,8 @@ public class Target implements TaskConta > this.name = other.name; > this.ifCondition = other.ifCondition; > this.unlessCondition = other.unlessCondition; > + this.if_ = other.if_; > + this.unless = other.unless; > this.dependencies = other.dependencies; > this.location = other.location; > this.project = other.project; > @@ -293,6 +300,15 @@ public class Target implements TaskConta > } > > /** > + * Same as {@link #setIf(String)} but requires a {@link Condition} > instance > + * > + * @since 1.9 > + */ > + public void setIf(Condition if_) { > + this.if_ = if_; > + } > + > + /** > * Sets the "unless" condition to test on execution. This is the > * name of a property to test for existence - if the property > * is set, the task will not execute. The property goes > @@ -321,6 +337,15 @@ public class Target implements TaskConta > } > > /** > + * Same as {@link #setUnless(String)} but requires a {@link Condition} > instance > + * > + * @since 1.9 > + */ > + public void setUnless(Condition unless) { > + this.unless = unless; > + } > + > + /** > * Sets the description of this target. > * > * @param description The description for this target. > @@ -450,32 +475,48 @@ public class Target implements TaskConta > } > > /** > - * Tests whether or not the "if" condition allows the execution of this > target. > + * Tests whether or not the "if" conditions (via String AND Condition) > + * allows the execution of this target. > * > - * @return whether or not the "if" condition is satisfied. If no > + * @return whether or not both "if" conditions are satisfied. If no > * condition (or an empty condition) has been set, > * <code>true</code> is returned. > * > * @see #setIf(String) > + * @see #setIf(Condition) > */ > private boolean testIfAllows() { > PropertyHelper propertyHelper = > PropertyHelper.getPropertyHelper(getProject()); > Object o = propertyHelper.parseProperties(ifCondition); > - return propertyHelper.testIfCondition(o); > + if (!propertyHelper.testIfCondition(o)) { > + return false; > + } > + if (if_ != null && !if_.eval()) { > + return false; > + } > + return true; > } > > /** > - * Tests whether or not the "unless" condition allows the execution of > this target. > + * Tests whether or not the "unless" conditions (via String AND > Condition) > + * allows the execution of this target. > * > - * @return whether or not the "unless" condition is satisfied. If no > + * @return whether or not both "unless" condition are satisfied. If no > * condition (or an empty condition) has been set, > * <code>true</code> is returned. > * > * @see #setUnless(String) > + * @see #setUnless(Condition) > */ > private boolean testUnlessAllows() { > PropertyHelper propertyHelper = > PropertyHelper.getPropertyHelper(getProject()); > Object o = propertyHelper.parseProperties(unlessCondition); > - return propertyHelper.testUnlessCondition(o); > + if (!propertyHelper.testUnlessCondition(o)) { > + return false; > + } > + if (unless != null && unless.eval()) { > + return false; > + } > + return true; > } > } > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org