« Return to Thread: discussion about conditional structures

discussion about conditional structures

by jamin :: Rate this Message:

Reply to Author | View in Thread

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

 « Return to Thread: discussion about conditional structures