ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jose Alberto Fernandez" <jalbe...@cellectivity.com>
Subject RE: Embedded dynamic ANT tasks.
Date Mon, 09 Jun 2003 10:42:57 GMT
You could do the following, which will require no changes to code:

1) Define 2 tasks EmbeddedTaskdef simillar to the one already described
and EmbeddedTaskRunner described bellow.

2) EmbeddedTaskdef will load the definition into some symbol-table which it shares with EmbeddedTaskRunner.

3) EmbeddedTaskdef will add the new task name (e.g., counterTask) as defined by EmbeddedTaskRunner
class.
   Project.addTaskDefinition("counterTask", EmbeddedTaskRunner.class)

4) EmbeddedTaskRunner implements the DymanicAPI, it finds the definition on the symbol-table
using the task-type set for the task (i.e. Task.getTaskType()). It will use that
to find the associated script and then resolve attributes and nested elements from there.

The only problem with this solution is that the implementation needs to provide its own
symbol-table which may be problematic when using <import/> and <ant/>. It would
be nicer
if ANT were willing to manage this kind of use symbol-table as some sort of generic service.

That would make maintaining code like this much more straigh forward.

Jose Alberto

> -----Original Message-----
> From: Alexey Solofnenko [mailto:A.Solofnenko@mdl.com]
> Sent: 06 June 2003 16:34
> To: 'Ant Users List'
> Cc: 'dev@ant.apache.org'
> Subject: RE: Embedded dynamic ANT tasks.
> 
> 
> Hello Dawid,
> 
>   I was thinking about something like that. There is 
> DynamicConfigurator to
> support dynamic properties, but there is no way to create 
> dynamic tasks.
> Maybe we should ask ANT developers to support task factories 
> in addition to
> class names. It would be a simple patch. For example in
> ComponentHelper.createNewTask() we can add something like:
> 
> if (o instanceof TaskFactory) {
>   o=((TaskFactory)o).createNewTask(taskType);
> }
> 
> // continue
> if (o instanceof Task) {
> ....
> 
> 
> - Alexey.
> 
> --
> { http://trelony.cjb.net/ } Alexey N. Solofnenko
> Pleasant Hill, CA (GMT-8 usually)
> 
> 
> -----Original Message-----
> From: Dawid Weiss [mailto:Dawid.Weiss@cs.put.poznan.pl] 
> Sent: Friday, June 06, 2003 7:53 AM
> To: user@ant.apache.org
> Subject: Embedded dynamic ANT tasks.
> 
> 
> Dear ANT community,
> 
> I thought one day: maybe it would be fun if I could define 
> ANT tasks INSIDE
> the  ANT  script that is being executed? So it could look like this:
> 
> > <!-- Define an embedded task and use it immediately -->
> > <target name="example" depends="prepare">
> > 
> >     <!-- define the task -->
> >     <embeddedtaskdef name="counterTask"><![CDATA[
> >         String message;
> >         int    min;
> >         int    max;
> >         
> >         void setMin(int min) {
> >             // note how 'global' is used instead of 'this'
> >             // global scope refers to the task instance anyway.
> >             global.min = min;
> >         }
> > 
> >         void setMax(int max) {
> >             global.max = max;
> >         }
> > 
> >         void setMessage(String message) {
> >             global.message = message;
> >         }
> > 
> >         void execute() {
> >             if (message != null)
> >                 System.out.print(message);
> >             for (int i=min;i<max;i++) {
> >                 System.out.print(i);
> >                 if (i+1 != max) System.out.print(",");
> >             }
> >         }
> >     ]]></embeddedtaskdef>
> >     
> >     <!-- use the defined task right away! -->
> >     <counterTask min="0" max="10" message="The numbers from 
> 0 to 10 are: "
> />
> >     <counterTask min="5" max="20" message="And the numbers 
> from 5 to 20
> are: " />
> > </target>
> 
> 
> I've played with BSH and BCEL and the solution can be found at:
> 
> http://www.cs.put.poznan.pl/dweiss/index.php/projects/bsh-bind
ing/index.xml?
lang=en

I  personally find it quite a useful task, even though it started purely as
a toy and a mind-exerciser :)

Regards,
Dawid

_______________________
Dawid Weiss, http://www.cs.put.poznan.pl/dweiss
Laboratory of Intelligent Decision Support Systems, Poznan UT, Poland


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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message