Hi all,
I suppose that there have been a lot of discussion about conditional
structures, but I would like to open another one.
For now, I notice two solutions :
>> solution 1 : ant approach, using if and unless parameters.
<target name="todo" depends="ok,ko"/>
<target name="ok" if="my-property-is-set"/>
<target name="ko" unless="my-property-is-NOT-set"/>
Disadvantages :
- not as simple as it should be
- property evaluation is not possible (or I don't know how to do this)
>> solution 2 : ant-contrib
<if>
<equals arg1="..." arg2="..."/>
</if>
Disadvantages :
- verbose solution
- project still maintain ?
- solution not integrated in the ant project
>> solution 3
I would like to discuss about another solution, based upon
<antcall> et <condition> tasks.
<antcall target="todo">
<condition>
<equals arg1="${val1}" arg2="${val2}"/>
</condition>
</antcall>
Target would be executed if condition succeeded.
Advantages :
+ use an existing task : <antcall> by adding a nested element
=> quiet easy to implement (see attached file)
+ use all <condition> possibilities
What do you think about this idea ?
Best regards,
Benjamin
package net.sourceforge.ant4hg.contrib;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.CallTarget;
import org.apache.tools.ant.taskdefs.condition.Condition;
import org.apache.tools.ant.taskdefs.condition.ConditionBase;
public class CallTarget2 extends CallTarget {
// //////////////////////////////////////////////
// INNER CLASS
// //////////////////////////////////////////////
/**
* @see org.apache.tools.ant.taskdefs.Exit
*/
private static class NestedCondition extends ConditionBase implements Condition {
public boolean eval() {
if (countConditions() != 1) {
throw new BuildException("A single nested condition is required.");
}
return ((Condition) (getConditions().nextElement())).eval();
}
}
// //////////////////////////////////////////////
// ATTRIBUTES
// //////////////////////////////////////////////
/**
* @see org.apache.tools.ant.taskdefs.Exit
*/
private NestedCondition nestedCondition;
/**
* @see org.apache.tools.ant.taskdefs.Exit
*/
public ConditionBase createCondition() {
if (nestedCondition != null) {
throw new BuildException("Only one nested condition is allowed.");
}
nestedCondition = new NestedCondition();
return nestedCondition;
}
// //////////////////////////////////////////////
// CONSTRUCTORS
// //////////////////////////////////////////////
public CallTarget2() {
super();
setTaskName("antcall");
}
// //////////////////////////////////////////////
// OVERRIDEN METHODS
// //////////////////////////////////////////////
public void execute() throws BuildException {
if (!nestedCondition.eval()) {
return;
}
super.execute();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail:
dev-unsubscribe@...
For additional commands, e-mail:
dev-help@...