Browse Source

non-string properties

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@557097 13f79535-47bb-0310-9956-ffa450edef68
master
Matthew Jason Benson 18 years ago
parent
commit
bdfee6de49
3 changed files with 86 additions and 34 deletions
  1. +16
    -4
      src/main/org/apache/tools/ant/taskdefs/Available.java
  2. +33
    -18
      src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
  3. +37
    -12
      src/main/org/apache/tools/ant/taskdefs/condition/Equals.java

+ 16
- 4
src/main/org/apache/tools/ant/taskdefs/Available.java View File

@@ -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;


+ 33
- 18
src/main/org/apache/tools/ant/taskdefs/ConditionTask.java View File

@@ -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);
}
}
}

+ 37
- 12
src/main/org/apache/tools/ant/taskdefs/condition/Equals.java View File

@@ -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);
}
}

Loading…
Cancel
Save