Author: vsiveton
Date: Mon Jul 14 06:16:07 2008
New Revision: 676578

URL: http://svn.apache.org/viewvc?rev=676578&view=rev
Log:
MPIR-125: Create a plugin report

o first implementation
o added some keys

Added:
    
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/PluginsReport.java
   (with props)
Modified:
    
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties
    
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report_fr.properties

Added: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/PluginsReport.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/PluginsReport.java?rev=676578&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/PluginsReport.java
 (added)
+++ 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/PluginsReport.java
 Mon Jul 14 06:16:07 2008
@@ -0,0 +1,307 @@
+package org.apache.maven.report.projectinfo;
+
+/*
+ * 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 java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.report.projectinfo.dependencies.ArtifactUtils;
+import org.apache.maven.reporting.AbstractMavenReportRenderer;
+import org.codehaus.plexus.i18n.I18N;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Generates the Project Plugins report.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a>
+ * @version $Id$
+ * @since 2.1
+ * @goal plugins
+ * @requiresDependencyResolution test
+ */
+public class PluginsReport
+    extends AbstractProjectInfoReport
+{
+    // ----------------------------------------------------------------------
+    // Mojo components
+    // ----------------------------------------------------------------------
+
+    /**
+     * Maven Project Builder component.
+     *
+     * @component
+     */
+    private MavenProjectBuilder mavenProjectBuilder;
+
+    /**
+     * Maven Artifact Factory component.
+     *
+     * @component
+     */
+    private ArtifactFactory artifactFactory;
+
+    // ----------------------------------------------------------------------
+    // Public methods
+    // ----------------------------------------------------------------------
+
+    /** [EMAIL PROTECTED] */
+    public String getName( Locale locale )
+    {
+        return i18n.getString( "project-info-report", locale, 
"report.plugins.name" );
+    }
+
+    /** [EMAIL PROTECTED] */
+    public String getDescription( Locale locale )
+    {
+        return i18n.getString( "project-info-report", locale, 
"report.plugins.description" );
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void executeReport( Locale locale )
+    {
+        PluginsRenderer r = new PluginsRenderer( getLog(), getSink(), locale, 
i18n, project.getPluginArtifacts(),
+                                                 project.getReportArtifacts(), 
project, mavenProjectBuilder,
+                                                 artifactFactory, 
localRepository );
+        r.render();
+    }
+
+    /** [EMAIL PROTECTED] */
+    public String getOutputName()
+    {
+        return "plugins";
+    }
+
+    /** [EMAIL PROTECTED] */
+    public boolean canGenerateReport()
+    {
+        return ( project.getPluginArtifacts() != null && 
!project.getPluginArtifacts().isEmpty() )
+            || ( project.getReportArtifacts() != null && 
!project.getReportArtifacts().isEmpty() );
+    }
+
+    // ----------------------------------------------------------------------
+    // Private
+    // ----------------------------------------------------------------------
+
+    /**
+     * Internal renderer class
+     */
+    protected static class PluginsRenderer
+        extends AbstractMavenReportRenderer
+    {
+        private final Log log;
+
+        private final List plugins;
+
+        private final List reports;
+
+        private final Locale locale;
+
+        private final I18N i18n;
+
+        private final MavenProject project;
+
+        private final MavenProjectBuilder mavenProjectBuilder;
+
+        private final ArtifactFactory artifactFactory;
+
+        private final ArtifactRepository localRepository;
+
+        /**
+         * @param log
+         * @param sink
+         * @param locale
+         * @param i18n
+         * @param plugins
+         * @param reports
+         * @param project
+         * @param mavenProjectBuilder
+         * @param artifactFactory
+         * @param localRepository
+         */
+        public PluginsRenderer( Log log, Sink sink, Locale locale, I18N i18n, 
Set plugins, Set reports, MavenProject project,
+                                MavenProjectBuilder mavenProjectBuilder, 
ArtifactFactory artifactFactory,
+                                ArtifactRepository localRepository )
+        {
+            super( sink );
+
+            this.log = log;
+
+            this.locale = locale;
+
+            this.plugins = new ArrayList( plugins );
+
+            this.reports = new ArrayList( reports );
+
+            this.i18n = i18n;
+
+            this.project = project;
+
+            this.mavenProjectBuilder = mavenProjectBuilder;
+
+            this.artifactFactory = artifactFactory;
+
+            this.localRepository = localRepository;
+        }
+
+        /** [EMAIL PROTECTED] */
+        public String getTitle()
+        {
+            return getReportString( "report.plugins.title" );
+        }
+
+        /** [EMAIL PROTECTED] */
+        public void renderBody()
+        {
+            // === Section: Project Plugins.
+            renderSectionPlugins( true );
+
+            // === Section: Project Reports.
+            renderSectionPlugins( false );
+        }
+
+        /**
+         * @param isPlugins <code>true</code> to use <code>plugins</code> 
variable, <code>false</code> to use
+         * <code>reports</code> variable.
+         */
+        private void renderSectionPlugins( boolean isPlugins )
+        {
+            List list = ( isPlugins ? plugins : reports );
+            String[] tableHeader = getPluginTableHeader();
+
+            startSection( ( isPlugins ? getReportString( 
"report.plugins.title" )
+                                     : getReportString( 
"report.plugins.report.title" ) ) );
+
+            if ( list == null || list.isEmpty() )
+            {
+
+                paragraph(  ( isPlugins ? getReportString( 
"report.plugins.nolist" )
+                                        : getReportString( 
"report.plugins.report.nolist" ) ) );
+
+                endSection();
+
+                return;
+            }
+
+            Collections.sort( list, getArtifactComparator() );
+
+            startTable();
+            tableHeader( tableHeader );
+
+            for ( Iterator iterator = list.iterator(); iterator.hasNext(); )
+            {
+                Artifact artifact = (Artifact) iterator.next();
+
+                VersionRange versionRange;
+                if ( StringUtils.isEmpty( artifact.getVersion() ) )
+                {
+                    versionRange = VersionRange.createFromVersion( 
Artifact.RELEASE_VERSION );
+                }
+                else
+                {
+                    versionRange = VersionRange.createFromVersion( 
artifact.getVersion() );
+                }
+
+                Artifact pluginArtifact = 
artifactFactory.createParentArtifact( artifact.getGroupId(), artifact
+                    .getArtifactId(), versionRange.toString() );
+                List artifactRepositories = 
project.getPluginArtifactRepositories();
+                if ( artifactRepositories == null )
+                {
+                    artifactRepositories = new ArrayList();
+                }
+                try
+                {
+                    MavenProject pluginProject = 
mavenProjectBuilder.buildFromRepository( pluginArtifact,
+                                                                               
           artifactRepositories,
+                                                                               
           localRepository );
+                    tableRow( getPluginRow( pluginProject.getGroupId(), 
pluginProject.getArtifactId(), pluginProject
+                                            .getVersion(), 
pluginProject.getUrl() ) );
+                }
+                catch ( ProjectBuildingException e )
+                {
+                    log.info( "Could not build project for: " + 
artifact.getArtifactId() + ":" + e.getMessage(), e );
+                    tableRow( getPluginRow( artifact.getGroupId(), 
artifact.getArtifactId(), artifact.getVersion(),
+                                            null ) );
+                }
+
+            }
+            endTable();
+
+            endSection();
+        }
+
+        // 
----------------------------------------------------------------------
+        // Private methods
+        // 
----------------------------------------------------------------------
+
+        private String[] getPluginTableHeader()
+        {
+            // reused key...
+            String groupId = getReportString( 
"report.dependencyManagement.column.groupId" );
+            String artifactId = getReportString( 
"report.dependencyManagement.column.artifactId" );
+            String version = getReportString( 
"report.dependencyManagement.column.version" );
+            return new String[] { groupId, artifactId, version };
+        }
+
+        private String[] getPluginRow( String groupId, String artifactId, 
String version, String link )
+        {
+            artifactId = ArtifactUtils.getArtifactIdCell( artifactId, link );
+            return new String[] { groupId, artifactId, version };
+        }
+
+        private Comparator getArtifactComparator()
+        {
+            return new Comparator()
+            {
+                /** [EMAIL PROTECTED] */
+                public int compare( Object o1, Object o2 )
+                {
+                    Artifact a1 = (Artifact) o1;
+                    Artifact a2 = (Artifact) o2;
+
+                    int result = a1.getGroupId().compareTo( a2.getGroupId() );
+                    if ( result == 0 )
+                    {
+                        result = a1.getArtifactId().compareTo( 
a2.getArtifactId() );
+                    }
+                    return result;
+                }
+            };
+        }
+
+        private String getReportString( String key )
+        {
+            return i18n.getString( "project-info-report", locale, key );
+        }
+    }
+}

Propchange: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/PluginsReport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/PluginsReport.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties?rev=676578&r1=676577&r2=676578&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties
 (original)
+++ 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties
 Mon Jul 14 06:16:07 2008
@@ -235,3 +235,9 @@
 report.pluginManagement.name                                       = Plugin 
Management
 report.pluginManagement.description                                = This 
document lists the plugins that are defined through pluginManagement.
 report.pluginManagement.title                                      = Project 
Plugin Management
+report.plugins.name                                                = Project 
Plugins
+report.plugins.description                                         = This 
document lists the build plugins and the report plugins used by this project.
+report.plugins.title                                               = Project 
Build Plugins
+report.plugins.report.title                                        = Project 
Report Plugins
+report.plugins.nolist                                              = There are 
no plugins defined in the Build part of this project.
+report.plugins.report.nolist                                       = There are 
no plugins reports defined in the Reporting part of this project.

Modified: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report_fr.properties
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report_fr.properties?rev=676578&r1=676577&r2=676578&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report_fr.properties
 (original)
+++ 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report_fr.properties
 Mon Jul 14 06:16:07 2008
@@ -235,3 +235,9 @@
 report.pluginManagement.name                                       = Gestion 
des plugins
 report.pluginManagement.description                                = Ce 
document liste les plugins d\u00e9finis \u00e0 travers plugins.
 report.pluginManagement.title                                      = Gestion 
des plugins du project
+report.plugins.name                                                = Plugins 
du projets
+report.plugins.description                                         = Ce 
document liste les plugins de type build et rapport utilis\u00e9s par ce projet.
+report.plugins.title                                               = Plugins 
du projet de type build
+report.plugins.report.title                                        = Plugins 
du projet de type rapport
+report.plugins.nolist                                              = Il 
n\u0092y a aucun plugin de type build d\u00e9fini dans la partie Build du 
projet.
+report.plugins.report.nolist                                       = Il 
n\u0092y a aucun plugin de type rapport d\u00e9fini dans la partie Reporting du 
projet.
\ No newline at end of file


Reply via email to