Okay, the 'Omit_Optional_Partx' stuff works okay now that each of those targets are in the 'buildall'. Ant apparently considers running them but only actually executes the ones that should run, based on whether their checkbox was selected in the AntForm.

However, there is still one BIG problem. Despite the fact that I've edited those constants successfully before I run the main program that generates the document - I even check that the switches are changed by displaying the Constants class via a 'concat' task just before I execute the main program - the changes to the Constants file ARE IGNORED. In other words, even though I've edited the Constants via the 'replaceregexp' tasks and the 'replaceregexp' tasks say that the changed file was saved, the program apparently "sees" an unchanged version of the file. I've tried it several times and the main program always includes all of the optional parts, even when I check the omit buttons for some or all of the optional parts. However, when I set the values of the switches via the AntForm but then run the main program as a Java application from within Eclipse, rather than from Ant, it works perfectly and omits exactly what it should omit.

In other words, if I use the Ant script to do the full build and indicate in the AntForm that any or all of the optional parts should be omitted, the 'omit' tasks appear to do exactly what they are supposed to do and 'concat' confirms that the Constants class has been edited correctly BUT, the main program sees an UNCHANGED version of the Constants class and omits NOTHING.

Has anyone seen this kind of behaviour before? If so, is there anything I can do about this? Or is this approach to omitting parts of my document unworkable? I'm guessing that there is some kind of synchronization issue here: despite the fact that the Constants file has been edited, the main program sees only the unedited version of the class for some reason.

Hmmm. Would it be better for me to put the 'omit' tasks in the 'depends' parameter for the main program rather than putting them in the main 'buildall' target?? Would that work better?

--
Rhino



Patrick Martin wrote:
Hello,

Indeed, if your 'Omit_Optional_Partx'  targets are not part of any
depends attribute, they will not get called.
You should probably have something like:

<target name="buildall" depends="verify_switches, Omit_Optional_Part1,
Omit_Optional_Part2, Omit_Optional_Part3">
...
</target>
<target name="verify_switches" description="Let the user choose which
content to omit.">
...
</target>
<target name="Omit_Optional_Part1" description="Omit optional part 1"
if="omit.optional.part1">
...
</target>
<target name="Omit_Optional_Part2" description="Omit optional part 2"
if="omit.optional.part2">
...
</target>
<target name="Omit_Optional_Part3" description="Omit optional part 3"
if="omit.optional.part3">
...
</target>

Rgds,

Patrick

On Thu, Feb 25, 2010 at 6:43 PM, Rhino <rhi...@sympatico.ca> wrote:
Thank you, Patrick, for your helpful suggestion. I've changed to a
booleanProperty. Unfortunately, my script still doesn't work. The
'verify_switches' target now looks like the following and everything else is
the same:

<!--   Let the user choose to show or hide specific items. -->
<target name="verify_switches" description="Let the user choose which
content to omit.">
  <antform title="Choose Information Which Will Not Be Displayed">
      <label>Use the checkboxes to control which of the following content is
shown. Choose Abort to cancel the build.</label>
      <booleanProperty label="Omit Optional Part 1"
property="omit.optional.part1"/>
      <booleanProperty label="Omit Optional Part 2"
property="omit.optional.part2"/>
      <booleanProperty label="Omit Optional Part 3"
property="omit.optional.part3"/>
      <controlbar>
          <button label="Abort" target="abort2" type="cancel"/>
          <button label="Ok" type="ok"/>
          </controlbar>
  </antform>
</target>

When I run the script with -debug and -verbose in effect and check only the
middle checkbox from the AntForm, it indicates:

  Overriding previous definition of property "omit.optional.part2"

However, the 'Omit_Optional_Part2' task is NOT executed. Am I using the
'depends' or 'if' parameters incorrectly? Also, why does it say that the
previous definition of omit.optional.part2 is being overridden? I thought I
was _creating_ that property as the AntForm was being executed but that
wording suggests that it already existed and just had its value changed.

As I said in my earlier note, I am VERY rusty with Ant. I fear that I am not
remembering the proper use of 'depends' and 'if'. Or do I need to put the
'Omit_Optional_Partx' targets in the 'buildall' target and then rely on the
depends/if to bypass those targets if the property was not set in tne
AntForm?

I think we're on the right track here but I just need a little more
information in order to get this working correctly.
--
Rhino


Patrick Martin wrote:
Hello,

You probably want to use a booleanProperty instead of a
checkSelectionProperty.

The checkSelectionProperty allows to select multiple values (you use
it only for one). It always set the property (even if empty), so your
<target if=""> statements will get executed as they test the property
existence and not value.
You could still go with checkSelectionProperty, using an antcontrib
<for> or <foreach> to loop on the result list.
But it might be easier to just go with booleanProperty.

