forrest-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thorsten Scherler <thors...@apache.org>
Subject Re: [locationmap] How to activate actions in the locationmap
Date Sun, 28 Aug 2005 02:31:18 GMT
--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
> &lt;parameter/&gt; 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)


Mime
View raw message