You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/09/08 17:43:54 UTC

svn commit: r441544 [1/2] - in /maven/sandbox/maven-dynamic-web: ./ dynaweb-cms/ dynaweb-cms/src/ dynaweb-cms/src/main/ dynaweb-cms/src/main/java/ dynaweb-cms/src/main/java/org/ dynaweb-cms/src/main/java/org/apache/ dynaweb-cms/src/main/java/org/apache...

Author: jdcasey
Date: Fri Sep  8 08:43:51 2006
New Revision: 441544

URL: http://svn.apache.org/viewvc?view=rev&rev=441544
Log:
Ugly name, but this is a rework of the filter behind the site:run mojo, to be installed as a dynamic content generator.

Added:
    maven/sandbox/maven-dynamic-web/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/pom.xml   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocument.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocumentInfo.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocument.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocumentInfo.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DoxiaContentFilter.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DynaWebEnvironmentKeys.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/PlexusInitializerFilter.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/CMSRequest.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/HttpCMSRequest.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AbstractJSR170Session.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AnonymousJSR170Session.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AuthenticatedJSR170Session.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSAccessException.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSPathNotFoundException.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSSession.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/
    maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/AppTest.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/
    maven/sandbox/maven-dynamic-web/dynaweb-display/pom.xml   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/DisplayConstants.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/DoxiaContentFilter.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/PlexusInitializerFilter.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/RequestDumpFilter.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentAccessException.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentLoader.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/FileSystemDocumentLoader.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SimpleSkinManager.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinManager.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinningException.java   (with props)
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/test/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/test/java/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/test/java/org/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/test/java/org/apache/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/test/java/org/apache/maven/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/test/java/org/apache/maven/dynaweb/
    maven/sandbox/maven-dynamic-web/dynaweb-display/src/test/java/org/apache/maven/dynaweb/display/
    maven/sandbox/maven-dynamic-web/pom.xml   (with props)

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/pom.xml?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/pom.xml (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/pom.xml Fri Sep  8 08:43:51 2006
@@ -0,0 +1,46 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>maven-dynamic-web</artifactId>
+    <groupId>org.apache.maven.dynaweb</groupId>
+    <version>1.0-alpha-1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>dynaweb-cms</artifactId>
+
+  <name>DynaWeb CMS System</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jackrabbit</groupId>
+      <artifactId>jackrabbit-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.doxia</groupId>
+      <artifactId>doxia-site-renderer</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-container-default</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus.security</groupId>
+      <artifactId>plexus-security-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus.security</groupId>
+      <artifactId>plexus-security-model</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus.security</groupId>
+      <artifactId>plexus-security-simple</artifactId>
+    </dependency>
+  </dependencies>
+</project>

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocument.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocument.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocument.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocument.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,12 @@
+package org.apache.maven.dynaweb.cms.document;
+
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+
+public interface CMSDocument
+{
+    
+    CMSDocumentInfo getDocumentInfo();
+    
+    DocumentRenderer getRenderer();
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocument.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocument.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocumentInfo.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocumentInfo.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocumentInfo.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocumentInfo.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,6 @@
+package org.apache.maven.dynaweb.cms.document;
+
+public interface CMSDocumentInfo
+{
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocumentInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/CMSDocumentInfo.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocument.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocument.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocument.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocument.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,39 @@
+package org.apache.maven.dynaweb.cms.document;
+
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+import org.apache.maven.dynaweb.cms.request.CMSRequest;
+
+import javax.jcr.Node;
+
+public class NodeBackedCMSDocument
+    implements CMSDocument
+{
+
+    private final Node node;
+    private final CMSRequest request;
+    
+    private CMSDocumentInfo docInfo;
+
+    public NodeBackedCMSDocument( CMSRequest request, Node node )
+    {
+        this.request = request;
+        this.node = node;
+    }
+
+    public CMSDocumentInfo getDocumentInfo()
+    {
+        if ( docInfo == null )
+        {
+            docInfo = new NodeBackedCMSDocumentInfo( request, node );
+        }
+        
+        return docInfo;
+    }
+
+    public DocumentRenderer getRenderer()
+    {
+        // TODO Implement this.
+        return null;
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocument.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocument.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocumentInfo.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocumentInfo.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocumentInfo.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocumentInfo.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,20 @@
+package org.apache.maven.dynaweb.cms.document;
+
+import org.apache.maven.dynaweb.cms.request.CMSRequest;
+
+import javax.jcr.Node;
+
+public class NodeBackedCMSDocumentInfo
+    implements CMSDocumentInfo
+{
+
+    private final Node node;
+    private final CMSRequest request;
+
+    public NodeBackedCMSDocumentInfo( CMSRequest request, Node node )
+    {
+        this.request = request;
+        this.node = node;
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocumentInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/document/NodeBackedCMSDocumentInfo.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DoxiaContentFilter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DoxiaContentFilter.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DoxiaContentFilter.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DoxiaContentFilter.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,195 @@
+package org.apache.maven.dynaweb.cms.filter;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.RendererException;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+import org.apache.maven.dynaweb.cms.document.CMSDocument;
+import org.apache.maven.dynaweb.cms.request.CMSRequest;
+import org.apache.maven.dynaweb.cms.request.HttpCMSRequest;
+import org.apache.maven.dynaweb.cms.session.AnonymousJSR170Session;
+import org.apache.maven.dynaweb.cms.session.CMSAccessException;
+import org.apache.maven.dynaweb.cms.session.CMSSession;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+/**
+ * Render a page as requested.
+ * 
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DoxiaContentFilter
+    implements Filter
+{
+    private Renderer siteRenderer;
+
+    private DecorationModel decorationModel;
+
+    public void init( FilterConfig filterConfig )
+        throws ServletException
+    {
+        ServletContext servletContext = filterConfig.getServletContext();
+
+        PlexusContainer container =
+            ( PlexusContainer ) servletContext.getAttribute( DynaWebEnvironmentKeys.MASTER_PLEXUS_CONTAINER_KEY );
+
+        try
+        {
+            siteRenderer = ( Renderer ) container.lookup( Renderer.ROLE );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ServletException( "Error retrieving site-renderer instance: " + e.getMessage(), e );
+        }
+
+        try
+        {
+            initDecorationModel( servletContext );
+        }
+        catch ( IOException e )
+        {
+            throw new ServletException( "Error reading site descriptor: " + e.getMessage(), e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new ServletException( "Error reading site descriptor: " + e.getMessage(), e );
+        }
+    }
+
+    private void initDecorationModel( ServletContext servletContext )
+        throws IOException, XmlPullParserException
+    {
+        String siteDescriptorPath =
+            servletContext.getInitParameter( DynaWebEnvironmentKeys.SITE_DESCRIPTOR_PATH_INIT_PARAM );
+
+        if ( siteDescriptorPath == null )
+        {
+            siteDescriptorPath = DynaWebEnvironmentKeys.SITE_DESCRIPTOR_PATH_INIT_PARAM_DEFAULT;
+        }
+
+        siteDescriptorPath = servletContext.getRealPath( siteDescriptorPath );
+
+        FileReader reader = null;
+
+        try
+        {
+            reader = new FileReader( siteDescriptorPath );
+
+            decorationModel = new DecorationXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
+    }
+
+    public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain )
+        throws IOException, ServletException
+    {
+        CMSDocument document = loadDocument( servletRequest, servletResponse );
+
+        render( servletResponse, document );
+
+        filterChain.doFilter( servletRequest, servletResponse );
+    }
+
+    private CMSDocument loadDocument( ServletRequest servletRequest, ServletResponse servletResponse )
+        throws ServletException
+    {
+        HttpServletRequest req = ( HttpServletRequest ) servletRequest;
+
+        HttpSession webSession = req.getSession();
+
+        CMSSession session = null;
+
+        if ( webSession != null )
+        {
+            session = ( CMSSession ) webSession.getAttribute( DynaWebEnvironmentKeys.CMS_SESSION_ATTRIBUTE );
+        }
+
+        if ( session == null )
+        {
+            session = new AnonymousJSR170Session();
+        }
+
+        CMSRequest request = new HttpCMSRequest( req );
+
+        CMSDocument document;
+        
+        try
+        {
+            document = session.getDocument( request );
+        }
+        catch ( CMSAccessException e )
+        {
+            throw new ServletException( e.getMessage(), e );
+        }
+
+        return document;
+    }
+
+    private void render( ServletResponse servletResponse, CMSDocument document )
+        throws ServletException
+    {
+        SiteRenderingContext ctx = new SiteRenderingContext();
+
+        ctx.setDecoration( decorationModel );
+
+        try
+        {
+            DocumentRenderer renderer = ( DocumentRenderer ) document.getRenderer();
+
+            renderer.renderDocument( servletResponse.getWriter(), siteRenderer, ctx );
+        }
+        catch ( RendererException e )
+        {
+            throw new ServletException( "Error rendering document: " + e.getMessage(), e );
+        }
+        catch ( UnsupportedEncodingException e )
+        {
+            throw new ServletException( "Error rendering document: " + e.getMessage(), e );
+        }
+        catch ( IOException e )
+        {
+            throw new ServletException( "Error rendering document: " + e.getMessage(), e );
+        }
+    }
+
+    public void destroy()
+    {
+    }
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DoxiaContentFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DoxiaContentFilter.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DynaWebEnvironmentKeys.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DynaWebEnvironmentKeys.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DynaWebEnvironmentKeys.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DynaWebEnvironmentKeys.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,14 @@
+package org.apache.maven.dynaweb.cms.filter;
+
+public interface DynaWebEnvironmentKeys
+{
+
+    String MASTER_PLEXUS_CONTAINER_KEY = "dynaweb-container";
+    
+    String SITE_DESCRIPTOR_PATH_INIT_PARAM = "site-descriptor";
+
+    String SITE_DESCRIPTOR_PATH_INIT_PARAM_DEFAULT = "/WEB-INF/site.xml";
+
+    String CMS_SESSION_ATTRIBUTE = "CMS-session";
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DynaWebEnvironmentKeys.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/DynaWebEnvironmentKeys.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/PlexusInitializerFilter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/PlexusInitializerFilter.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/PlexusInitializerFilter.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/PlexusInitializerFilter.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,60 @@
+package org.apache.maven.dynaweb.cms.filter;
+
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.PlexusContainerException;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+public class PlexusInitializerFilter
+    implements Filter
+{
+    
+    private PlexusContainer container;
+
+    public void destroy()
+    {
+        if ( container != null )
+        {
+            container.dispose();
+        }
+    }
+
+    public void doFilter( ServletRequest serverRequest, ServletResponse serverResponse, FilterChain chain )
+        throws IOException, ServletException
+    {
+        chain.doFilter( serverRequest, serverResponse );
+    }
+
+    public void init( FilterConfig filterConfig )
+        throws ServletException
+    {
+        ServletContext servletContext = filterConfig.getServletContext();
+        
+        container = ( PlexusContainer ) servletContext.getAttribute( DynaWebEnvironmentKeys.MASTER_PLEXUS_CONTAINER_KEY );
+        
+        if ( container == null )
+        {
+            try
+            {
+                container = new DefaultPlexusContainer( DynaWebEnvironmentKeys.MASTER_PLEXUS_CONTAINER_KEY );
+                container.start();
+                
+                servletContext.setAttribute( DynaWebEnvironmentKeys.MASTER_PLEXUS_CONTAINER_KEY, container );
+            }
+            catch ( PlexusContainerException e )
+            {
+                throw new ServletException( "Failed to initialize Plexus container. Reason: " + e.getMessage(), e );
+            }
+        }
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/PlexusInitializerFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/filter/PlexusInitializerFilter.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/CMSRequest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/CMSRequest.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/CMSRequest.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/CMSRequest.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,10 @@
+package org.apache.maven.dynaweb.cms.request;
+
+import java.util.List;
+
+public interface CMSRequest
+{
+    
+    List<String> getPath();
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/CMSRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/CMSRequest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/HttpCMSRequest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/HttpCMSRequest.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/HttpCMSRequest.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/HttpCMSRequest.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,47 @@
+package org.apache.maven.dynaweb.cms.request;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class HttpCMSRequest
+    implements CMSRequest
+{
+    
+    private final HttpServletRequest request;
+
+    public HttpCMSRequest( HttpServletRequest request )
+    {
+        this.request = request;
+    }
+
+    public List<String> getPath()
+    {
+        String servletPath = request.getServletPath();
+        
+        String[] pathElements = servletPath.split( "\\/" );
+        
+        List<String> path = new ArrayList<String>( Arrays.asList( pathElements ) );
+        
+        if ( servletPath.endsWith( "/" ) )
+        {
+            path.add( "index.html" );
+        }
+        
+        for ( Iterator<String> pathIterator = path.iterator(); pathIterator.hasNext(); )
+        {
+            String pathElement = pathIterator.next();
+            
+            if ( pathElement == null || pathElement.length() < 1 )
+            {
+                pathIterator.remove();
+            }
+        }
+        
+        return path;
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/HttpCMSRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/request/HttpCMSRequest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AbstractJSR170Session.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AbstractJSR170Session.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AbstractJSR170Session.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AbstractJSR170Session.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,69 @@
+package org.apache.maven.dynaweb.cms.session;
+
+import org.apache.maven.dynaweb.cms.document.CMSDocument;
+import org.apache.maven.dynaweb.cms.document.CMSDocumentInfo;
+import org.apache.maven.dynaweb.cms.document.NodeBackedCMSDocument;
+import org.apache.maven.dynaweb.cms.document.NodeBackedCMSDocumentInfo;
+import org.apache.maven.dynaweb.cms.request.CMSRequest;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+public abstract class AbstractJSR170Session
+    implements CMSSession
+{
+
+    private Session session;
+
+    protected void init( Session session )
+    {
+        this.session = session;
+    }
+
+    public CMSDocument getDocument( CMSRequest request )
+        throws CMSAccessException
+    {
+        List<String> pathElements = request.getPath();
+
+        Node node = getNode( pathElements );
+
+        return new NodeBackedCMSDocument( request, node );
+    }
+
+    private Node getNode( List<String> pathElements )
+        throws CMSAccessException
+    {
+        String path = StringUtils.join( pathElements.iterator(), "/" );
+
+        Node node;
+        try
+        {
+            node = session.getRootNode().getNode( path );
+        }
+        catch ( PathNotFoundException e )
+        {
+            throw new CMSPathNotFoundException( "Cannot find path: " + path, e );
+        }
+        catch ( RepositoryException e )
+        {
+            throw new CMSAccessException( "Error accessing CMS repository: " + e.getMessage(), e );
+        }
+
+        return node;
+    }
+
+    public CMSDocumentInfo getDocumentInfo( CMSRequest request )
+        throws CMSAccessException
+    {
+        List<String> pathElements = request.getPath();
+
+        Node node = getNode( pathElements );
+
+        return new NodeBackedCMSDocumentInfo( request, node );
+    }
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AbstractJSR170Session.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AbstractJSR170Session.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AnonymousJSR170Session.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AnonymousJSR170Session.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AnonymousJSR170Session.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AnonymousJSR170Session.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,12 @@
+package org.apache.maven.dynaweb.cms.session;
+
+public class AnonymousJSR170Session
+    extends AbstractJSR170Session
+    implements CMSSession
+{
+    
+    public AnonymousJSR170Session()
+    {
+        
+    }
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AnonymousJSR170Session.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AnonymousJSR170Session.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AuthenticatedJSR170Session.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AuthenticatedJSR170Session.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AuthenticatedJSR170Session.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AuthenticatedJSR170Session.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,14 @@
+package org.apache.maven.dynaweb.cms.session;
+
+import javax.jcr.Credentials;
+
+public class AuthenticatedJSR170Session
+    extends AbstractJSR170Session
+{
+    
+    public AuthenticatedJSR170Session( Credentials credentials )
+    {
+        // TODO: Not sure how to create the repository instance...
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AuthenticatedJSR170Session.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/AuthenticatedJSR170Session.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSAccessException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSAccessException.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSAccessException.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSAccessException.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,17 @@
+package org.apache.maven.dynaweb.cms.session;
+
+public class CMSAccessException
+    extends Exception
+{
+
+    public CMSAccessException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public CMSAccessException( String message )
+    {
+        super( message );
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSAccessException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSAccessException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSPathNotFoundException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSPathNotFoundException.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSPathNotFoundException.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSPathNotFoundException.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,17 @@
+package org.apache.maven.dynaweb.cms.session;
+
+public class CMSPathNotFoundException
+    extends CMSAccessException
+{
+
+    public CMSPathNotFoundException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public CMSPathNotFoundException( String message )
+    {
+        super( message );
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSPathNotFoundException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSPathNotFoundException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSSession.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSSession.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSSession.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSSession.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,18 @@
+package org.apache.maven.dynaweb.cms.session;
+
+import org.apache.maven.dynaweb.cms.document.CMSDocument;
+import org.apache.maven.dynaweb.cms.document.CMSDocumentInfo;
+import org.apache.maven.dynaweb.cms.request.CMSRequest;
+
+public interface CMSSession
+{
+
+    String ROLE = CMSSession.class.getName();
+
+    CMSDocument getDocument( CMSRequest request )
+        throws CMSAccessException;
+
+    CMSDocumentInfo getDocumentInfo( CMSRequest request )
+        throws CMSAccessException;
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSSession.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/main/java/org/apache/maven/dynaweb/cms/session/CMSSession.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/AppTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/AppTest.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/AppTest.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/AppTest.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,38 @@
+package org.apache.maven.dynaweb.doxia;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/AppTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-cms/src/test/java/org/apache/maven/dynaweb/doxia/AppTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/pom.xml?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/pom.xml (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/pom.xml Fri Sep  8 08:43:51 2006
@@ -0,0 +1,89 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>maven-dynamic-web</artifactId>
+    <groupId>org.apache.maven.dynaweb</groupId>
+    <version>1.0-alpha-1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.dynaweb</groupId>
+  <artifactId>dynaweb-display</artifactId>
+  <name>Maven Dynamic Web Rendering Engine</name>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>codehaus.snapshots</id>
+      <url>http://snapshots.repository.codehaus.org</url>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <dependencies>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.doxia</groupId>
+      <artifactId>doxia-site-renderer</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-container-default</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>create-component-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>merge</id>
+            <configuration>
+              <output>${project.build.outputDirectory}/META-INF/plexus/components.xml</output>
+              <descriptors>
+                <descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+                <descriptor>src/main/resources/META-INF/plexus/components.xml</descriptor>
+              </descriptors>
+            </configuration>
+            <goals>
+              <goal>merge-descriptors</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <configuration>
+            <source>1.5</source>
+            <target>1.5</target>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/DisplayConstants.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/DisplayConstants.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/DisplayConstants.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/DisplayConstants.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,24 @@
+package org.apache.maven.dynaweb.display;
+
+public interface DisplayConstants
+{
+
+    String MASTER_PLEXUS_CONTAINER_KEY = "dynaweb-container";
+    
+    String DOCUMENT_ROOT_PARAM_PREFIX = "document-root:";
+    
+    String SITE_DESCRIPTOR_PATH_INIT_PARAM = "site-descriptor";
+    
+    String DOCUMENT_LOADER_ROLE_HINT_PARAM = "document-loader";
+
+    String SITE_DESCRIPTOR_PATH_INIT_PARAM_DEFAULT = "/WEB-INF/site.xml";
+
+    String SKIN_JAR_PARAM = "skin-jar";
+
+    String SKIN_MANAGER_ROLE_HINT_PARAM = "skin-manager";
+
+    String FILTERED_EXTENSIONS_PARAM = "filtered-extensions";
+
+    String PATH_WITH_EXTENSION_PATTERN = ".+\\.[a-zA-Z0-9]+";
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/DisplayConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/DisplayConstants.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/DoxiaContentFilter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/DoxiaContentFilter.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/DoxiaContentFilter.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/DoxiaContentFilter.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,319 @@
+package org.apache.maven.dynaweb.display.filter;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.RendererException;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+import org.apache.maven.dynaweb.display.DisplayConstants;
+import org.apache.maven.dynaweb.display.loader.DocumentAccessException;
+import org.apache.maven.dynaweb.display.loader.DocumentLoader;
+import org.apache.maven.dynaweb.display.skin.SkinManager;
+import org.apache.maven.dynaweb.display.skin.SkinningException;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Render a page as requested.
+ * 
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DoxiaContentFilter
+    implements Filter
+{
+    
+    private Logger log = LogManager.getLogger( DoxiaContentFilter.class.getName() );
+    
+    private Renderer siteRenderer;
+
+    private DecorationModel decorationModel;
+
+    private DocumentLoader documentLoader;
+
+    private ServletContext servletContext;
+
+    private File skinJar;
+
+    private SkinManager skinManager;
+
+    private String filteredExtensions;
+
+    private FilterConfig filterConfig;
+
+    public void init( FilterConfig filterConfig )
+        throws ServletException
+    {
+        this.filterConfig = filterConfig;
+        
+        servletContext = filterConfig.getServletContext();
+        
+        filteredExtensions = filterConfig.getInitParameter( DisplayConstants.FILTERED_EXTENSIONS_PARAM );
+        
+        if ( filteredExtensions == null )
+        {
+            log( "ATTENTION! No document extensions are registered with Doxia filter!" );
+            filteredExtensions = "";
+        }
+
+        PlexusContainer container =
+            ( PlexusContainer ) servletContext.getAttribute( DisplayConstants.MASTER_PLEXUS_CONTAINER_KEY );
+
+        initSkin( container );
+
+        try
+        {
+            siteRenderer = ( Renderer ) container.lookup( Renderer.ROLE );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ServletException( "Error retrieving site-renderer instance: " + e.getMessage(), e );
+        }
+
+        initDocumentLoader( container );
+
+        initSiteDescriptor();
+    }
+
+    private void initSiteDescriptor()
+        throws ServletException
+    {
+        String siteDescriptorPath =
+            filterConfig.getInitParameter( DisplayConstants.SITE_DESCRIPTOR_PATH_INIT_PARAM );
+
+        if ( siteDescriptorPath == null )
+        {
+            siteDescriptorPath = DisplayConstants.SITE_DESCRIPTOR_PATH_INIT_PARAM_DEFAULT;
+        }
+
+        siteDescriptorPath = servletContext.getRealPath( siteDescriptorPath );
+
+        FileReader reader = null;
+
+        try
+        {
+            reader = new FileReader( siteDescriptorPath );
+
+            decorationModel = new DecorationXpp3Reader().read( reader );
+        }
+        catch ( IOException e )
+        {
+            throw new ServletException( "Failed to load site descriptor from: " + siteDescriptorPath, e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new ServletException( "Failed to load site descriptor from: " + siteDescriptorPath, e );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
+    }
+
+    private void initDocumentLoader( PlexusContainer container )
+        throws ServletException
+    {
+        String loaderHint = servletContext.getInitParameter( DisplayConstants.DOCUMENT_LOADER_ROLE_HINT_PARAM );
+
+        if ( loaderHint == null )
+        {
+            loaderHint = "default";
+        }
+
+        try
+        {
+            documentLoader = ( DocumentLoader ) container.lookup( DocumentLoader.ROLE, loaderHint );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ServletException( "Failed to initialize document-loader for: " + loaderHint, e );
+        }
+    }
+
+    private void initSkin( PlexusContainer container )
+        throws ServletException
+    {
+        String skinMgrHint = filterConfig.getInitParameter( DisplayConstants.SKIN_MANAGER_ROLE_HINT_PARAM );
+
+        if ( skinMgrHint == null )
+        {
+            throw new ServletException( "You must supply the context-param: "
+                            + DisplayConstants.SKIN_MANAGER_ROLE_HINT_PARAM );
+        }
+
+        try
+        {
+            skinManager = ( SkinManager ) container.lookup( SkinManager.ROLE );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ServletException( "Failed to lookup SkinManager instance for: " + skinMgrHint );
+        }
+
+        String skinPath = filterConfig.getInitParameter( DisplayConstants.SKIN_JAR_PARAM );
+
+        if ( skinPath == null )
+        {
+            throw new ServletException( "You must supply the context-param: " + DisplayConstants.SKIN_JAR_PARAM );
+        }
+
+        skinJar = new File( servletContext.getRealPath( skinPath ) );
+
+        if ( !skinJar.exists() || !skinJar.isFile() )
+        {
+            throw new ServletException( "Invalid value for " + DisplayConstants.SKIN_JAR_PARAM + " parameter. "
+                            + skinPath + " is missing or is not a normal file." );
+        }
+        
+        String contextPath = servletContext.getRealPath( "/" );
+        
+        File contextRoot = new File( contextPath );
+
+        try
+        {
+            skinManager.initializeSiteSkin( skinJar, contextRoot );
+        }
+        catch ( SkinningException e )
+        {
+            throw new ServletException( "Failed to load site skin from: " + skinPath + ".", e );
+        }
+    }
+
+    public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain )
+        throws IOException, ServletException
+    {
+        HttpServletRequest httpRequest = ( HttpServletRequest ) servletRequest;
+        
+        String ext = FileUtils.extension( httpRequest.getServletPath() );
+        
+        if ( filteredExtensions.indexOf( ext ) < 0 )
+        {
+            filterChain.doFilter( httpRequest, servletResponse );
+            return;
+        }
+
+        DocumentRenderer renderer;
+        try
+        {
+            renderer = documentLoader.load( httpRequest, servletContext );
+        }
+        catch ( DocumentAccessException e )
+        {
+            log( "Error retrieving document: " + httpRequest.getServletPath() );
+            throw new ServletException( "Error retrieving document." );
+        }
+
+        if ( renderer != null )
+        {
+            render( servletRequest, servletResponse, renderer );
+        }
+        else
+        {
+            log( "Doxia document not found for: " + httpRequest.getServletPath() );
+        }
+
+//        filterChain.doFilter( servletRequest, servletResponse );
+    }
+
+    private void render( ServletRequest request, ServletResponse servletResponse, DocumentRenderer renderer )
+        throws ServletException
+    {
+        HttpServletRequest httpRequest = (HttpServletRequest) request;
+        
+        String requestedDocumentPath = httpRequest.getServletPath();
+        Locale locale = request.getLocale();
+        
+        Map attributes = new HashMap();
+        
+        attributes.put( "servletContext", servletContext );
+        attributes.put( "request", request );
+        attributes.put( "contextPath", servletContext.getContextPath() );
+        
+        SiteRenderingContext context;
+        try
+        {
+            context = skinManager.createSiteRenderingContext( skinJar, locale, siteRenderer, attributes, decorationModel, servletContext );
+        }
+        catch ( SkinningException e )
+        {
+            log( "Error initializing rendering context for document: " + requestedDocumentPath, e );
+
+            throw new ServletException( "Error rendering document." );
+        }
+        
+        try
+        {
+            renderer.renderDocument( servletResponse.getWriter(), siteRenderer, context );
+        }
+        catch ( RendererException e )
+        {
+            log( "Error rendering document: " + requestedDocumentPath, e );
+
+            throw new ServletException( "Error rendering document." );
+        }
+        catch ( UnsupportedEncodingException e )
+        {
+            log( "Error rendering document: " + requestedDocumentPath, e );
+
+            throw new ServletException( "Error rendering document." );
+        }
+        catch ( IOException e )
+        {
+            log( "Error rendering document: " + requestedDocumentPath, e );
+
+            throw new ServletException( "Error rendering document." );
+        }
+    }
+    
+    private void log( String message, Throwable error )
+    {
+        log.info( message, error );
+    }
+
+    private void log( String message )
+    {
+        log.info( message );
+    }
+
+    public void destroy()
+    {
+    }
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/DoxiaContentFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/DoxiaContentFilter.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/PlexusInitializerFilter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/PlexusInitializerFilter.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/PlexusInitializerFilter.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/PlexusInitializerFilter.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,65 @@
+package org.apache.maven.dynaweb.display.filter;
+
+import org.apache.maven.dynaweb.display.DisplayConstants;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.PlexusContainerException;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+public class PlexusInitializerFilter
+    implements Filter
+{
+    
+    private PlexusContainer container;
+
+    public void destroy()
+    {
+        if ( container != null )
+        {
+            container.dispose();
+        }
+    }
+
+    public void doFilter( ServletRequest serverRequest, ServletResponse serverResponse, FilterChain chain )
+        throws IOException, ServletException
+    {
+        chain.doFilter( serverRequest, serverResponse );
+    }
+
+    public void init( FilterConfig filterConfig )
+        throws ServletException
+    {
+        ServletContext servletContext = filterConfig.getServletContext();
+        
+        container = ( PlexusContainer ) servletContext.getAttribute( DisplayConstants.MASTER_PLEXUS_CONTAINER_KEY );
+        
+        if ( container == null )
+        {
+            try
+            {
+                ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+                
+                servletContext.log( "Initializing plexus container with classloader: " + cloader );
+                
+                container = new DefaultPlexusContainer( DisplayConstants.MASTER_PLEXUS_CONTAINER_KEY, cloader );
+                container.start();
+                
+                servletContext.setAttribute( DisplayConstants.MASTER_PLEXUS_CONTAINER_KEY, container );
+            }
+            catch ( PlexusContainerException e )
+            {
+                throw new ServletException( "Failed to initialize Plexus container. Reason: " + e.getMessage(), e );
+            }
+        }
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/PlexusInitializerFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/PlexusInitializerFilter.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/RequestDumpFilter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/RequestDumpFilter.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/RequestDumpFilter.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/RequestDumpFilter.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,43 @@
+package org.apache.maven.dynaweb.display.filter;
+
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+public class RequestDumpFilter
+    implements Filter
+{
+    
+    private Logger log = LogManager.getLogger( RequestDumpFilter.class.getName() );
+    
+    public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
+        throws IOException, ServletException
+    {
+        HttpServletRequest httpRequest = (HttpServletRequest) request;
+        
+        log.info( "Request URI: " + httpRequest.getRequestURI() );
+        log.info( "Servlet Path: " + httpRequest.getServletPath() );
+        log.info( "Path Info: " + httpRequest.getPathInfo() );
+        
+        chain.doFilter( httpRequest, response );
+    }
+
+    public void init( FilterConfig filterConfig )
+        throws ServletException
+    {
+    }
+
+    public void destroy()
+    {
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/RequestDumpFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/filter/RequestDumpFilter.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentAccessException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentAccessException.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentAccessException.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentAccessException.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,30 @@
+package org.apache.maven.dynaweb.display.loader;
+
+public class DocumentAccessException
+    extends Exception
+{
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+    private final String path;
+
+    public DocumentAccessException( final String path, final String message, final Throwable cause )
+    {
+        super( "Error loading: " + path + ". " + message, cause );
+        this.path = path;
+    }
+
+    public DocumentAccessException( final String path, final String message )
+    {
+        super( "Error loading: " + path + ". " + message );
+        this.path = path;
+    }
+    
+    public String getPath()
+    {
+        return path;
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentAccessException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentAccessException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentLoader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentLoader.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentLoader.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentLoader.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,15 @@
+package org.apache.maven.dynaweb.display.loader;
+
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+public interface DocumentLoader
+{
+    String ROLE = DocumentLoader.class.getName();
+    
+    DocumentRenderer load( HttpServletRequest request, ServletContext context )
+        throws DocumentAccessException;
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/DocumentLoader.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/FileSystemDocumentLoader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/FileSystemDocumentLoader.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/FileSystemDocumentLoader.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/FileSystemDocumentLoader.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,192 @@
+package org.apache.maven.dynaweb.display.loader;
+
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+import org.apache.maven.doxia.siterenderer.DoxiaDocumentRenderer;
+import org.apache.maven.dynaweb.display.DisplayConstants;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @plexus.component role="org.apache.maven.dynaweb.display.loader.DocumentLoader" role-hint="file-system"
+ * @author jdcasey
+ * 
+ */
+public class FileSystemDocumentLoader
+    implements DocumentLoader
+{
+
+    private Logger log = LogManager.getLogger( FileSystemDocumentLoader.class.getName() );
+    
+    private Map documentRoots;
+
+    public DocumentRenderer load( HttpServletRequest request, ServletContext context )
+        throws DocumentAccessException
+    {
+        Map docRoots = getDocumentRoots( context );
+
+        String pathInfo = request.getServletPath();
+        
+        log.info( "Servlet-Path: \'" + pathInfo + "\'" );
+        
+//        if ( "".equals( pathInfo ) || pathInfo.endsWith( "/" ) )
+//        {
+//            pathInfo += "index.html";
+//        }
+
+        String docPath = normalizeFileSeparators( pathInfo );
+
+        String docDir;
+        String docBase;
+        
+        if ( docPath.matches( DisplayConstants.PATH_WITH_EXTENSION_PATTERN ) )
+        {
+            docDir = dirname( docPath );
+            docBase = basename( docPath );
+        }
+        else
+        {
+            if ( !docPath.endsWith( "/" ) )
+            {
+                docDir = docPath + "/";
+            }
+            else
+            {
+                docDir = docPath;
+            }
+            
+            docBase = "index";
+        }
+        
+        File directory = null;
+        String file = null;
+        
+        String type = null;
+
+        for ( Iterator it = docRoots.entrySet().iterator(); it.hasNext(); )
+        {
+            Map.Entry entry = ( Map.Entry ) it.next();
+
+            String ext = ( String ) entry.getKey();
+            File docRoot = ( File ) entry.getValue();
+
+            log.info( "Searching doc-root: \'" + docRoot.getAbsolutePath() + "\' for basename: \'" + docBase + "\' in dir: \'"
+                            + docDir + "\' of type: \'" + ext + "\'" );
+
+            File dir = new File( docRoot, docDir );
+            if ( dir.exists() )
+            {
+                String filename = docBase + "." + ext;
+                
+                File doc = new File( dir, filename );
+
+                if ( doc.exists() )
+                {
+                    directory = dir;
+                    file = filename;
+                    type = ext;
+
+                    break;
+                }
+            }
+        }
+
+        DocumentRenderer docRenderer = null;
+
+        if ( directory != null && file != null )
+        {
+            RenderingContext rContext = new RenderingContext( directory, file, type );
+
+            docRenderer = new DoxiaDocumentRenderer( rContext );
+        }
+        
+        return docRenderer;
+    }
+
+    private String normalizeFileSeparators( String src )
+    {
+        String path = StringUtils.replace( src, '/', File.separatorChar );
+        path = StringUtils.replace( path, '\\', File.separatorChar );
+
+        return path;
+    }
+
+    private String basename( String docPath )
+    {
+        int lastFileSep = docPath.lastIndexOf( File.separatorChar );
+        if ( lastFileSep < 0 )
+        {
+            lastFileSep = -1;
+        }
+
+        int lastDot = docPath.lastIndexOf( '.' );
+
+        if ( lastDot <= lastFileSep )
+        {
+            lastDot = docPath.length();
+        }
+
+        String base = docPath.substring( lastFileSep + 1, lastDot );
+
+        return base;
+    }
+
+    private String dirname( String docPath )
+    {
+        int lastFileSep = docPath.lastIndexOf( File.separatorChar );
+        if ( lastFileSep < 0 )
+        {
+            lastFileSep = docPath.length();
+        }
+
+        String base = docPath.substring( 0, lastFileSep );
+
+        return base;
+    }
+
+    private Map getDocumentRoots( ServletContext context )
+    {
+        if ( documentRoots == null )
+        {
+            documentRoots = new LinkedHashMap();
+
+            Enumeration e = context.getInitParameterNames();
+
+            while ( e.hasMoreElements() )
+            {
+                String paramName = ( String ) e.nextElement();
+
+                if ( paramName.startsWith( DisplayConstants.DOCUMENT_ROOT_PARAM_PREFIX ) )
+                {
+                    String sourceType =
+                        paramName.substring( DisplayConstants.DOCUMENT_ROOT_PARAM_PREFIX.length() );
+
+                    String path = context.getInitParameter( paramName );
+
+                    path = context.getRealPath( path );
+
+                    path = normalizeFileSeparators( path );
+
+                    if ( !path.endsWith( File.separator ) )
+                    {
+                        path += File.separator;
+                    }
+
+                    documentRoots.put( sourceType, new File( path ) );
+                }
+            }
+        }
+
+        return documentRoots;
+    }
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/FileSystemDocumentLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/loader/FileSystemDocumentLoader.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SimpleSkinManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SimpleSkinManager.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SimpleSkinManager.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SimpleSkinManager.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,128 @@
+package org.apache.maven.dynaweb.display.skin;
+
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+import org.codehaus.plexus.util.IOUtil;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Map;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import javax.servlet.ServletContext;
+
+/**
+ * @plexus.component role="org.apache.maven.dynaweb.display.skin.SkinManager" role-hint="simple"
+ * 
+ * @author jdcasey
+ */
+public class SimpleSkinManager
+    implements SkinManager
+{
+
+    public SiteRenderingContext createSiteRenderingContext( File skinJar, Locale locale, Renderer siteRenderer,
+                                                            Map attributes, DecorationModel decorationModel,
+                                                            ServletContext servletContext )
+        throws SkinningException
+    {
+        SiteRenderingContext context;
+
+        try
+        {
+            context =
+                siteRenderer.createContextForSkin( skinJar, attributes, decorationModel,
+                                                   servletContext.getServletContextName(), locale );
+        }
+        catch ( IOException e )
+        {
+            throw new SkinningException( "Failed to open skin jar: " + skinJar + " for rendering context creation.", e );
+        }
+
+        context.setDecoration( decorationModel );
+
+        return context;
+    }
+
+    public void initializeSiteSkin( File skinJar, File docRoot )
+        throws SkinningException
+    {
+        JarFile jar;
+        
+        try
+        {
+            jar = new JarFile( skinJar );
+        }
+        catch ( IOException e )
+        {
+            throw new SkinningException( "Failed to open skin-jar: " + skinJar, e );
+        }
+        
+        Enumeration entries = jar.entries();
+        
+        while( entries.hasMoreElements() )
+        {
+            JarEntry entry = (JarEntry) entries.nextElement();
+            
+            InputStream inStream = null;
+            OutputStream outStream = null;
+            
+            try
+            {
+                try
+                {
+                    inStream = jar.getInputStream( entry );
+                }
+                catch ( IOException e )
+                {
+                    throw new SkinningException( "Failed to extract: " + entry.getName() + " from: " + skinJar, e );
+                }
+                
+                String name = entry.getName();
+                if ( entry.isDirectory() || name.indexOf( "META-INF" ) > -1 )
+                {
+                    continue;
+                }
+                
+                if ( name.startsWith( "/" ) )
+                {
+                    name = name.substring( 1 );
+                }
+                
+                File target = new File( docRoot, name );
+                target.getParentFile().mkdirs();
+                
+                try
+                {
+                    outStream = new FileOutputStream( target );
+                }
+                catch ( FileNotFoundException e )
+                {
+                    throw new SkinningException( "Failed to open: " + target, e );
+                }
+                
+                try
+                {
+                    IOUtil.copy( inStream, outStream );
+                }
+                catch ( IOException e )
+                {
+                    throw new SkinningException( "Failed to extract: " + name + " to: " + target, e );
+                }
+            }
+            finally
+            {
+                IOUtil.close( inStream );
+                IOUtil.close( outStream );
+            }
+        }
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SimpleSkinManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SimpleSkinManager.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinManager.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinManager.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinManager.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,26 @@
+package org.apache.maven.dynaweb.display.skin;
+
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+
+import java.io.File;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+public interface SkinManager
+{
+    
+    String ROLE = SkinManager.class.getName();
+
+    void initializeSiteSkin( File skinJar, File docRoot )
+        throws SkinningException;
+
+    SiteRenderingContext createSiteRenderingContext( File skinJar, Locale locale, Renderer siteRenderer,
+                                                     Map attributes, DecorationModel decorationModel,
+                                                     ServletContext servletContext )
+        throws SkinningException;
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinManager.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinningException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinningException.java?view=auto&rev=441544
==============================================================================
--- maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinningException.java (added)
+++ maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinningException.java Fri Sep  8 08:43:51 2006
@@ -0,0 +1,17 @@
+package org.apache.maven.dynaweb.display.skin;
+
+public class SkinningException
+    extends Exception
+{
+
+    public SkinningException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public SkinningException( String message )
+    {
+        super( message );
+    }
+
+}

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinningException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-dynamic-web/dynaweb-display/src/main/java/org/apache/maven/dynaweb/display/skin/SkinningException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"