On Thu, 2005-07-07 at 18:12 +0200, Johannes Schaefer wrote: > Just a curiosity: > > I remembered vaguely the discussion and this mail > about the file-dir-general configuration file. > > We came across a similar problem in a cocoon project > and I digged in here ... which solved our problem! > We reuse > org\apache\forrest\sourceexists\SourceExistsSelector.class > > So, a special thanks to whomever wrote this selector > and to Thorsten for this submit :-) >
lol :) salu2 > Shouldn't something like this not be part of cocoon > in the first place? > > Johannes > > > > [EMAIL PROTECTED] schrieb: > > Author: thorsten > > Date: Mon Jul 4 17:26:35 2005 > > New Revision: 209151 > > > > URL: http://svn.apache.org/viewcvs?rev=209151&view=rev > > Log: > > Activated per dir view fallbacks. That means we match now > > file-specific->(sub-)dir-specific->plugin specific views. This change makes > > the conf/default.fv view obsolete, because we now expecting it in > > xdocs/default.fv. > > > > Added: > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/ > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/databases-block.jar > > (with props) > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/eventcache-block.jar > > (with props) > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/jms-block.jar > > (with props) > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/readme.txt > > (with props) > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/repository-block.jar > > (with props) > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/includes-viewLocationmap.xsl > > (with props) > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap.xsl > > (with props) > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap2path.xsl > > (with props) > > Modified: > > > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/internal.xmap > > > > Modified: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/internal.xmap > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/internal.xmap?rev=209151&r1=209150&r2=209151&view=diff > > ============================================================================== > > --- > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/internal.xmap > > (original) > > +++ > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/internal.xmap > > Mon Jul 4 17:26:35 2005 > > @@ -22,6 +22,13 @@ > > <map:selector logger="sitemap.selector.exists" name="exists" > > src="org.apache.forrest.sourceexists.SourceExistsSelector" /> > > </map:selectors> > > <map:generators default="file"> > > + <map:generator > > + name="traverse" > > + src="org.apache.cocoon.generation.TraversableGenerator" > > + logger="sitemap.generator.traverse" > > + label="content" > > + pool-max="16" > > + /> > > <map:generator name="directory" > > src="org.apache.cocoon.generation.DirectoryGenerator" /> > > <map:generator label="content" logger="sitemap.generator.jx" > > name="jx" pool-grow="2" pool-max="16" pool-min="2" > > src="org.apache.cocoon.generation.JXTemplateGenerator"/> > > </map:generators> > > @@ -76,35 +83,33 @@ > > prepares and transforms the requested contracts (viewHelper) and > > populate them with the content (businessHelper). > > --> > > <map:pipeline> > > + <!--Refactor for dir--> > > + <map:match pattern="viewLocationmap.xml"> > > + <map:generate type="traverse" src="{project:content.xdocs}"> > > + <map:parameter name="depth" value="100"/> > > + <map:parameter name="exclude" value="[\w]*.svn"/> > > + <!--<map:parameter name="include" value="[\w]*.fv"/>--> > > + </map:generate> > > + <map:transform src="resources/stylesheets/viewLocationmap.xsl"/> > > + <map:serialize type="xml"/> > > + </map:match> > > + > > + > > <!-- > > View config resolver > > File specific views have priority before default ones. > > If no views can be found in the project we use the default one of the > > view plugin. > > --> > > <map:match pattern="prepare.view.**"> > > - <map:select type="exists"> > > - <!-- > > - Here we will have to test, whether the requested page needs a > > specific view. > > - This will be assumed as soon there is a .fv > > - e.g. index.xml + index.fv > > - --> > > - <map:when test="{project:content.xdocs}{1}.fv"> > > - <map:generate src="{project:content.xdocs}{1}.fv"/> > > - </map:when> > > - <!-- > > - If there is no file specific view then use the default.fv of the > > project stored in "project.conf-dir". > > - --> > > - <map:when test="{project:conf}/default.fv"> > > - <map:generate src="{project:conf}/default.fv"/> > > - </map:when> > > - <!-- > > - If the above not matches then get the default view of this > > plugin. > > - --> > > - <map:otherwise> > > - <map:generate src="resources/views/default.fv"/> > > - </map:otherwise> > > - </map:select> > > - <map:serialize type="xml"/> > > + <map:generate src="cocoon:/viewLocationmap.xml"/> > > + <map:transform src="resources/stylesheets/viewLocationmap2path.xsl"/> > > + <map:transform > > src="resources/stylesheets/includes-viewLocationmap.xsl"> > > + <map:parameter value="{1}" name="path"/> > > + <map:parameter value="{project:content.xdocs}" name="root"/> > > + <map:parameter value="resources/views/default.fv" > > name="viewFallback"/> > > + </map:transform> > > + <map:transform type="xinclude"/> > > + <map:serialize type="xml"/> > > </map:match> > > > > <!--Add businessHelper to the presentation model that the content can > > be used later on.--> > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/databases-block.jar > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/databases-block.jar?rev=209151&view=auto > > ============================================================================== > > Binary file - no diff available. > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/databases-block.jar > > ------------------------------------------------------------------------------ > > svn:mime-type = application/octet-stream > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/eventcache-block.jar > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/eventcache-block.jar?rev=209151&view=auto > > ============================================================================== > > Binary file - no diff available. > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/eventcache-block.jar > > ------------------------------------------------------------------------------ > > svn:mime-type = application/octet-stream > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/jms-block.jar > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/jms-block.jar?rev=209151&view=auto > > ============================================================================== > > Binary file - no diff available. > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/jms-block.jar > > ------------------------------------------------------------------------------ > > svn:mime-type = application/octet-stream > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/readme.txt > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/readme.txt?rev=209151&view=auto > > ============================================================================== > > --- > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/readme.txt > > (added) > > +++ > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/readme.txt > > Mon Jul 4 17:26:35 2005 > > @@ -0,0 +1 @@ > > +Place any libraries required by your plugin in this directory. > > \ No newline at end of file > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/readme.txt > > ------------------------------------------------------------------------------ > > svn:keywords = Id svn:eol-style=native > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/repository-block.jar > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/repository-block.jar?rev=209151&view=auto > > ============================================================================== > > Binary file - no diff available. > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/lib/repository-block.jar > > ------------------------------------------------------------------------------ > > svn:mime-type = application/octet-stream > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/includes-viewLocationmap.xsl > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/includes-viewLocationmap.xsl?rev=209151&view=auto > > ============================================================================== > > --- > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/includes-viewLocationmap.xsl > > (added) > > +++ > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/includes-viewLocationmap.xsl > > Mon Jul 4 17:26:35 2005 > > @@ -0,0 +1,157 @@ > > +<?xml version="1.0"?> > > +<!-- > > + Copyright 2002-2004 The Apache Software Foundation or its licensors, > > + as applicable. > > + > > + Licensed under the Apache License, Version 2.0 (the "License"); > > + you may not use this file except in compliance with the License. > > + You may obtain a copy of the License at > > + > > + http://www.apache.org/licenses/LICENSE-2.0 > > + > > + Unless required by applicable law or agreed to in writing, software > > + distributed under the License is distributed on an "AS IS" BASIS, > > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > > + See the License for the specific language governing permissions and > > + limitations under the License. > > +--> > > +<xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > + xmlns:collection="http://apache.org/cocoon/collection/1.0" > > + xmlns:xi="http://www.w3.org/2001/XInclude" > > + xmlns:dyn="http://exslt.org/dynamic"> > > + > > + <xsl:param name="defaultView" select="'default.fv'"/> > > + <xsl:param name="rootElement" select="'/xdocs/'"/> > > + <xsl:param name="path" select="'.'"/> > > + <xsl:param name="root" select="'xdocs'"/> > > + <xsl:param name="viewFallback" select="'resources/views/default.fv'"/> > > + <xsl:variable name="lastFallback" > > select="boolean(/xdocs/*[local-name()=$defaultView])"/> > > + <!-- > > + *viewSelector* project-xdocs > > + will return which view is responsible for the requested path. > > + If no view (choice|fallback) could be found the template will return > > the viewFallback. > > + > > + ex.: > > + 1.request: index > > + First choice: index.fv > > + First/last fallback: default.fv > > + > > + 2.request: sample/index > > + First choice: sample/index.fv > > + First fallback: sample/default.fv > > + Last fallback: default.fv > > + > > + 3.request: sample/subdir/index > > + First choice: sample/subdir/index.fv > > + First fallback: sample/subdir/default.fv > > + Second fallback: sample/default.fv > > + Last fallback: default.fv > > + > > + ... > > + > > + des.: > > + The parent view (root-view) inherits to its children until > > + a child is overriding this view. This override can be used for > > + directories (default.fv) and/or files (*.fv). > > + That means that the root view is the default view as long no other > > + view can be found in the requested child. > > + --> > > + <xsl:template match="/"> > > + <!--<xsl:comment> > > + lastFallback: <xsl:value-of select="$lastFallback"/> > > + root: <xsl:value-of select="$root"/> > > + request: <xsl:value-of select="$path"/> > > + default view: <xsl:value-of select="$defaultView"/> > > + function-available('dyn:evaluate') <xsl:value-of > > select="function-available('dyn:evaluate')"/> > > + </xsl:comment>--> > > + <xsl:variable name="view2response"> > > + <xsl:call-template name="viewSelector"> > > + <xsl:with-param name="request" select="concat($path,'.fv')"/> > > + <xsl:with-param name="rest" select="''"/> > > + </xsl:call-template> > > + </xsl:variable> > > + <!--Nothing can be found, returning the default.fv--> > > + <xsl:if test="not($lastFallback) and $view2response=''"> > > + <xi:include href="{$viewFallback}"/> > > + </xsl:if> > > + <!--The lastFallback can be found, returning this--> > > + <xsl:if test="$lastFallback and $view2response=''"> > > + <xi:include href="{concat('file://', $root,$defaultView)}"/> > > + </xsl:if> > > + <!--Some fallback can be found that is not the last one--> > > + <xsl:if test="$view2response!=''"> > > + <xi:include href="{concat('file://', $root,$view2response)}"/> > > + </xsl:if> > > + </xsl:template> > > + > > + <xsl:template name="viewSelector"> > > + <xsl:param name="request" select="''"/> > > + <xsl:param name="rest" select="''"/> > > + <xsl:param name="view2response" select="''"/> > > + <xsl:if test="contains($request,'/')"> > > + <xsl:variable name="nextRequest" > > select="substring-after($request,'/')"/> > > + <xsl:variable name="currentDir" > > select="substring-before($request,'/')"/> > > + <!--<xsl:comment> > > + request: <xsl:value-of select="$request"/> > > + currentDir: <xsl:value-of select="$currentDir"/> > > + currentDir has default view: <xsl:value-of > > select="boolean(dyn:evaluate(concat($rootElement,$rest,$currentDir,'/',$defaultView)))"/> > > + next request: <xsl:value-of select="$nextRequest"/> > > + rest: <xsl:value-of select="$rest"/> > > + view2response: <xsl:value-of select="$view2response"/> > > + </xsl:comment>--> > > + <!--In the path are still directories--> > > + <xsl:if > > test="boolean(dyn:evaluate(concat($rootElement,$rest,$currentDir,'/',$defaultView)))"> > > + <!--<xsl:comment>view2response set - <xsl:value-of > > select="(concat($rest,$currentDir,'/',$defaultView)"/></xsl:comment>--> > > + <xsl:variable name="viewTemp" > > select="concat($rest,$currentDir,'/',$defaultView)"/> > > + <xsl:call-template name="viewSelector"> > > + <xsl:with-param name="request" > > select="$nextRequest"/> > > + <xsl:with-param name="rest" > > select="concat($rest,$currentDir,'/')"/> > > + <xsl:with-param name="view2response" select="$viewTemp"/> > > + </xsl:call-template> > > + </xsl:if> > > + <xsl:if > > test="not(dyn:evaluate(concat($rootElement,$rest,$currentDir,'/',$defaultView)))"> > > + <!--<xsl:comment>no view2response set</xsl:comment>--> > > + <xsl:if test="$view2response=''"> > > + <xsl:variable name="viewTemp" select="''"/> > > + <xsl:call-template name="viewSelector"> > > + <xsl:with-param name="request" > > select="$nextRequest"/> > > + <xsl:with-param name="rest" > > select="concat($rest,$currentDir,'/')"/> > > + <xsl:with-param name="view2response" > > select="$viewTemp"/> > > + </xsl:call-template> > > + </xsl:if> > > + <xsl:if test="$view2response!=''"> > > + <xsl:variable name="viewTemp" select="$view2response"/> > > + <xsl:call-template name="viewSelector"> > > + <xsl:with-param name="request" > > select="$nextRequest"/> > > + <xsl:with-param name="rest" > > select="concat($rest,$currentDir,'/')"/> > > + <xsl:with-param name="view2response" > > select="$viewTemp"/> > > + </xsl:call-template> > > + </xsl:if> > > + </xsl:if> > > + </xsl:if> > > + <xsl:if test="not(contains($request,'/'))"> > > + <!--<xsl:comment> > > + request: <xsl:value-of select="$request"/> > > + rest: <xsl:value-of select="$rest"/> > > + iteration: <xsl:value-of select="number($iteration)"/> > > + view2response: <xsl:value-of select="$view2response"/> > > + </xsl:comment>--> > > + <xsl:if test="not(dyn:evaluate(concat($rootElement, $rest, > > $request)))"> > > + <!--<xsl:comment>no file specific override</xsl:comment>--> > > + <xsl:if > > test="boolean(dyn:evaluate(concat($rootElement,$rest,$defaultView)))"> > > + <!--<xsl:comment>dir specific override</xsl:comment>--> > > + <xsl:value-of select="concat($rest,$defaultView)"/> > > + </xsl:if> > > + <xsl:if > > test="not(dyn:evaluate(concat($rootElement,$rest,$defaultView)))"> > > + <!--<xsl:comment>no dir specific override</xsl:comment>--> > > + <xsl:value-of select="$view2response"/> > > + </xsl:if> > > + </xsl:if> > > + <xsl:if test="boolean(dyn:evaluate(concat($rootElement, $rest, > > $request)))"> > > + <!--<xsl:comment>file specific override</xsl:comment>--> > > + <xsl:value-of select="concat($rest, $request)"/> > > + </xsl:if> > > + </xsl:if> > > + </xsl:template> > > + > > +</xsl:stylesheet> > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/includes-viewLocationmap.xsl > > ------------------------------------------------------------------------------ > > svn:keywords = Id svn:eol-style=native > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap.xsl > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap.xsl?rev=209151&view=auto > > ============================================================================== > > --- > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap.xsl > > (added) > > +++ > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap.xsl > > Mon Jul 4 17:26:35 2005 > > @@ -0,0 +1,42 @@ > > +<?xml version="1.0"?> > > +<!-- > > + Copyright 2002-2004 The Apache Software Foundation or its licensors, > > + as applicable. > > + > > + Licensed under the Apache License, Version 2.0 (the "License"); > > + you may not use this file except in compliance with the License. > > + You may obtain a copy of the License at > > + > > + http://www.apache.org/licenses/LICENSE-2.0 > > + > > + Unless required by applicable law or agreed to in writing, software > > + distributed under the License is distributed on an "AS IS" BASIS, > > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > > + See the License for the specific language governing permissions and > > + limitations under the License. > > +--> > > +<xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > + xmlns:collection="http://apache.org/cocoon/collection/1.0"> > > + <xsl:variable name="includePattern" select="'.fv'"/> > > + > > + <xsl:template match="/"> > > + <xsl:apply-templates/> > > + </xsl:template> > > + <xsl:template match="collection:collection"> > > + <dir name="[EMAIL PROTECTED]"> > > + <xsl:apply-templates/> > > + </dir> > > + </xsl:template> > > + <xsl:template > > match="collection:resource[contains(@name,$includePattern)]"> > > + <view name="[EMAIL PROTECTED]"> > > + <xsl:apply-templates/> > > + </view> > > + </xsl:template> > > + <!--/collection:resource[contains(@name,$includePattern)]--> > > + <!-- <xsl:template match="//*/*[contains(@name,$includePattern)]"> > > + <xsl:variable name="parent" select="../."/> > > + <node id="{$parent/@name}"/> > > + <!-#-<xsl:copy-of select="$parent"/>-#-> > > + </xsl:template>--> > > + > > +</xsl:stylesheet> > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap.xsl > > ------------------------------------------------------------------------------ > > svn:keywords = Id svn:eol-style=native > > > > Added: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap2path.xsl > > URL: > > http://svn.apache.org/viewcvs/forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap2path.xsl?rev=209151&view=auto > > ============================================================================== > > --- > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap2path.xsl > > (added) > > +++ > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap2path.xsl > > Mon Jul 4 17:26:35 2005 > > @@ -0,0 +1,35 @@ > > +<?xml version="1.0"?> > > +<!-- > > + Copyright 2002-2004 The Apache Software Foundation or its licensors, > > + as applicable. > > + > > + Licensed under the Apache License, Version 2.0 (the "License"); > > + you may not use this file except in compliance with the License. > > + You may obtain a copy of the License at > > + > > + http://www.apache.org/licenses/LICENSE-2.0 > > + > > + Unless required by applicable law or agreed to in writing, software > > + distributed under the License is distributed on an "AS IS" BASIS, > > + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > > + See the License for the specific language governing permissions and > > + limitations under the License. > > +--> > > +<xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > + xmlns:collection="http://apache.org/cocoon/collection/1.0"> > > + > > + <xsl:template match="/"> > > + <xsl:apply-templates/> > > + </xsl:template> > > + > > + <xsl:template match="dir[view or dir]"> > > + <xsl:element name="[EMAIL PROTECTED]"> > > + <xsl:apply-templates/> > > + </xsl:element> > > + </xsl:template> > > + > > + <xsl:template match="view"> > > + <xsl:element name="[EMAIL PROTECTED]"/> > > + </xsl:template> > > + > > +</xsl:stylesheet> > > > > Propchange: > > forrest/branches/locationmap_branch/whiteboard/plugins/org.apache.forrest.plugin.internal.view/resources/stylesheets/viewLocationmap2path.xsl > > ------------------------------------------------------------------------------ > > svn:keywords = Id svn:eol-style=native > > > > > > > > -- thorsten "Together we stand, divided we fall!" Hey you (Pink Floyd)
