You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2009/08/29 17:11:42 UTC

svn commit: r809145 - /maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/

Author: olamy
Date: Sat Aug 29 15:11:41 2009
New Revision: 809145

URL: http://svn.apache.org/viewvc?rev=809145&view=rev
Log:
use a new bean to transport report execution information. 
it will help for future (and replace the ugly Map<MavenReport,ClassLoader>

Added:
    maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecution.java   (with props)
Modified:
    maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java
    maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java
    maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecutor.java
    maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java
    maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
    maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java

Modified: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java?rev=809145&r1=809144&r2=809145&view=diff
==============================================================================
--- maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java (original)
+++ maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java Sat Aug 29 15:11:41 2009
@@ -193,12 +193,12 @@
    */   
    protected MavenReportExecutor mavenReportExecutor;
 
-    protected Map<MavenReport, ClassLoader> getReports()
+    protected List<MavenReportExecution> getReports()
         throws MojoExecutionException
     {
         if ( this.project.getReporting() == null || this.project.getReporting().getPlugins().isEmpty() )
         {
-            return Collections.emptyMap();
+            return Collections.emptyList();
         }
         MavenReportExecutorRequest mavenReportExecutorRequest = new MavenReportExecutorRequest();
         mavenReportExecutorRequest.setLocalRepository( localRepository );
@@ -207,17 +207,18 @@
         return mavenReportExecutor.buildMavenReports( mavenReportExecutorRequest );
     }
 
-    protected Map<MavenReport, ClassLoader> filterReports( Map<MavenReport, ClassLoader> reports )
+    protected List<MavenReportExecution> filterReports( List<MavenReportExecution> reports )
     {
-        Map<MavenReport, ClassLoader> filteredReports = new HashMap<MavenReport, ClassLoader>();
-        for ( MavenReport report : reports.keySet() )
+        List<MavenReportExecution> filteredReports = new ArrayList<MavenReportExecution>();
+        for ( MavenReportExecution mavenReportExecution : reports )
         {
             // noinspection ErrorNotRethrown,UnusedCatchParameter
+            MavenReport report = mavenReportExecution.getMavenReport();
             try
             {
                 if ( report.canGenerateReport() )
                 {
-                    filteredReports.put( report, reports.get( report ) );
+                    filteredReports.add( mavenReportExecution );
                 }
             }
             catch ( AbstractMethodError e )
@@ -229,7 +230,7 @@
                 getLog().warn(
                                "Error loading report " + report.getClass().getName()
                                    + " - AbstractMethodError: canGenerateReport()" );
-                filteredReports.put( report, reports.get( report ) );
+                filteredReports.add( mavenReportExecution );
             }
         }
         return filteredReports;
@@ -345,12 +346,16 @@
      * @return A map with all reports keyed by filename having the report itself as value. The map will be used to
      * populate a menu.
      */
-    protected Map locateReports( Map<MavenReport, ClassLoader> reports, Map documents, Locale locale )
+    protected Map<String, MavenReport> locateReports( List<MavenReportExecution> reports, Map documents, Locale locale )
     {
-        Map reportsByOutputName = new HashMap();
-        for ( Iterator i = reports.keySet().iterator(); i.hasNext(); )
+        // copy Collection to prevent ConcurrentModificationException
+        List<MavenReportExecution> filtered = new ArrayList<MavenReportExecution>(reports);
+
+        Map<String, MavenReport> reportsByOutputName = new HashMap<String, MavenReport>();
+        for ( Iterator<MavenReportExecution> iterator = filtered.iterator(); iterator.hasNext(); )
         {
-            MavenReport report = (MavenReport) i.next();
+            MavenReportExecution mavenReportExecution = iterator.next();
+            MavenReport report = mavenReportExecution.getMavenReport();
 
             String outputName = report.getOutputName() + ".html";
 
@@ -363,12 +368,12 @@
 
                 getLog().info( "Skipped \"" + report.getName( locale ) + "\" report, file \"" + outputName
                                    + "\" already exists for the " + displayLanguage + " version." );
-                i.remove();
+                reports.remove( mavenReportExecution );
             }
             else
             {
                 RenderingContext renderingContext = new RenderingContext( siteDirectory, outputName );
-                ReportDocumentRenderer renderer = new ReportDocumentRenderer( report, renderingContext, getLog(), reports.get( report ) );
+                ReportDocumentRenderer renderer = new ReportDocumentRenderer( mavenReportExecution, renderingContext, getLog() );
                 documents.put( outputName, renderer );
             }
         }
@@ -399,7 +404,7 @@
         return categories;
     }
 
