Hi Costin,
I will reply to these e-mails separately, if this is ok.

On Saturday 17 May 2003 19:59, Costin Manolache wrote:
> Sorry for the late reply, I had almost no acces to internet ( or time )
> last week.
>
> My main concern is the same as Conor's - having this decoupled and done
> in few steps.
>
> > peter reilly wrote:
> >> On Thursday 15 May 2003 07:56, Conor MacNeill wrote:
> >>
> >> I would prefer to use the XML schema attribute for this.
> >
> > Mmmm, this would be confusing as the XML schema attribute
> > has an associated URI "http://www.w3.org/2001/XMLSchema"; which
> > implies a lot more that a reference to an ant type.
>
> Schema-style attributes - maybe. XMLShema itself is one of the worst
> things in XML (IMO), I would preffer we stay as far away as possible - but
> I'm ok with using some ideas.
>
> >> I have done a quick review of you proposal. I wonder if we can split
> >> this into smaller chunks to make it easier to understand and review. For
> >> example, the onError stuff could be split out, as could the URL handling
> >> code for separate consideration. Smaller chunks are easier to handle.
> >
> > This is true, but difficult to do. Some of the implementations of the
> > different features change/improve if other features are present. For
> > example the implementation of "onerror" uses the new anttypedefintion
> > class. The implementation of the psuedo task "antlib" uses the add(Type)
> > mechanism rather than explicity stating addTypedef and addTaskdef, this
> > allowed other tasks that extend Definer to used in the antlib task (for
> > example a definer that wraps Runnable objects as ant tasks, or
> > a future implemation of roles).
>
> That means you have to start with add(Type), then anttypdef, then onerror.
>

I could do this, but it would take a little time... The implementation
of add(Type) has been different after each of my updates...

One reason I combined them all together was to get a feeling on the
solution when all the pieces were in place.

> > Also from a practical point of view, I find it difficult to maintain
> > multiple patched ant versions.
>
> I think we are talking about the main branch - so there is no
> "patched ant version" to maintain. From a practical point of view, it
> is much easier to review and accept smaller chunks.
>
> >> Anyway, it seems to me that you have combined the namespace URI and
> >> element names in certain places. Examples: In component helper changes,
> >> for method createComponent, you say
> >>
> >> the name of the component, if
> >> the component is in a namespace, the
> >> name is prefixed withe the namespace uri
> >> dropping the "antlib:" and adding ":".
> >>
> >> Why not pass the URI and local name to the component helper and not have
> >> to parse it out in componentHelper. Your approach also precludes URIs
> >> that contain ':' (I know you disallow these elsewhere but I don't see
> >> any reason to combine these, anyway)
> >
> > Initially I was going to do this, but here is a lot of places in the code
> > that assume that a task/type is mapped from a string and not from the
> > tuple
> > {ns uri, local name}.
> > J.Pietschmann suggested in
> > http://marc.theaimsgroup.com/?l=ant-dev&m=105233644225128&w=2
> > that one can use a mapping of {uri, name} to a string ns-uri+"^"+name
> > when migrating a project to namespaced XML.
>
> I agree using a combined NS + Element may be simpler.
>
> I would suggest ns-uri:name ( i.e. : instead of ^ ). It is easy to extract
> the name with lastIndexOf(). It's just cosmetic, of course.

This is exactly what my patch on friday does :-).

>
> > My current mapping is not good as it drops the antlib: prefix and thus
> > excludes other uri prefixes, so I will change this. The current code does
> > exclude URI that contain ":", this is a combination of a bug and by
> > design. The bug is that I should have used lastindexof and the design is
> > that the code only deals with NS URIs that start with "antlib:" for
> > type/task definitions. The code for the mapping should be done in one
> > place (maybe as a static method in ProjectHelper).
>
> In any case, "antlib:" or any prefix should _never_ be used in resolutions.
> Only the URI. The prefix is just a syntactic shortcut, the URI is the one
> that matters.
>
> >> I'm not sure where TaskAdapter went. createNewTask seems to return null
> >> if the class is not a Task - probably handled somewhere else.
> >
> > This is by design and for BC reasons. If the type class is not a Task,
> > and the type does not have an Adapter to a Task class, the
> > CM#createNewTask() will not create the class. <taskdef/> will does this
> > (for example the condition task), and the unit tests contain an adapter
> > for Runnable objects. The code in CM does not treat TaskAdapter as a
> > special case.
>
> I think <taskdef> should be treated as a special <typedef> with TaskAdapter
> as adapter.
>
> ( i.e. use <typedef> as the main definition mechanism, and taskdef as
> a shortcut for types with optional TaskAdapter adapters ).

This is exacty what "taskdef" is in the patch :-).  It derives
from typedef and sets the adapterClass to TaskAdapter, and the adaptoClass
to Task. The html page for taskdef in the friday patch makes this explicit.

I have some WorkInProgress code to allow this to be specified in a buildfile.

<extendtype name="taskdef">
    <typedef adapter="org.apache.tools.ant.TaskAdapter"
                  adaptto="org.apache.tools.ant.Task"/>
</extendtype>

"extendtype" is a WIP name for a cut-down templating feature, it
defines new types from other types with some attributes pre set.

>
> >> For the most part it looks OK to me. I'd need to look more closely to
> >> fully comprehend it but thought you might like some feedback.
>
> Same here. If it can be split into smaller pieces - you have my +1 on the
> overal proposal ( each piece will be reviewed separately and may need some
> changes based on the review ).
>

Cool, Peter.

Reply via email to