git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@386065 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -43,6 +43,10 @@ public class ConditionTask extends ConditionBase { | |||||
| private String value = "true"; | private String value = "true"; | ||||
| private String alternative = null; | private String alternative = null; | ||||
| public ConditionTask() { | |||||
| super("condition"); | |||||
| } | |||||
| /** | /** | ||||
| * The name of the property to set. Required. | * The name of the property to set. Required. | ||||
| * @param p the name of the property | * @param p the name of the property | ||||
| @@ -81,11 +85,12 @@ public class ConditionTask extends ConditionBase { | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| if (countConditions() > 1) { | if (countConditions() > 1) { | ||||
| throw new BuildException("You must not nest more than one " | throw new BuildException("You must not nest more than one " | ||||
| + "condition into <condition>"); | |||||
| + "condition into " | |||||
| + getTaskName()); | |||||
| } | } | ||||
| if (countConditions() < 1) { | if (countConditions() < 1) { | ||||
| throw new BuildException("You must nest a condition into " | throw new BuildException("You must nest a condition into " | ||||
| + "<condition>"); | |||||
| + getTaskName()); | |||||
| } | } | ||||
| if (property == null) { | if (property == null) { | ||||
| throw new BuildException("The property attribute is required."); | throw new BuildException("The property attribute is required."); | ||||
| @@ -19,6 +19,7 @@ package org.apache.tools.ant.taskdefs; | |||||
| import java.util.Hashtable; | import java.util.Hashtable; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | |||||
| import org.apache.tools.ant.taskdefs.condition.Condition; | import org.apache.tools.ant.taskdefs.condition.Condition; | ||||
| import org.apache.tools.ant.taskdefs.condition.ConditionBase; | import org.apache.tools.ant.taskdefs.condition.ConditionBase; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| @@ -42,6 +43,8 @@ import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| * The maxwaitunit and checkeveryunit are allowed to have the following values: | * The maxwaitunit and checkeveryunit are allowed to have the following values: | ||||
| * millisecond, second, minute, hour, day and week. The default is millisecond. | * millisecond, second, minute, hour, day and week. The default is millisecond. | ||||
| * | * | ||||
| * For programmatic use/subclassing, there are two methods that may be overrridden, | |||||
| * <code>processSuccess</code> and <code>processTimeout</code> | |||||
| * @since Ant 1.5 | * @since Ant 1.5 | ||||
| * | * | ||||
| * @ant.task category="control" | * @ant.task category="control" | ||||
| @@ -55,6 +58,10 @@ public class WaitFor extends ConditionBase { | |||||
| private long checkEveryMultiplier = 1L; | private long checkEveryMultiplier = 1L; | ||||
| private String timeoutProperty; | private String timeoutProperty; | ||||
| public WaitFor() { | |||||
| super("waitfor"); | |||||
| } | |||||
| /** | /** | ||||
| * Set the maximum length of time to wait. | * Set the maximum length of time to wait. | ||||
| * @param time a <code>long</code> value | * @param time a <code>long</code> value | ||||
| @@ -103,11 +110,12 @@ public class WaitFor extends ConditionBase { | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| if (countConditions() > 1) { | if (countConditions() > 1) { | ||||
| throw new BuildException("You must not nest more than one " | throw new BuildException("You must not nest more than one " | ||||
| + "condition into <waitfor>"); | |||||
| + "condition into " | |||||
| + getTaskName()); | |||||
| } | } | ||||
| if (countConditions() < 1) { | if (countConditions() < 1) { | ||||
| throw new BuildException("You must nest a condition into " | throw new BuildException("You must nest a condition into " | ||||
| + "<waitfor>"); | |||||
| + getTaskName()); | |||||
| } | } | ||||
| Condition c = (Condition) getConditions().nextElement(); | Condition c = (Condition) getConditions().nextElement(); | ||||
| @@ -121,6 +129,7 @@ public class WaitFor extends ConditionBase { | |||||
| while (System.currentTimeMillis() < end) { | while (System.currentTimeMillis() < end) { | ||||
| if (c.eval()) { | if (c.eval()) { | ||||
| processSuccess(); | |||||
| return; | return; | ||||
| } | } | ||||
| try { | try { | ||||
| @@ -130,15 +139,36 @@ public class WaitFor extends ConditionBase { | |||||
| } | } | ||||
| } | } | ||||
| if (timeoutProperty != null) { | |||||
| getProject().setNewProperty(timeoutProperty, "true"); | |||||
| } | |||||
| processTimeout(); | |||||
| } finally { | } finally { | ||||
| maxWaitMillis = savedMaxWaitMillis; | maxWaitMillis = savedMaxWaitMillis; | ||||
| checkEveryMillis = savedCheckEveryMillis; | checkEveryMillis = savedCheckEveryMillis; | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Actions to be taken on a successful waitfor. | |||||
| * This is an override point. The base implementation does nothing. | |||||
| * @since Ant1.7 | |||||
| */ | |||||
| protected void processSuccess() { | |||||
| log(getTaskName()+": condition was met", Project.MSG_VERBOSE); | |||||
| } | |||||
| /** | |||||
| * Actions to be taken on an unsuccessful wait. | |||||
| * This is an override point. It is where the timeout processing takes place. | |||||
| * The base implementation sets the timeoutproperty if there was a timeout | |||||
| * and the property was defined. | |||||
| * @since Ant1.7 | |||||
| */ | |||||
| protected void processTimeout() { | |||||
| log(getTaskName() +": timeout", Project.MSG_VERBOSE); | |||||
| if (timeoutProperty != null) { | |||||
| getProject().setNewProperty(timeoutProperty, "true"); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * The enumeration of units: | * The enumeration of units: | ||||
| * millisecond, second, minute, hour, day, week | * millisecond, second, minute, hour, day, week | ||||
| @@ -32,8 +32,35 @@ import org.apache.tools.ant.taskdefs.UpToDate; | |||||
| * @since Ant 1.4 | * @since Ant 1.4 | ||||
| */ | */ | ||||
| public abstract class ConditionBase extends ProjectComponent { | public abstract class ConditionBase extends ProjectComponent { | ||||
| /** | |||||
| * name of the component | |||||
| */ | |||||
| private String taskName="condition"; | |||||
| /** | |||||
| * | |||||
| */ | |||||
| private Vector conditions = new Vector(); | private Vector conditions = new Vector(); | ||||
| /** | |||||
| * simple constructor. | |||||
| */ | |||||
| protected ConditionBase() { | |||||
| taskName = "component"; | |||||
| } | |||||
| /** | |||||
| * constructor that takes the name of the task | |||||
| * in the task name | |||||
| * @param taskName | |||||
| * @since Ant1.7 | |||||
| */ | |||||
| protected ConditionBase(String taskName) { | |||||
| this.taskName = taskName; | |||||
| } | |||||
| /** | /** | ||||
| * Count the conditions. | * Count the conditions. | ||||
| * | * | ||||
| @@ -54,6 +81,27 @@ public abstract class ConditionBase extends ProjectComponent { | |||||
| return conditions.elements(); | return conditions.elements(); | ||||
| } | } | ||||
| /** | |||||
| * Sets the name to use in logging messages. | |||||
| * | |||||
| * @param name The name to use in logging messages. | |||||
| * Should not be <code>null</code>. | |||||
| * @since Ant 1.7 | |||||
| */ | |||||
| public void setTaskName(String name) { | |||||
| this.taskName = name; | |||||
| } | |||||
| /** | |||||
| * Returns the name to use in logging messages. | |||||
| * | |||||
| * @return the name to use in logging messages. | |||||
| * @since Ant 1.7 | |||||
| */ | |||||
| public String getTaskName() { | |||||
| return taskName; | |||||
| } | |||||
| /** | /** | ||||
| * Add an <available> condition. | * Add an <available> condition. | ||||
| * @param a an available condition | * @param a an available condition | ||||
| @@ -216,6 +264,7 @@ public abstract class ConditionBase extends ProjectComponent { | |||||
| /** | /** | ||||
| * Add an <typefound> condition. | * Add an <typefound> condition. | ||||
| * @param test a TypeFound condition | * @param test a TypeFound condition | ||||
| * @since Ant 1.7 | |||||
| */ | */ | ||||
| public void addTypeFound(TypeFound test) { | public void addTypeFound(TypeFound test) { | ||||
| conditions.addElement(test); | conditions.addElement(test); | ||||
| @@ -242,6 +291,7 @@ public abstract class ConditionBase extends ProjectComponent { | |||||
| * Add an <isreachable> condition. | * Add an <isreachable> condition. | ||||
| * | * | ||||
| * @param test the condition | * @param test the condition | ||||
| * @since Ant 1.7 | |||||
| */ | */ | ||||
| public void addIsReachable(IsReachable test) { | public void addIsReachable(IsReachable test) { | ||||
| conditions.addElement(test); | conditions.addElement(test); | ||||
| @@ -251,6 +301,7 @@ public abstract class ConditionBase extends ProjectComponent { | |||||
| * Add an <issigned> condition. | * Add an <issigned> condition. | ||||
| * | * | ||||
| * @param test the condition | * @param test the condition | ||||
| * @since Ant 1.7 | |||||
| */ | */ | ||||
| public void addIsSigned(IsSigned test) { | public void addIsSigned(IsSigned test) { | ||||
| conditions.addElement(test); | conditions.addElement(test); | ||||
| @@ -260,6 +311,7 @@ public abstract class ConditionBase extends ProjectComponent { | |||||
| * Add an <parsersupports> condition. | * Add an <parsersupports> condition. | ||||
| * | * | ||||
| * @param test the condition | * @param test the condition | ||||
| * @since Ant 1.7 | |||||
| */ | */ | ||||
| public void addParserSupports(ParserSupports test) { | public void addParserSupports(ParserSupports test) { | ||||
| conditions.addElement(test); | conditions.addElement(test); | ||||
| @@ -269,6 +321,7 @@ public abstract class ConditionBase extends ProjectComponent { | |||||
| * Add a <ResourcesMatch> condition. | * Add a <ResourcesMatch> condition. | ||||
| * | * | ||||
| * @param test the condition | * @param test the condition | ||||
| * @since Ant 1.7 | |||||
| */ | */ | ||||
| public void addResourcesMatch(ResourcesMatch test) { | public void addResourcesMatch(ResourcesMatch test) { | ||||
| conditions.addElement(test); | conditions.addElement(test); | ||||
| @@ -279,6 +332,7 @@ public abstract class ConditionBase extends ProjectComponent { | |||||
| * Add an <xor> condition. | * Add an <xor> condition. | ||||
| * | * | ||||
| * @param test the condition | * @param test the condition | ||||
| * @since Ant 1.7 | |||||
| */ | */ | ||||
| public void addXor(Xor test) { | public void addXor(Xor test) { | ||||
| conditions.addElement(test); | conditions.addElement(test); | ||||