I should mention that doing this will execute just fine as I expect:

    <scriptdef name="bshForLoop" language="beanshell">
        <classpath>
            <fileset dir="lib" includes="*.jar"/>
        </classpath>

        <attribute name="start"/>
        <attribute name="end"/>
        <attribute name="step"/>

<element name="sequential" classname="org.apache.tools.ant.taskdefs.Sequential"/>

        <![CDATA[
        try {
            int    start = Integer.parseInt(attributes.get("start"));
            int    end   = Integer.parseInt(attributes.get("end"));
            int    step  = Integer.parseInt(attributes.get("step"));
            Task   body  = (Task) elements.get("sequential").get(0);

            for (int index = start; index != end; index += step) {
                body.execute();
            }
        }

        catch(Exception e) {
            e.printStackTrace();
        }
        ]]>
    </scriptdef>

I just loose that nice macrodef-ish @{param} expansion that I get in both macrodef's and Ant Contrib for...

I'm completely open to not creating a macrodef on the fly if there is a simple way to get that param expansion working easily :) I'm looking to do something like this:

<bshForLoop start="1" end="10" param="foo">
  <sequential>
    <echo message = "Here we go index is @{foo}"/>
  </sequential>
</bshForLoop>



On Thu, 8 Dec 2011, Scot P. Floess wrote:

All,

I have what may seem like a strange question... I was looking through the source for Ant Contrib's ForTask.java... I see it uses MacroDef internally as well as MacroInstance to execute().

I've got a script def that has a child element entitled "sequential" of type org.apache.tools.ant.taskdefs.Sequential.

I was trying to mimick the ForTask within a Beanshell script. Below is the code I was writing - but it definitely doesn't execute "sequential" whatsoever. What started me on this was I liked how ForTask uses the same param expansion that MacroDef uses...and wanted to see what ForTask did to make that happen. I can definitely get "sequential" to execute by itself within the for loop no problem... Here is the script def - and thanks ahead of time!!!!!!!!

   <scriptdef name="bshForLoop" language="beanshell">
       <classpath>
           <fileset dir="lib" includes="*.jar"/>
       </classpath>

       <attribute name="start"/>
       <attribute name="end"/>
       <attribute name="step"/>
       <attribute name="param"/>

<element name="sequential" classname="org.apache.tools.ant.taskdefs.Sequential"/>

       <![CDATA[
       try {
           import org.apache.tools.ant.Task;
           import org.apache.tools.ant.RuntimeConfigurable;
           import org.apache.tools.ant.UnknownElement;

           import org.apache.tools.ant.taskdefs.MacroDef;
           import org.apache.tools.ant.taskdefs.MacroInstance;

           int    start = Integer.parseInt(attributes.get("start"));
           int    end   = Integer.parseInt(attributes.get("end"));
           int    step  = Integer.parseInt(attributes.get("step"));
           String param = attributes.get("param");
           Task   body  = (Task) elements.get("sequential").get(0);

           MacroDef macroDef = new MacroDef();
           macroDef.setProject(project);

           MacroDef.Attribute attribute = new MacroDef.Attribute();
           attribute.setName(param);
           attribute.setDefault("" + start);
           macroDef.addConfiguredAttribute(attribute);

MacroDef.NestedSequential sequential = macroDef.createSequential();

           UnknownElement unknownElement = macroDef.getNestedTask();
           unknownElement.setRealThing(body);
           unknownElement.setProject(project);

           sequential.addTask(unknownElement);

           MacroInstance instance = new MacroInstance();
           instance.setProject(project);
           instance.setMacroDef(macroDef);

           for (int index = start; index != end; index += step) {
               instance.setDynamicAttribute(param, "" + index);

               instance.execute();
           }
       }

       catch(Exception e) {
           e.printStackTrace();
       }
       ]]>
   </scriptdef

Scot P. Floess             RHCT  (Certificate Number 605010084735240)
Chief Architect FlossWare  http://sourceforge.net/projects/flossware
                          http://flossware.sourceforge.net
                          https://github.com/organizations/FlossWare

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



Scot P. Floess             RHCT  (Certificate Number 605010084735240)
Chief Architect FlossWare  http://sourceforge.net/projects/flossware
                           http://flossware.sourceforge.net
                           https://github.com/organizations/FlossWare

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

Reply via email to