Rgds,

Patrick

On Thu, Feb 25, 2010 at 12:41 AM, Rhino <rhi...@sympatico.ca> wrote:

I was reasonably comfortable with Ant a few years ago but haven't touched
it
in quite a while so I need a bit of a refresher. I've tried looking in
the
manua but it always seems to answer only part of the question so I
thought
I'd try here.

Among the things that my Ant script needs to do is write a specific
document. That document has three optional parts, each of which the
person
running the script may choose to write or omit. I'm leaning toward using
an
Ant form with a checkSelectionProperty for each of the three optional
parts.

The relevant bit of my script is:


=====================================================================================
<!--   Let the user choose to show or hide specific items. -->
<target name="verify_switches" description="Let the user choose which
content to omit.">
 <antform title="Choose Information Which Will Not Be Displayed">
     <label>Use the checkboxes to control which of the following content
is
shown. Choose Abort to cancel the build.</label>
     <checkSelectionProperty label="" property="omit.optional.part1"
values="Omit Optional Part 1"/>
     <checkSelectionProperty label="" property="omit.optional.part2"
values="Omit Optional Part 2"/>
     <checkSelectionProperty label="" property="omit.optional.part3"
values="Omit Optional Part 3"/>
     <controlbar>
         <button label="Abort" target="abort2" type="cancel"/>
         <button label="Ok" type="ok"/>
         </controlbar>
 </antform>
</target>

<target name="Omit_Optional_Part1" description="Omit optional part 1."
if="omit.optional.part1">
 <replaceregexp file="${baz.src}\${baz.pkg}\ResumeConstants.java"
     match="^[\s]*public static final boolean
SHOW_OPTIONAL_PART1[\s]*=[\s]*([^;]+);[\s]*$"
     replace="    public static final boolean SHOW_OPTIONAL_PART1 =
false;"
     byline="true"/>
</target>
            <target name="Omit_Optional_Part2" description="Omit optional
part 2." if="omit.optional.part2">
 <replaceregexp file="${baz.src}\${baz.pkg}\ResumeConstants.java"
     match="^[\s]*public static final boolean
SHOW_OPTIONAL_PART2[\s]*=[\s]*([^;]+);[\s]*$"
     replace="    public static final boolean SHOW_OPTIONAL_PART2 =
false;"
     byline="true"/>
</target>
                <target name="Omit_Optional_Part3" description="Omit
optional part 3." if="omit.optional.part3">
 <replaceregexp file="${baz.src}\${baz.pkg}\ResumeConstants.java"
     match="^[\s]*public static final boolean
SHOW_OPTIONAL_PART3[\s]*=[\s]*([^;]+);[\s]*$"
     replace="    public static final boolean SHOW_OPTIONAL_PART3 =
false;"
     byline="true"/>
</target>
                <target name="abort2" description="Display a message that
the build was cancelled.">
 <fail message="The user chose not to proceed with the build."/>
</target>


=====================================================================================

The "verify_switches" target is part of the "depends" on my 'buildall'
target.

What I'm TRYING to do is get the form to display three separate
checkboxes.
Each checkbox identifies a different one of the three optional parts of
the
document. The user puts a checkmark beside each of the optional parts
that
he wants to OMIT in the document; if he doesn't put a checkmark beside a
given part, that part will be written in the document. For each checkbox
that is checked, a new property is created

Then, the other three targets, Omit_Optional_Part1, Omit_Optional_Part2,
and
Omit_Optional_Part3 are supposed to be invoked but ONLY if the relevant
checkbox was checked on the AntForm. The three "omit" targets simply edit
a
class containing constants and change the value of one boolean each from
true, the default, to false. In other words, if the user chooses to omit
part 1 from the document, the "Omit_Optional_Part1" target changes a
constant named SHOW_OPTIONAL_PART1 from true to false. And so on for the
other two "optional" targets.

Unfortunately, this code doesn't work. While the AntForm displays just
fine,
it doesn't seem to be creating the relevant properties. Or maybe it is
and
the "optional" targets just aren't coded correctly. The fact is that the
the
"optional" targets sometimes run regardless of the existence of the
properties created in the form and sometimes DON'T run, even if the
property
should have been created.

Obviously, I'm doing something wrong but I can't figure it out from the
documentation I've been able to find. AntForm is especially poorly
documented in that it has very few examples and none that illustrate how
to
work with checkSelectionProperty.

Can someone kindly tell me what I'm doing wrong?



I am running Ant 1.7.1 in Eclipse 3.5.1 (Galileo). My OS is Windows XP
SP2.





---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org

Reply via email to