--closed--
I activated actions in the locationmap successfully. :) I will commit
asap.
On Sat, 2005-08-27 at 22:17 +0200, Thorsten Scherler wrote:
> On Fri, 2005-08-26 at 08:41 -0400, Tim Williams wrote:
>
> > > Can a selector in the lm provide a map? Can I use:
> > > <traversal>
> > > <location src="{calculatedValue}"/>
> > > </traversal>
> > >
> > > If the <traversal> selector returns null then the child will be ignored,
> > > otherwise it will use the {calculatedValue} that have been placed in the
> > > returning map of the selector. Is that possible?
> >
> > I missed this reply. If I understand the question, the answer is kind
> > of. All null-returning locations would be ignored except the last one
> > which would, not surprisingly, actually return null, meaning your
> > example above would also return null. If this is done in the context
> > of a parent selector, then maybe it would get ignored -- I'd have to
> > check.
> >
> > I'll admit that I didn't fully cook the [new traversal selector] idea
> > in my head before my fingers started typing it;) I think this one
> > deserves more study and should be filed as a JIRA issue.
> >
>
> I just looked into
> package org.apache.cocoon.selection;
> public interface Selector extends Component {
>
> String ROLE = Selector.class.getName();
> /**
> * Selectors test pattern against some objects in a <code>Map</code>
> * model and signals success with the returned boolean value
> * @param expression The expression to test.
> * @param objectModel The <code>Map</code> containing object of the
> * calling environment which may be used
> * to select values to test the expression.
> * @param parameters The sitemap parameters, as specified by
> <parameter/> tags.
> * @return boolean Signals successfull test.
> */
> boolean select (String expression, Map objectModel, Parameters
> parameters);
> }
>
> What I had in mind is not possible with a selector. That leads us to the
> question whether it is possible to use actions in lm. The answer was not
> out of the box how I found out. ;-)
>
> I wrote a new action RecursiveDirectoryTraversalAction.java that only
> contains the recursive part of the fallbackResolverAction. I tested it
> on the sitemap and that worked just fine.
>
> Now I extend my project lm like this:
> ...
> <components>
> ...
> <actions default="RecursiveDirectoryTraversalAction">
> <action name="RecursiveDirectoryTraversalAction"
> src="org.apache.forrest.plugin.internal.view.acting.RecursiveDirectoryTraversalAction"/>
> </actions>
> ...
> </components>
> <locator>
> <match pattern="views/**">
> <act type="RecursiveDirectoryTraversalAction">
> <parameter value="{1}" name="request"/>
> <parameter value="{project:theme}" name="projectFallback"/>
> <parameter value="{project:theme-ext}" name="projectExtension"/>
> <parameter value="{project:content.xdocs}" name="projectDir"/>
> <location src="{uri}" />
> </act>
> <location
> src="{defaults:view-themes}/{defaults:theme}{defaults:theme-ext}"
> />
> </match>
> </locator>
> ...
>
> I needed do change some classes to allow actions in the lm to be
> matched:
> ? java/org/apache/forrest/locationmap/lm/ActNode.java
> M java/org/apache/forrest/locationmap/lm/MatchNode.java
> M java/org/apache/forrest/locationmap/lm/SelectNode.java
> M java/org/apache/forrest/locationmap/lm/LocationMap.java
> M java/org/apache/forrest/locationmap/lm/LocatorNode.java
>
> The step where I need some help with in ActNode.java is how do I get:
> public String locate(Map objectModel, InvokeContext context) throws
> Exception {
> Parameters parameters = resolveParameters(context,objectModel);
> Map substitutions = m_action.act(redirector, resolver, objectModel,
> source, parameters);
> ...
> }
> working.
>
> Where can I get the redirector, resolver and the source that I need to
> parse to the action? Any tips welcome.
>
> TIA
>
> salu2
--
thorsten
"Together we stand, divided we fall!"
Hey you (Pink Floyd)