On Thursday 24 April 2003 11:47, Jose Alberto Fernandez wrote:
> Obviously (b) is much better. So they define their antlib as follows:
>
>       <antlib>
>               <condition name="cpuusage" 
> classname="com.amazing.queries.CpuUsage"
>                       adaptor="com.amazing.ant.ConditionAdaptor"/>
>               <condition name="latency" 
> classname="com.amazing.queries.NetLatency"
>                       adaptor="com.amazing.ant.ConditionAdaptor"/>
>               <condition name="diskfull" 
> classname="com.amazing.queries.DiskFull"
>                       adaptor="com.amazing.ant.ConditionAdaptor"/>
>       </antlib>
>

This is not the way antlib works at the moment. The adapator class is
associated with the role and not a role instance. One could however
make an amazing.condition :-

<role name="amazing.condition"
        class="o.a.t.a.taskdefs.condition.Condition"
        proxy="com.amazing.ant.ConditionAdaptor"/>

and then
<amazing.condition name="cpuusage" 
                             classname="com.amazing.queries.CpuUsage"/>
etc..


and then use them (with dynamicElement in ConditionBase)

        public void dynamicElement(o.a.t.a.types.Condition c) {}

No need to add code to "if" or pollute the namespace with cpuusage
(i.e. a task of the name cpuusage could be defined using a different class
       or the same class with a different adaptor).

As regards the XML language usage, I feel that Costin is correct, we should
not invent a new xml languge, the xml file should be ant tasks and types -
like the contents of a <target/>.
<role/> should be an ant task that can be used in the antlib xml file or in
a normal build.xml. <typedef/> and <taskdef/> should be used to define 
tasks and types, and a <define role="x"/> should be used to define role
instances (can replace typedef/taskdef) - so the above example becomes
   <define role="amazing.condition" name="cpuusage"
               classname="com.amazing.queries.CpuUsage"/>

   <define role="task" name="copy" classname="o.,/"/> (same as taskdef)
   <define name=",,," classname=",,,"/>  (same as typedef)

Peter

Reply via email to