Piroumian Konstantin wrote:

> Ok. I'll give a real Use-Case and you look at it with your critical glance.
> Maybe we are too input-module-minded after so many discussions and are
> FS-infected.

Thanks, I really needed that.

> Forrest's Use-Case
> ==============
> 
> Prerequisites
> ---------------------
> Forrest has skinning system which now uses Ant filtering tokens in the
> sitemap to define which skin to use, e.g.:
> 
> <map:transform src="skins/@skin@/style.xsl" />
> 
> Everyone agrees that this looks ugly and the skin name is hard-coded in the
> resulting sitemap, which makes it impossible to change the skin at runtime
> in the web-app version of Forrest. It also requires the source to be copied
> to the 'build' directory and makes development a little more difficult (you
> should run build after every change in the sitemap, while Cocoon could
> reload it from the source directly).
> 
> Solution
> -------------
> Using a special input module makes sitemap look much better:
> 
> <map:transform src="skins/{skin:name}/style.xsl" />
> 
> Everyone agrees with this one too.

Ok, cool, I see.

> Chaining
> -------------
> Where does the skin module get the configuration data? There are several
> places where it can get it:
>       - a request parameter (?skin-name=forrest-site)
>       - a session attribute (after the user has set this somewhere else)
>       - a cookie (to retain user's settings between sessions)
>       - a config file (customized default values for a specific project)
>       - configuration in cocoon.xconf (global default, used if customized
> config is not found)

Ok, got it.

> So having already input modules for 'request-param', 'session-attr',
> 'cookie' and 'xml-config' we can use a meta module which simply traverse
> it's child input modules and tries to get the value from them. Then it was
> proposed this approach:
> 
> <component-instance class="MetaModule" name="skin">
>       <input-module name="request-param"/>
>       <input-module name="session-attr"/>
>       <input-module name="cookie"/>
>       <input-module name="xml-config"/>
>       <input-module name="defaults"/> 
> </component-instance>
 >
>>So, what the heck is this 'glue' thing?
> 
> 
> So, the 'glue' is a meta module which has other input modules as its config.

Gotcha.

> 
>>And why is Torsten is talking about "filters"? gosh, don't you people 
>>think we already have enough concepts and components and models and 
>>names? (expecially when they are so widely used that nobody 
>>really knows 
>>if the user already knows the concept or has to relearn it 
>>from scratch)
> 
> 
> I have no idea what the 'filter' can mean in this context, but from the
> user's point of view, input modules act as namespaced sitemap variables,
> e.g.:
> 
> <map:transform src="{request-param:stylesheet-name}.xsl" />
> 
> So, instead of using a wrapper action to get a request parameter value in
> the sitemap, the user will simply use this short version.

All right, finally I got the picture. I really needed that (and I think 
many others as well).

Now, follow me:

  1) from the user's point of view, input modules act as namespaced 
sitemap variables (you said that)

  2) that means that just like the user knows that type="xslt" will 
match the transformer associated with 'xslt', the variable 
{request:skin} will match the 'skin' attribute in the input module named 
'request'

so, question:

  why aren't you declaring them in the sitemap?

also

  why not calling them something more specific than InputModules?

Take a look at this

<map:sitemap>
<map:components>
  ...
  <map:expanders>
   <map:expander name="A" src="..."/>
   <map:expander name="B" src="..."/>
  </map:expanders>
  ...
</map:components>

...

<map:expanders-sets>
  <map:expander-set name="blah">
   <map:expand type="A"/>
   <map:expand type="B"/>
  </map:expander-set>
</map:expander-sets>

...

</map:sitemap>

isn't it more precisely describing what you want to achieve?

-- 
Stefano Mazzocchi                               <[EMAIL PROTECTED]>
--------------------------------------------------------------------



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to