You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by vs...@apache.org on 2006/08/21 22:55:55 UTC
svn commit: r433356 - in
/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site:
SiteRunMojo.java webapp/DoxiaBean.java webapp/DoxiaFilter.java
Author: vsiveton
Date: Mon Aug 21 13:55:54 2006
New Revision: 433356
URL: http://svn.apache.org/viewvc?rev=433356&view=rev
Log:
MSITE-114: "Frenglish" project info reports with site:run
o removed context.setLocale( req.getLocale() );
o refactoring to handle <locales/> in DoxiaFilter
Added:
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaBean.java (with props)
Modified:
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java
Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java?rev=433356&r1=433355&r2=433356&view=diff
==============================================================================
--- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java (original)
+++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java Mon Aug 21 13:55:54 2006
@@ -16,9 +16,22 @@
* limitations under the License.
*/
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.site.webapp.DoxiaBean;
+import org.apache.maven.plugins.site.webapp.DoxiaFilter;
import org.apache.maven.reporting.MavenReport;
import org.codehaus.plexus.util.IOUtil;
import org.mortbay.jetty.Connector;
@@ -28,16 +41,6 @@
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
/**
* Start the site up, rendering documents as requested for fast editing.
*
@@ -65,6 +68,9 @@
private static final int MAX_IDLE_TIME = 30000;
+ /**
+ * @see org.apache.maven.plugin.AbstractMojo#execute()
+ */
public void execute()
throws MojoExecutionException, MojoFailureException
{
@@ -72,7 +78,7 @@
server.setStopAtShutdown( true );
Connector defaultConnector = getDefaultConnector();
- server.setConnectors( new Connector[]{defaultConnector} );
+ server.setConnectors( new Connector[] { defaultConnector } );
WebAppContext webapp = createWebApplication();
webapp.setServer( server );
@@ -92,7 +98,7 @@
}
catch ( Exception e )
{
- throw new MojoExecutionException( "Error executing Jetty", e );
+ throw new MojoExecutionException( "Error executing Jetty: " + e.getMessage(), e );
}
// Watch it
@@ -137,19 +143,20 @@
WebAppContext webapp = new WebAppContext();
webapp.setContextPath( "/" );
webapp.setResourceBase( tempWebappDirectory.getAbsolutePath() );
- webapp.setAttribute( "siteRenderer", siteRenderer );
+ webapp.setAttribute( DoxiaFilter.SITE_RENDERER_KEY, siteRenderer );
// For external reports
project.getReporting().setOutputDirectory( tempWebappDirectory.getAbsolutePath() );
for ( Iterator i = reports.iterator(); i.hasNext(); )
{
- MavenReport report = ( MavenReport ) i.next();
+ MavenReport report = (MavenReport) i.next();
report.setReportOutputDirectory( tempWebappDirectory );
}
List filteredReports = filterReports( reports );
List localesList = getAvailableLocales();
+ webapp.setAttribute( DoxiaFilter.LOCALES_LIST_KEY, localesList );
// Default is first in the list
Locale defaultLocale = (Locale) localesList.get( 0 );
@@ -157,17 +164,44 @@
try
{
- // TODO: better i18n handling
- Locale locale = Locale.getDefault();
- SiteRenderingContext context = createSiteRenderingContext( locale );
- webapp.setAttribute( "context", context );
-
- Map documents = locateDocuments( context, filteredReports, locale );
- webapp.setAttribute( "documents", documents );
+ Map i18nDoxiaContexts = new HashMap();
- webapp.setAttribute( "generatedSiteDirectory", generatedSiteDirectory );
+ for ( Iterator it = localesList.iterator(); it.hasNext(); )
+ {
+ Locale locale = (Locale) it.next();
+
+ SiteRenderingContext i18nContext = createSiteRenderingContext( locale );
+ Map i18nDocuments = locateDocuments( i18nContext, filteredReports, locale );
+ DoxiaBean doxiaBean;
+ if ( defaultLocale.equals( locale ) )
+ {
+ doxiaBean = new DoxiaBean( i18nContext, i18nDocuments, generatedSiteDirectory );
+ }
+ else
+ {
+ doxiaBean = new DoxiaBean( i18nContext, i18nDocuments, new File( generatedSiteDirectory, locale
+ .getLanguage() ) );
+ }
+
+ i18nDoxiaContexts.put( locale.getLanguage(), doxiaBean );
+ if ( defaultLocale.equals( locale ) )
+ {
+ i18nDoxiaContexts.put( "default", doxiaBean );
+ }
+
+ if ( defaultLocale.equals( locale ) )
+ {
+ siteRenderer.copyResources( i18nContext, new File( siteDirectory, "resources" ),
+ tempWebappDirectory );
+ }
+ else
+ {
+ siteRenderer.copyResources( i18nContext, new File( siteDirectory, "resources" ),
+ new File( tempWebappDirectory, locale.getLanguage() ) );
+ }
+ }
- siteRenderer.copyResources( context, new File( siteDirectory, "resources" ), tempWebappDirectory );
+ webapp.setAttribute( DoxiaFilter.I18N_DOXIA_CONTEXTS_KEY, i18nDoxiaContexts );
}
catch ( Exception e )
{
Added: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaBean.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaBean.java?rev=433356&view=auto
==============================================================================
--- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaBean.java (added)
+++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaBean.java Mon Aug 21 13:55:54 2006
@@ -0,0 +1,80 @@
+package org.apache.maven.plugins.site.webapp;
+
+/*
+ * 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 java.io.File;
+import java.util.Map;
+
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+
+/**
+ * Bean to handle Doxia in a servlet context attribute
+ *
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public class DoxiaBean
+{
+ private SiteRenderingContext context;
+
+ private Map documents;
+
+ private File generatedSiteDirectory;
+
+ /**
+ * @param context
+ * @param documents
+ * @param generatedSiteDirectory
+ */
+ public DoxiaBean( SiteRenderingContext context, Map documents,
+ File generatedSiteDirectory )
+ {
+ this.context = context;
+ this.documents = documents;
+ this.generatedSiteDirectory = generatedSiteDirectory;
+ }
+
+ public SiteRenderingContext getContext()
+ {
+ return context;
+ }
+
+ public void setContext( SiteRenderingContext context )
+ {
+ this.context = context;
+ }
+
+ public Map getDocuments()
+ {
+ return documents;
+ }
+
+ public void setDocuments( Map documents )
+ {
+ this.documents = documents;
+ }
+
+ public File getGeneratedSiteDirectory()
+ {
+ return generatedSiteDirectory;
+ }
+
+ public void setGeneratedSiteDirectory( File generatedSiteDirectory )
+ {
+ this.generatedSiteDirectory = generatedSiteDirectory;
+ }
+}
Propchange: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaBean.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaBean.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java?rev=433356&r1=433355&r2=433356&view=diff
==============================================================================
--- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java (original)
+++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java Mon Aug 21 13:55:54 2006
@@ -35,6 +35,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
/**
@@ -45,15 +46,17 @@
public class DoxiaFilter
implements Filter
{
- private Renderer siteRenderer;
+ public static final String SITE_RENDERER_KEY = "siteRenderer";
+
+ public static final String I18N_DOXIA_CONTEXTS_KEY = "i18nDoxiaContexts";
- private SiteRenderingContext context;
+ public static final String LOCALES_LIST_KEY = "localesList";
- private Map documents;
+ private Renderer siteRenderer;
- private File generatedSiteDirectory;
+ private Map i18nDoxiaContexts;
- private List originalSiteDirectories;
+ private List localesList;
/**
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
@@ -62,11 +65,12 @@
throws ServletException
{
ServletContext servletContext = filterConfig.getServletContext();
- siteRenderer = (Renderer) servletContext.getAttribute( "siteRenderer" );
- context = (SiteRenderingContext) servletContext.getAttribute( "context" );
- documents = (Map) servletContext.getAttribute( "documents" );
- generatedSiteDirectory = (File) servletContext.getAttribute( "generatedSiteDirectory" );
- originalSiteDirectories = new ArrayList( context.getSiteDirectories() );
+
+ siteRenderer = (Renderer) servletContext.getAttribute( SITE_RENDERER_KEY );
+
+ i18nDoxiaContexts = (Map) servletContext.getAttribute( I18N_DOXIA_CONTEXTS_KEY );
+
+ localesList = (List) servletContext.getAttribute( LOCALES_LIST_KEY );
}
/**
@@ -77,28 +81,73 @@
{
HttpServletRequest req = (HttpServletRequest) servletRequest;
+ // ----------------------------------------------------------------------
+ // Handle the servlet path
+ // ----------------------------------------------------------------------
String path = req.getServletPath();
+ // welcome file
if ( path.endsWith( "/" ) )
{
path += "index.html";
}
+ // Remove the /
path = path.substring( 1 );
- if ( documents.containsKey( path ) )
+ // Handle locale request
+ SiteRenderingContext context;
+ Map documents;
+ File generatedSiteDirectory;
+
+ String localeWanted = null;
+ for ( Iterator it = localesList.iterator(); it.hasNext(); )
{
- // TODO: documents are not right for the locale
- context.setLocale( req.getLocale() );
+ Locale locale = (Locale) it.next();
+
+ if ( path.startsWith( locale.getLanguage() + "/" ) )
+ {
+ localeWanted = locale.toString();
+ path = path.substring( locale.getLanguage().length() + 1 );
+ }
+ }
+ if ( localeWanted == null )
+ {
+ DoxiaBean defaultDoxiaBean = (DoxiaBean) i18nDoxiaContexts.get( "default" );
+ if ( defaultDoxiaBean == null )
+ {
+ throw new ServletException( "No doxia bean found for the default locale" );
+ }
+ context = defaultDoxiaBean.getContext();
+ documents = defaultDoxiaBean.getDocuments();
+ generatedSiteDirectory = defaultDoxiaBean.getGeneratedSiteDirectory();
+ }
+ else
+ {
+ DoxiaBean i18nDoxiaBean = (DoxiaBean) i18nDoxiaContexts.get( localeWanted );
+ if ( i18nDoxiaBean == null )
+ {
+ throw new ServletException( "No doxia bean found for the locale " + localeWanted );
+ }
+ context = i18nDoxiaBean.getContext();
+ documents = i18nDoxiaBean.getDocuments();
+ generatedSiteDirectory = i18nDoxiaBean.getGeneratedSiteDirectory();
+ }
+
+ // ----------------------------------------------------------------------
+ // Handle report and documents
+ // ----------------------------------------------------------------------
+ if ( documents.containsKey( path ) )
+ {
try
{
DocumentRenderer renderer = (DocumentRenderer) documents.get( path );
renderer.renderDocument( servletResponse.getWriter(), siteRenderer, context );
- if (renderer instanceof ReportDocumentRenderer)
+ if ( renderer instanceof ReportDocumentRenderer )
{
ReportDocumentRenderer reportDocumentRenderer = (ReportDocumentRenderer) renderer;
- if (reportDocumentRenderer.isExternalReport())
+ if ( reportDocumentRenderer.isExternalReport() )
{
try
{
@@ -126,9 +175,6 @@
if ( locateDocuments.containsKey( path ) )
{
- // TODO: documents are not right for the locale
- context.setLocale( req.getLocale() );
-
DocumentRenderer renderer = (DocumentRenderer) locateDocuments.get( path );
renderer.renderDocument( servletResponse.getWriter(), siteRenderer, context );
}
@@ -137,6 +183,8 @@
{
throw new ServletException( e );
}
+
+ List originalSiteDirectories = new ArrayList( context.getSiteDirectories() );
for ( Iterator i = originalSiteDirectories.iterator(); i.hasNext(); )
{
File dir = (File) i.next();