Re: discussion about conditional structures
We've already discussed various schemes
for expanding the conditional execution of targets, most recently by allowing
conditions as top-level children of targets. Check the archives.
| ____________________________________________________________________________________________
|
| Jeffrey E. (Jeff) Care
|
|
| IBM WebSphere Application
Server
|
WAS Release Engineering
|
Benjamin de Dardel <benjamin.dedardel@...>
wrote on 06/22/2009 05:54:32 PM:
> [image removed]
>
> discussion about conditional structures
>
> Benjamin de Dardel
>
> to:
>
> Ant Developers List
>
> 06/22/2009 05:55 PM
>
> Please respond to "Ant Developers List"
>
> 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,
> Benjaminpackage 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@...