cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Grzegorz Kossakowski <gkossakow...@apache.org>
Subject Re: cocoon-template incompatible change
Date Sat, 25 Aug 2007 17:55:50 GMT
Leszek Gawron pisze:
> 
> no worry, got that in control already. Problem lies both in Import.java
> instruction and StartPrefixMapping.java:
> 
> 1. Import.java

<snip/>

> 
> this one is quite obvious:
> markLocalContext() should be executed only if a context object is
> explicitly set with <jx:import uri="sth" context="${contextObject}"/>
> (or should not?)

You are right, the problem is with local contexts. I remember that I didn't understand what
the
context attribute is for. Could you explain what is expected behaviour of context presence
and lack
of it?

I thought that context attribute affects imported template (replaces it's context bean). On
the
other hand, current handling of local contexts makes use of jx:set instruction limited because
there
is no option to set value globally.

Actually, I was going to revise concept of local contexts and its use in template but forgot
about
it in the end. Thanks to your discovery I guess it makes sense to think about it a little
more.
Before we fix anything I would like to see contracts of jx:set instruction clearly stated.
I think
we should answer two questions:
1. What's the scope of variable introduced by jx:set?
2. If it's somehow limited should we allow global sets (I'm really reluctant to that option)?

I think we should pattern ourselves on XSLT design.

> 2. StartPrefixMapping.java:
> 
> There is exactly the same problem here:
> 
>> <root xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
>>     <foo xmlns="http://foor.org/bar/1.0">
>>         <jx:set var="foo" value="bar"/>
>>         <inner>${foo}</inner>
>>     </foo>
>>     <outer>${foo}</outer>
>> </root>
> 
> as you expect the output currently is:
> <root xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
>     <foo xmlns="http://foor.org/bar/1.0">
>         <inner>bar</inner>
>     </foo>
>     <outer/>
> </root>
> 
> With this one I'm not that sure what to do:
> 
> 2.a. remove markLocalContext() in StartPrefixMapping and
> cleanupLocalContext() in EndPrefixMapping. This clearly has side effect
> I am not able to analyze. I am not even sure this will work properly as
> some properties of object model will probably get overriden. Please
> comment.

Simply removing this instructions is not the best option because there would be a lot of junk
(namespace declarations) laying in Object Model when, in fact, we would be out of this namespaces.

> 2.b. introduce new methods to ObjectModel which
>     * register namespace local context
>     * unregister namespace local context without removing variable
> declarations

One of my main goals was to have ObjectModel interface as small and clean as possible. That's
why I
moved namespace handling out of Object Model and introduced new namespaces parameter in
Event#execute() method.

I believe we could sort out current problems without polluting ObjectModel as soon as we establish
precise contracts for jx:set.

-- 
Grzegorz Kossakowski
http://reflectingonthevicissitudes.wordpress.com/

Mime
View raw message