diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java b/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java new file mode 100644 index 000000000..583e10cbb --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java @@ -0,0 +1,67 @@ +package org.apache.tools.ant.taskdefs.condition; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; + +public class AntVersion implements Condition { + + private String atLeast = null; + private String exactly = null; + + public boolean eval() throws BuildException { + validate(); + String actual = getVersion(); + if (null != atLeast) { + + if (Float.valueOf(actual).compareTo(Float.valueOf(atLeast)) >= 0) { + return true; + } else { + return false; + } + } + if (null != exactly) { + if (Float.valueOf(actual).compareTo(Float.valueOf(exactly)) == 0) { + return true; + } else { + return false; + } + } + //default + return false; + } + + private void validate() throws BuildException { + if (atLeast != null && exactly != null) { + throw new BuildException("Only one of atleast or exactly may be set."); + } + if (null == atLeast && null == exactly) { + throw new BuildException("One of atleast or exactly must be set."); + } + } + + private String getVersion() { + Project p = new Project(); + p.init(); + String versionString = p.getProperty("ant.version"); + String version = versionString.substring(versionString.indexOf("Ant version")+12, + versionString.indexOf("compiled on")-1); + version = version.replaceAll("alpha",""); + return version; + } + + public String getAtLeast() { + return atLeast; + } + + public void setAtLeast(String atLeast) { + this.atLeast = atLeast; + } + + public String getExactly() { + return exactly; + } + + public void setExactly(String exactly) { + this.exactly = exactly; + } +} \ No newline at end of file diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java b/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java index 137ba6e55..92db4b16d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java +++ b/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java @@ -32,25 +32,25 @@ import org.apache.tools.ant.taskdefs.UpToDate; * @since Ant 1.4 */ public abstract class ConditionBase extends ProjectComponent { - - + + /** * name of the component */ private String taskName="condition"; - + /** * */ private Vector conditions = new Vector(); - + /** * simple constructor. */ protected ConditionBase() { taskName = "component"; } - + /** * constructor that takes the name of the task * in the task name @@ -60,7 +60,7 @@ public abstract class ConditionBase extends ProjectComponent { protected ConditionBase(String taskName) { this.taskName = taskName; } - + /** * Count the conditions. * @@ -70,7 +70,7 @@ public abstract class ConditionBase extends ProjectComponent { protected int countConditions() { return conditions.size(); } - + /** * Iterate through all conditions. * @@ -80,7 +80,7 @@ public abstract class ConditionBase extends ProjectComponent { protected final Enumeration getConditions() { return conditions.elements(); } - + /** * Sets the name to use in logging messages. * @@ -91,7 +91,7 @@ public abstract class ConditionBase extends ProjectComponent { public void setTaskName(String name) { this.taskName = name; } - + /** * Returns the name to use in logging messages. * @@ -101,7 +101,7 @@ public abstract class ConditionBase extends ProjectComponent { public String getTaskName() { return taskName; } - + /** * Add an <available> condition. * @param a an available condition @@ -110,7 +110,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addAvailable(Available a) { conditions.addElement(a); } - + /** * Add an <checksum> condition. * @@ -120,7 +120,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addChecksum(Checksum c) { conditions.addElement(c); } - + /** * Add an <uptodate> condition. * @@ -130,7 +130,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addUptodate(UpToDate u) { conditions.addElement(u); } - + /** * Add an <not> condition "container". * @@ -140,7 +140,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addNot(Not n) { conditions.addElement(n); } - + /** * Add an <and> condition "container". * @@ -150,7 +150,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addAnd(And a) { conditions.addElement(a); } - + /** * Add an <or> condition "container". * @@ -160,7 +160,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addOr(Or o) { conditions.addElement(o); } - + /** * Add an <equals> condition. * @@ -170,7 +170,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addEquals(Equals e) { conditions.addElement(e); } - + /** * Add an <os> condition. * @@ -180,7 +180,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addOs(Os o) { conditions.addElement(o); } - + /** * Add an <isset> condition. * @@ -190,7 +190,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsSet(IsSet i) { conditions.addElement(i); } - + /** * Add an <http> condition. * @@ -200,7 +200,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addHttp(Http h) { conditions.addElement(h); } - + /** * Add a <socket> condition. * @@ -210,7 +210,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addSocket(Socket s) { conditions.addElement(s); } - + /** * Add a <filesmatch> condition. * @@ -220,7 +220,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addFilesMatch(FilesMatch test) { conditions.addElement(test); } - + /** * Add a <contains> condition. * @@ -230,7 +230,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addContains(Contains test) { conditions.addElement(test); } - + /** * Add a <istrue> condition. * @@ -240,7 +240,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsTrue(IsTrue test) { conditions.addElement(test); } - + /** * Add a <isfalse> condition. * @@ -250,7 +250,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsFalse(IsFalse test) { conditions.addElement(test); } - + /** * Add an <isreference> condition. * @@ -260,7 +260,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsReference(IsReference i) { conditions.addElement(i); } - + /** * Add an <typefound> condition. * @param test a TypeFound condition @@ -269,7 +269,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addTypeFound(TypeFound test) { conditions.addElement(test); } - + /** * Add an <isfailure> condition. * @@ -278,7 +278,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsFailure(IsFailure test) { conditions.addElement(test); } - + /** * Add an <isfileselected> condition. * @param test the condition @@ -286,7 +286,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsFileSelected(IsFileSelected test) { conditions.addElement(test); } - + /** * Add an <isreachable> condition. * @@ -296,7 +296,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsReachable(IsReachable test) { conditions.addElement(test); } - + /** * Add an <issigned> condition. * @@ -306,7 +306,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addIsSigned(IsSigned test) { conditions.addElement(test); } - + /** * Add an <parsersupports> condition. * @@ -316,7 +316,7 @@ public abstract class ConditionBase extends ProjectComponent { public void addParserSupports(ParserSupports test) { conditions.addElement(test); } - + /** * Add a <ResourcesMatch> condition. * @@ -326,8 +326,8 @@ public abstract class ConditionBase extends ProjectComponent { public void addResourcesMatch(ResourcesMatch test) { conditions.addElement(test); } - - + + /** * Add an <xor> condition. * @@ -337,6 +337,17 @@ public abstract class ConditionBase extends ProjectComponent { public void addXor(Xor test) { conditions.addElement(test); } + + /** + * Add an <antversion> condition. + * + * @param test the condition + * @since Ant 1.7 + */ + public void addAntVersion(AntVersion test) { + conditions.addElement(test); + } + /** * Add an arbitrary condition * @param c a condition diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml b/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml index 689b2a703..3eee13cbe 100644 --- a/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml +++ b/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml @@ -47,4 +47,5 @@ + \ No newline at end of file