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