-----Original Message-----
From: Steve Cohen
Sent: Fri 3/8/2002 6:54 AM
To: Ant Users List; Ant Users List; [EMAIL PROTECTED]
Cc: 
Subject: RE: How to conditionally add params to an <antcall>

(sending this on to devel as well, since it is becoming a devel-like issue).

Thanks, Diane, you're the best.  I guess I'll implement something on these 
lines, since I do use 1.5.

However, unfortunately, I oversimplified the problem.  My original problem was 
hard enough, but this is worse.  What I'd really like to do is conditionally 
specify parameters within the call to a task, not an antcall.


Thus:



  <stcheckout URL="STARTEAM:49201/Aproject/AView"
            username="auser"
            password="secret"
            rootlocalfolder="C:\dev\buildtest\co"
            forced="true" 
     <if isset lbl>
     label = "${lbl}"  
            </if>
    
  />

Well, that ain't gonna happen.  You can't nest conditionals within attribute 
blocks.  As the author of the stcheckout task, I suppose I could rewrite it to 
accept nested conditional elements, and I may yet do that.  

But here's a more ambitious idea, bacause I think this concept might be more 
generally useful:  what if Ant had a way to specify that if the value of a task 
attribute were undefined, ANT WOULDN'T PROCESS THE ATTRIBUTE, instead it would 
strip the attribute out of the task call.

So this then becomes something like this:

  <stcheckout URL="STARTEAM:49201/Aproject/AView"
            username="auser"
            password="secret"
            rootlocalfolder="C:\dev\buildtest\co"
            forced="true" 
     label = "$${lbl}"  
 
  />
meaning

"If ${lbl} is not defined no label attribute gets passed to the task."

I think this might offer vast potential to write more flexible scripts without 
having to copy similar looking code into multiple if-then-else blocks.  Imagine 
the combinatorial mess if two or three attributes in a task were needed to be 
made conditionally.  There are many tasks that allow a large number of optional 
attributes.  This would make using them easier.

Steve

-----Original Message-----
From: Diane Holt [mailto:[EMAIL PROTECTED]
Sent: Thu 3/7/2002 7:55 PM
To: Ant Users List
Cc: 
Subject: Re: How to conditionally add params to an <antcall>

--- "Tenchi-kun (Elliott)" <[EMAIL PROTECTED]> wrote:
>   <target name="Target1.A" if="kung">
>     <antcall target="Target1">
>       <param name="foo" value="${foo}" />
>       <param name="kung" value="fu" />
>     </antcall>
>   </target>
>   <target name="Target1.B" unless="kung">
>     <antcall target="Target1">
>     <param name="foo" value="${foo}" />
>     </antcall>
>   </target>

The drawback to doing it this way is that there's no real connection
between the two targets (other than that they both test on the same
property). In other words, you'd need to call them both independently.

If you want to go with two targets, it'd probably be better to have one
target that depends on the alternative, which, if it runs, sets a property
that the dependent target tests on:
  <target name="callTarget1" depends="callT1WithKung"
          unless="antcall.done">
    <antcall target="target1">
      <param name="foo" value = "bar"/>
    </antcall>
  </target>
  <target name="callT1WithKung" if="keyProp">
    <antcall target="target1">
      <param name="foo" value = "bar"/>
      <param name="kung" value = "fu"/>
    </antcall>
    <property name="antcall.done" value="true"/>
  </target>

Alternatively, you could go with the ant-contrib <if> task:
  <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
  <target name="callTarget1">
    <if>
      <isset property="keyProp"/>
      <then>
        <antcall target="target1">
          <param name="foo" value = "bar"/>
          <param name="kung" value = "fu"/>
        </antcall>
      </then>
      <else>
        <antcall target="target1">
          <param name="foo" value = "bar"/>
        </antcall>
      </else>
    </if>
  </target>

Note: condition <isset> is only available with 1.5alpha; to use this
approach with 1.4.1 use <equals> with 'arg2="$$keyProp"' (and reverse the
logic).

I've just picked up all the ant-contrib tasks today and put them in a jar,
so if you'd like them, let me know.

Diane

=====
([EMAIL PROTECTED])



__________________________________________________
Do You Yahoo!?
Try FREE Yahoo! Mail - the world's greatest free email!
http://mail.yahoo.com/

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>





Reply via email to