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"