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();