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