git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@557097 13f79535-47bb-0310-9956-ffa450edef68master
@@ -22,6 +22,7 @@ import java.io.File; | |||
import org.apache.tools.ant.AntClassLoader; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.PropertyHelper; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.taskdefs.condition.Condition; | |||
import org.apache.tools.ant.types.EnumeratedAttribute; | |||
@@ -50,7 +51,7 @@ public class Available extends Task implements Condition { | |||
private FileDir type; | |||
private Path classpath; | |||
private AntClassLoader loader; | |||
private String value = "true"; | |||
private Object value = "true"; | |||
private boolean isTask = false; | |||
private boolean ignoreSystemclasses = false; | |||
private boolean searchParents = false; | |||
@@ -136,10 +137,20 @@ public class Available extends Task implements Condition { | |||
* | |||
* @param value the value to be given. | |||
*/ | |||
public void setValue(String value) { | |||
public void setValue(Object value) { | |||
this.value = value; | |||
} | |||
/** | |||
* Set the value to be given to the property if the desired resource is | |||
* available. | |||
* | |||
* @param value the value to be given. | |||
*/ | |||
public void setValue(String value) { | |||
setValue((Object) value); | |||
} | |||
/** | |||
* Set a classname of a class which must be available to set the given | |||
* property. | |||
@@ -223,7 +234,8 @@ public class Available extends Task implements Condition { | |||
isTask = true; | |||
try { | |||
if (eval()) { | |||
String oldvalue = getProject().getProperty(property); | |||
PropertyHelper ph = PropertyHelper.getPropertyHelper(getProject()); | |||
Object oldvalue = ph.getProperty(property); | |||
if (null != oldvalue && !oldvalue.equals(value)) { | |||
log("DEPRECATED - <available> used to override an existing" | |||
+ " property." | |||
@@ -234,7 +246,7 @@ public class Available extends Task implements Condition { | |||
} | |||
// NB: this makes use of Project#setProperty rather than Project#setNewProperty | |||
// due to backwards compatiblity reasons | |||
getProject().setProperty(property, value); | |||
ph.setProperty(property, value, true); | |||
} | |||
} finally { | |||
isTask = false; | |||
@@ -15,11 +15,11 @@ | |||
* limitations under the License. | |||
* | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.PropertyHelper; | |||
import org.apache.tools.ant.taskdefs.condition.Condition; | |||
import org.apache.tools.ant.taskdefs.condition.ConditionBase; | |||
@@ -40,8 +40,8 @@ import org.apache.tools.ant.taskdefs.condition.ConditionBase; | |||
public class ConditionTask extends ConditionBase { | |||
private String property = null; | |||
private String value = "true"; | |||
private String alternative = null; | |||
private Object value = "true"; | |||
private Object alternative = null; | |||
/** | |||
* Constructor, names this task "condition". | |||
@@ -59,6 +59,16 @@ public class ConditionTask extends ConditionBase { | |||
property = p; | |||
} | |||
/** | |||
* The value for the property to set, if condition evaluates to true. | |||
* Defaults to "true". | |||
* @param v the (Object) value of the property | |||
* @since Ant 1.8 | |||
*/ | |||
public void setValue(Object value) { | |||
this.value = value; | |||
} | |||
/** | |||
* The value for the property to set, if condition evaluates to true. | |||
* Defaults to "true". | |||
@@ -66,7 +76,17 @@ public class ConditionTask extends ConditionBase { | |||
* @since Ant 1.4 | |||
*/ | |||
public void setValue(String v) { | |||
value = v; | |||
setValue((Object) v); | |||
} | |||
/** | |||
* The value for the property to set, if condition evaluates to false. | |||
* If this attribute is not specified, the property will not be set. | |||
* @param e the alternate value of the property. | |||
* @since Ant 1.8 | |||
*/ | |||
public void setElse(Object alt) { | |||
alternative = alt; | |||
} | |||
/** | |||
@@ -76,7 +96,7 @@ public class ConditionTask extends ConditionBase { | |||
* @since Ant 1.6.3 | |||
*/ | |||
public void setElse(String e) { | |||
alternative = e; | |||
setElse((Object) e); | |||
} | |||
/** | |||
@@ -87,29 +107,24 @@ public class ConditionTask extends ConditionBase { | |||
*/ | |||
public void execute() throws BuildException { | |||
if (countConditions() > 1) { | |||
throw new BuildException("You must not nest more than one " | |||
+ "condition into <" | |||
+ getTaskName() + ">"); | |||
throw new BuildException("You must not nest more than one condition into <" | |||
+ getTaskName() + ">"); | |||
} | |||
if (countConditions() < 1) { | |||
throw new BuildException("You must nest a condition into <" | |||
+ getTaskName() + ">"); | |||
throw new BuildException("You must nest a condition into <" + getTaskName() + ">"); | |||
} | |||
if (property == null) { | |||
throw new BuildException("The property attribute is required."); | |||
} | |||
Condition c = (Condition) getConditions().nextElement(); | |||
if (c.eval()) { | |||
log("Condition true; setting " + property + " to " + value, | |||
Project.MSG_DEBUG); | |||
getProject().setNewProperty(property, value); | |||
log("Condition true; setting " + property + " to " + value, Project.MSG_DEBUG); | |||
PropertyHelper.getPropertyHelper(getProject()).setNewProperty(property, value); | |||
} else if (alternative != null) { | |||
log("Condition false; setting " + property + " to " + alternative, | |||
Project.MSG_DEBUG); | |||
getProject().setNewProperty(property, alternative); | |||
log("Condition false; setting " + property + " to " + alternative, Project.MSG_DEBUG); | |||
PropertyHelper.getPropertyHelper(getProject()).setNewProperty(property, alternative); | |||
} else { | |||
log("Condition false; not setting " + property, | |||
Project.MSG_DEBUG); | |||
log("Condition false; not setting " + property, Project.MSG_DEBUG); | |||
} | |||
} | |||
} |
@@ -21,15 +21,27 @@ package org.apache.tools.ant.taskdefs.condition; | |||
import org.apache.tools.ant.BuildException; | |||
/** | |||
* Simple String comparison condition. | |||
* Simple comparison condition. | |||
* | |||
* @since Ant 1.4 | |||
*/ | |||
public class Equals implements Condition { | |||
private static final int REQUIRED = 1 | 2; | |||
private String arg1, arg2; | |||
private Object arg1, arg2; | |||
private boolean trim = false; | |||
private boolean caseSensitive = true; | |||
private int args; | |||
/** | |||
* Set the first argument | |||
* @param arg1 | |||
* @since Ant 1.8 | |||
*/ | |||
public void setArg1(Object arg1) { | |||
this.arg1 = arg1; | |||
args |= 1; | |||
} | |||
/** | |||
* Set the first string | |||
@@ -37,7 +49,17 @@ public class Equals implements Condition { | |||
* @param a1 the first string | |||
*/ | |||
public void setArg1(String a1) { | |||
arg1 = a1; | |||
setArg1((Object) a1); | |||
} | |||
/** | |||
* Set the second argument | |||
* @param arg2 | |||
* @since Ant 1.8 | |||
*/ | |||
public void setArg2(Object arg2) { | |||
this.arg2 = arg2; | |||
args |= 2; | |||
} | |||
/** | |||
@@ -46,7 +68,7 @@ public class Equals implements Condition { | |||
* @param a2 the second string | |||
*/ | |||
public void setArg2(String a2) { | |||
arg2 = a2; | |||
setArg2((Object) a2); | |||
} | |||
/** | |||
@@ -73,16 +95,19 @@ public class Equals implements Condition { | |||
* @exception BuildException if the attributes are not set correctly | |||
*/ | |||
public boolean eval() throws BuildException { | |||
if (arg1 == null || arg2 == null) { | |||
throw new BuildException("both arg1 and arg2 are required in " | |||
+ "equals"); | |||
if ((args & REQUIRED) != REQUIRED) { | |||
throw new BuildException("both arg1 and arg2 are required in equals"); | |||
} | |||
if (trim) { | |||
arg1 = arg1.trim(); | |||
arg2 = arg2.trim(); | |||
if (arg1 instanceof String && arg2 instanceof String) { | |||
String s1 = (String) arg1; | |||
String s2 = (String) arg2; | |||
if (trim) { | |||
s1 = s1.trim(); | |||
s2 = s2.trim(); | |||
} | |||
return caseSensitive ? s1.equals(s2) : s1.equalsIgnoreCase(s2); | |||
} | |||
return caseSensitive ? arg1.equals(arg2) : arg1.equalsIgnoreCase(arg2); | |||
return arg1 == arg2 || arg1 != null && arg1.equals(arg2); | |||
} | |||
} |