Grzegorz Kossakowski skrev:
Daniel Fagerstrom pisze:
Grzegorz Kossakowski skrev:
...
You may wonder why I want to remove it at all. My goal is to get rid of TemplateObjectModelHelper which scope is narrowed to template, only. This stops me from having unified object model across all Cocoon parts. To achieve unified architecture, I want to make Cocoon areas (like flowscript) respectively responsible for various object model entries creation to be also responsible for addition this entries to the ObjectModel. Now, the situation is rather confusing because flowscript creates context bean and inserts it to the "component object model" (the one passed to Cocoon's components) and later template creates Object Model by collecting various bits of information.
I've started to alter this in r562102[1].

I'd suggest that you move the code in TemplateObjectModelHelper.getTemplateObjectModel that fills the object model with attributes (or properties) to o.a.c.components.flow.AbstactInterpreter.forwardTo. The forwardTo method should also set up a local object model context for this information so that the object model doesn't become cluttered with data from earlier (e.g. internal) forwardTo calls. By moving the setup code from JXTemplateGenerator to AbstractInterpreter.forwardTo the context properties are available for all components, not just the JXTemplateGenerator.

I'm wondering why not to the FlowHelper where context bean is set up?

I meant that the code should be *called* from AbstractInterpreter.forwardTo.

I'm already moving most of the code of Template and Flow Object Model helpers.

The setup of "cocoon.parameters" must still be done in JXTemplateGenerator of course. Ths setup of the context bean property in fillNewObjectModelWithFOM seem redundant, it is already done in AbstactInterpreter.forwardTo.

Being more explicit I suggest that the parameter setup part of FlowObjectModelHelper.fillNewObjectModelWithFOM is factored out to an own helper method e.g. FlowObjectModelHelper.fillNewObjectModelWithParameters. Then the (modified) fillNewObjectModelWithFOM is called in AbstractInterpreter.forwardTo (in an own environment context). Which means that the flow context info is available in the object everywhere and not just in JXTG. In JXTG.performGeneration just the parameters are set with fillNewObjectModelWithParameters.

But this far we only have access to the sitemap component parameters from the object model in JXTG, shouldn't they be accessible in all sitemap components?

For all sitemap components that means that the component parameters needs to be pushed to the object model before looking up the component from the service manager. By doing that the parameters are available in the object model if it is injected or looked up in the service method. For the pipeline components this needs to be done in the setGenerator etc methods in the AbstractProcessingPipeline. For actions, matchers etc it probably needs to be done in the ProcessingNode.invoke methods.

Next the setup methods for the pipeline components (in AbstractProcessingPipeline.setupPipeline) and the SitemapExecutor.invokeAction etc methods that are called in the ProcessingNode.invoke methods for actions etc, needs to be executed when the right parameters are pushed on the object model.

What is most complicated (and something we maybe don't have to care about), is making the right component parameters available while executing a pipeline. To get it right we need something like:

Generator -> EnvironmentChanger -> Transformer -> EnvironmentChanger -> ... -> EnvironmnetChanger -> Serializer

where the EnvironmentChanger wraps the XMLConsumer for the next component and pops the current component parameters and push the ones for the next component for each SAX event. See o.a.c.environment.internal for some such code. There is also a fair amount of environment changing code in pipelines in the abandoned VPC code http://svn.apache.org/repos/asf/cocoon/whiteboard/virtual-processing-components/.

Kind of complicated I'm afraid. But handling of sitemap component parameters is one of the more complicated areas in Cocoon.

WDYT?

/Daniel

Reply via email to