-    protected Map locateDocuments( SiteRenderingContext context, Map<MavenReport, ClassLoader> reports, Locale locale )
+    protected Map locateDocuments( SiteRenderingContext context, List<MavenReportExecution> reports, Locale locale )
         throws IOException, RendererException
     {
         Map documents = siteRenderer.locateDocumentFiles( context );

Modified: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java?rev=809145&r1=809144&r2=809145&view=diff
==============================================================================
--- maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java (original)
+++ maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java Sat Aug 29 15:11:41 2009
@@ -20,9 +20,7 @@
  */
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
 import org.apache.maven.artifact.repository.RepositoryRequest;
@@ -63,7 +61,7 @@
     @Requirement
     protected LifecycleExecutor lifecycleExecutor;
 
-    public Map<MavenReport, ClassLoader> buildMavenReports( MavenReportExecutorRequest mavenReportExecutorRequest )
+    public List<MavenReportExecution> buildMavenReports( MavenReportExecutorRequest mavenReportExecutorRequest )
         throws MojoExecutionException
     {
 
@@ -83,7 +81,7 @@
         try
         {
 
-            Map<MavenReport, ClassLoader> reports = new HashMap<MavenReport, ClassLoader>();
+            List<MavenReportExecution> reports = new ArrayList<MavenReportExecution>();
 
             for ( ReportPlugin reportPlugin : mavenReportExecutorRequest.getProject().getReporting().getPlugins() )
             {
@@ -138,7 +136,9 @@
                         getConfiguredMavenReport( mojoExecution, pluginDescriptor, mavenReportExecutorRequest );
                     if ( mavenReport != null )
                     {
-                        reports.put( mavenReport, pluginDescriptor.getClassRealm() );
+                        MavenReportExecution mavenReportExecution =
+                            new MavenReportExecution( mavenReport, pluginDescriptor.getClassRealm() );
+                        reports.add( mavenReportExecution );
                     }
                 }
             }

Added: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecution.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecution.java?rev=809145&view=auto
==============================================================================
--- maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecution.java (added)
+++ maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecution.java Sat Aug 29 15:11:41 2009
@@ -0,0 +1,60 @@
+package org.apache.maven.plugins.site;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.reporting.MavenReport;
+
+/**
+ *  
+ * @author Olivier Lamy
+ * @since 3.0-beta-1
+ */
+public class MavenReportExecution
+{
+    private MavenReport mavenReport;
+
+    private ClassLoader classLoader;
+
+    public MavenReportExecution( MavenReport mavenReport, ClassLoader classLoader )
+    {
+        this.mavenReport = mavenReport;
+        this.classLoader = classLoader;
+    }
+
+    public MavenReport getMavenReport()
+    {
+        return mavenReport;
+    }
+
+    public void setMavenReport( MavenReport mavenReport )
+    {
+        this.mavenReport = mavenReport;
+    }
+
+    public ClassLoader getClassLoader()
+    {
+        return classLoader;
+    }
+
+    public void setClassLoader( ClassLoader classLoader )
+    {
+        this.classLoader = classLoader;
+    }
+}

Propchange: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecution.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecution.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecutor.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecutor.java?rev=809145&r1=809144&r2=809145&view=diff
==============================================================================
--- maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecutor.java (original)
+++ maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/MavenReportExecutor.java Sat Aug 29 15:11:41 2009
@@ -19,10 +19,9 @@
  * under the License.
  */
 
-import java.util.Map;
+import java.util.List;
 
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.reporting.MavenReport;
 
 /**
  *  
@@ -31,6 +30,8 @@
  */
 public interface MavenReportExecutor
 {
-    Map<MavenReport, ClassLoader> buildMavenReports(MavenReportExecutorRequest mavenReportExecutorRequest)
+    // FIXME create a bean which contains MavenReport, ClassLoader and other stuff
+    //       to prevent this and will be more easily extensible
+    List<MavenReportExecution> buildMavenReports(MavenReportExecutorRequest mavenReportExecutorRequest)
         throws MojoExecutionException;
 }

Modified: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java?rev=809145&r1=809144&r2=809145&view=diff
==============================================================================
--- maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java (original)
+++ maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java Sat Aug 29 15:11:41 2009
@@ -53,23 +53,20 @@
 public class ReportDocumentRenderer
     implements DocumentRenderer
 {
-    private MavenReport report;
+    private MavenReportExecution mavenReportExecution;
 
     private RenderingContext renderingContext;
 
     private Log log;
     
-    private ClassLoader classLoader;
-
-    public ReportDocumentRenderer( MavenReport report, RenderingContext renderingContext, Log log, ClassLoader classLoader )
+    public ReportDocumentRenderer( MavenReportExecution mavenReportExecution, RenderingContext renderingContext, Log log)
     {
-        this.report = report;
+        this.mavenReportExecution = mavenReportExecution;
 
         this.renderingContext = renderingContext;
 
         this.log = log;
         
-        this.classLoader = classLoader;
     }
 
     private static class MySink
@@ -148,6 +145,9 @@
         throws RendererException, FileNotFoundException
     {
         Locale locale = siteRenderingContext.getLocale();
+        
+        MavenReport report = mavenReportExecution.getMavenReport();
+        
         String localReportName = report.getName( locale );
         log.info( "Generating \"" + localReportName + "\" report." );
 
@@ -155,7 +155,7 @@
 
         SiteRendererSink sink = new SiteRendererSink( renderingContext );
         ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
-        Thread.currentThread().setContextClassLoader( this.classLoader );
+        Thread.currentThread().setContextClassLoader( this.mavenReportExecution.getClassLoader() );
         try
         {
             if ( report instanceof MavenMultiPageReport )
@@ -242,6 +242,6 @@
      */
     public boolean isExternalReport()
     {
-        return report.isExternalReport();
+        return mavenReportExecution.getMavenReport().isExternalReport();
     }
 }

Modified: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteMojo.java?rev=809145&r1=809144&r2=809145&view=diff
==============================================================================
--- maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteMojo.java (original)
+++ maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteMojo.java Sat Aug 29 15:11:41 2009
@@ -77,14 +77,14 @@
         throws MojoExecutionException, MojoFailureException
     {
 
-        Map<MavenReport, ClassLoader> filteredReports;
+        List<MavenReportExecution> filteredReports; 
         if ( generateReports )
         {
             filteredReports = filterReports( getReports() );
         }
         else
         {
-            filteredReports = Collections.emptyMap();
+            filteredReports = Collections.emptyList();
         }
 
         try
@@ -112,7 +112,7 @@
         }
     }
 
-    private void renderLocale( Locale locale, Map<MavenReport, ClassLoader> reports )
+    private void renderLocale( Locale locale, List<MavenReportExecution> reports )
         throws IOException, RendererException, MojoFailureException, MojoExecutionException
     {
         SiteRenderingContext context = createSiteRenderingContext( locale );
@@ -125,9 +125,9 @@
         File outputDir = getOutputDirectory( locale );
 
         // For external reports
-        for ( Iterator i = reports.keySet().iterator(); i.hasNext(); )
+        for ( MavenReportExecution mavenReportExecution : reports )
         {
-            MavenReport report = (MavenReport) i.next();
+            MavenReport report = mavenReportExecution.getMavenReport();
             report.setReportOutputDirectory( outputDir );
         }
 

Modified: maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java?rev=809145&r1=809144&r2=809145&view=diff
==============================================================================
--- maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java (original)
+++ maven/plugins/branches/maven-site-plugin-3.x/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java Sat Aug 29 15:11:41 2009
@@ -151,12 +151,12 @@
 
         // For external reports
         project.getReporting().setOutputDirectory( tempWebappDirectory.getAbsolutePath() );
-        for ( MavenReport report : getReports().keySet() )
+        for ( MavenReportExecution mavenReportExecution : getReports() )
         {
-            report.setReportOutputDirectory( tempWebappDirectory );
+            mavenReportExecution.getMavenReport().setReportOutputDirectory( tempWebappDirectory );
         }
 
-        Map<MavenReport, ClassLoader> filteredReports = filterReports( getReports() );
+        List<MavenReportExecution> filteredReports = filterReports( getReports() );
 
         List localesList = siteTool.getAvailableLocales( locales );
         webapp.setAttribute( DoxiaFilter.LOCALES_LIST_KEY, localesList );