Author: brett
Date: Tue May  9 23:16:43 2006
New Revision: 405649

URL: http://svn.apache.org/viewcvs?rev=405649&view=rev
Log:
improvements to dependency report for sorting and showing classifier, make it 
render standalone

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

Modified: maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml?rev=405649&r1=405648&r2=405649&view=diff
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml Tue May  9 
23:16:43 2006
@@ -33,7 +33,7 @@
     </contributor>
   </contributors>
   <prerequisites>
-    <maven>2.0.2</maven>
+    <maven>2.0.4</maven>
   </prerequisites>
   <build>
     <plugins>
@@ -57,12 +57,12 @@
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-plugin-api</artifactId>
-      <version>2.0.2</version>
+      <version>2.0.4</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-api</artifactId>
-      <version>1.0-beta-2</version>
+      <version>1.0-beta-3</version>
     </dependency>
     <dependency>
       <groupId>commons-validator</groupId>
@@ -72,23 +72,17 @@
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-provider-perforce</artifactId>
-      <version>1.0-beta-2</version>
+      <version>1.0-beta-3</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-model</artifactId>
-      <version>2.0.2</version>
+      <version>2.0.4</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-manager-plexus</artifactId>
-      <version>1.0-beta-2</version>
-      <exclusions>
-        <exclusion>
-          <groupId>plexus</groupId>
-          <artifactId>plexus-container-default</artifactId>
-        </exclusion>
-      </exclusions>
+      <version>1.0-beta-3</version>
     </dependency>
     <dependency>
       <groupId>plexus</groupId>
@@ -98,32 +92,37 @@
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-impl</artifactId>
-      <version>2.0.2</version>
+      <version>2.0.4</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-provider-clearcase</artifactId>
-      <version>1.0-beta-2</version>
+      <version>1.0-beta-3</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-provider-starteam</artifactId>
-      <version>1.0-beta-2</version>
+      <version>1.0-beta-3</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
-      <artifactId>maven-scm-provider-svn</artifactId>
-      <version>1.0-beta-2</version>
+      <artifactId>maven-scm-provider-svnexe</artifactId>
+      <version>1.0-beta-3</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
-      <artifactId>maven-scm-provider-cvs</artifactId>
-      <version>1.0-beta-2</version>
+      <artifactId>maven-scm-provider-cvsexe</artifactId>
+      <version>1.0-beta-3</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-settings</artifactId>
-      <version>2.0.2</version>
+      <version>2.0.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.doxia</groupId>
+      <artifactId>doxia-site-renderer</artifactId>
+      <version>1.0-alpha-8-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>httpunit</groupId>
@@ -132,9 +131,9 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.maven</groupId>
+      <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-plugin-testing-harness</artifactId>
-      <version>1.0-SNAPSHOT</version>
+      <version>1.0-beta-1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>

Added: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java?rev=405649&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java
 (added)
+++ 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java
 Tue May  9 23:16:43 2006
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2004-2005 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.
+ */
+
+package org.apache.maven.report.projectinfo;
+
+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.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
+import org.apache.maven.doxia.site.decoration.Body;
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.site.decoration.Skin;
+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.doxia.siterenderer.sink.SiteRendererSink;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.plexus.i18n.I18N;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * Base class with the things that should be in AbstractMavenReport anyway.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a>
+ */
+public abstract class AbstractProjectInfoReport
+    extends AbstractMavenReport
+{
+    /**
+     * Report output directory.
+     *
+     * @parameter expression="${project.reporting.outputDirectory}"
+     * @required
+     */
+    protected File outputDirectory;
+
+    /**
+     * Doxia Site Renderer.
+     *
+     * @component
+     */
+    protected Renderer siteRenderer;
+
+    /**
+     * The Maven Project.
+     *
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    protected MavenProject project;
+
+    /**
+     * Local Repository.
+     *
+     * @parameter expression="${localRepository}"
+     * @required
+     * @readonly
+     */
+    protected ArtifactRepository localRepository;
+
+    /**
+     * @component
+     */
+    protected ArtifactResolver resolver;
+
+    /**
+     * @component
+     */
+    protected ArtifactFactory factory;
+
+    /**
+     * Internationalization.
+     *
+     * @component
+     */
+    protected I18N i18n;
+
+    private File getSkinArtifactFile()
+        throws MojoExecutionException
+    {
+        Skin skin = Skin.getDefaultSkin();
+
+        String version = skin.getVersion();
+        Artifact artifact;
+        try
+        {
+            if ( version == null )
+            {
+                version = Artifact.RELEASE_VERSION;
+            }
+            VersionRange versionSpec = VersionRange.createFromVersionSpec( 
version );
+            artifact = factory.createDependencyArtifact( skin.getGroupId(), 
skin.getArtifactId(), versionSpec, "jar",
+                                                         null, null );
+
+            resolver.resolve( artifact, 
project.getRemoteArtifactRepositories(), localRepository );
+        }
+        catch ( InvalidVersionSpecificationException e )
+        {
+            throw new MojoExecutionException( "The skin version '" + version + 
"' is not valid: " + e.getMessage() );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new MojoExecutionException( "Unable to find skin", e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new MojoExecutionException( "The skin does not exist: " + 
e.getMessage() );
+        }
+
+        return artifact.getFile();
+    }
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        if ( !canGenerateReport() )
+        {
+            return;
+        }
+
+        // TODO: push to a helper? Could still be improved by taking more of 
the site information from the site plugin
+        try
+        {
+            DecorationModel model = new DecorationModel();
+            model.setBody( new Body() );
+            Map attributes = new HashMap();
+            attributes.put( "outputEncoding", "UTF-8" );
+            Locale locale = Locale.getDefault();
+            SiteRenderingContext siteContext = 
siteRenderer.createContextForSkin( getSkinArtifactFile(), attributes,
+                                                                               
   model, getName( locale ), locale );
+
+            RenderingContext context = new RenderingContext( outputDirectory, 
getOutputName() + ".html" );
+
+            SiteRendererSink sink = new SiteRendererSink( context );
+            generate( sink, locale );
+
+            outputDirectory.mkdirs();
+
+            Writer writer = new FileWriter( new File( outputDirectory, 
getOutputName() + ".html" ) );
+
+            siteRenderer.generateDocument( writer, sink, siteContext );
+
+            siteRenderer.copyResources( siteContext, new File( 
project.getBasedir(), "src/site/resources" ),
+                                        outputDirectory );
+        }
+        catch ( RendererException e )
+        {
+            throw new MojoExecutionException(
+                "An error has occurred in " + getName( Locale.ENGLISH ) + " 
report generation.", e );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException(
+                "An error has occurred in " + getName( Locale.ENGLISH ) + " 
report generation.", e );
+        }
+        catch ( MavenReportException e )
+        {
+            throw new MojoExecutionException(
+                "An error has occurred in " + getName( Locale.ENGLISH ) + " 
report generation.", e );
+        }
+    }
+
+    /**
+     * @see org.apache.maven.reporting.MavenReport#getCategoryName()
+     */
+    public String getCategoryName()
+    {
+        return CATEGORY_PROJECT_INFORMATION;
+    }
+
+    /**
+     * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
+     */
+    protected String getOutputDirectory()
+    {
+        return outputDirectory.getAbsolutePath();
+    }
+
+    /**
+     * @see org.apache.maven.reporting.AbstractMavenReport#getProject()
+     */
+    protected MavenProject getProject()
+    {
+        return project;
+    }
+
+    /**
+     * @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
+     */
+    protected Renderer getSiteRenderer()
+    {
+        return siteRenderer;
+    }
+}

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

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

Modified: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java?rev=405649&r1=405648&r2=405649&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java
 (original)
+++ 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java
 Tue May  9 23:16:43 2006
@@ -17,24 +17,19 @@
  */
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
 import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.doxia.sink.Sink;
-import org.apache.maven.doxia.siterenderer.Renderer;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.reporting.AbstractMavenReport;
 import org.apache.maven.reporting.AbstractMavenReportRenderer;
-import org.codehaus.plexus.i18n.I18N;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -55,82 +50,21 @@
  * @version $Id$
  * @goal dependencies
  * @requiresDependencyResolution test
- * @plexus.component
  */
 public class DependenciesReport
-    extends AbstractMavenReport
+    extends AbstractProjectInfoReport
 {
     /**
-     * Report output directory.
-     *
-     * @parameter expression="${project.reporting.outputDirectory}"
-     * @required
-     */
-    private String outputDirectory;
-
-    /**
-     * Doxia Site Renderer.
-     *
-     * @component
-     */
-    private Renderer siteRenderer;
-
-    /**
-     * The Maven Project.
-     *
-     * @parameter expression="${project}"
-     * @required
-     * @readonly
-     */
-    private MavenProject project;
-
-    /**
-     * Maven ArtifactFactory.
-     *
-     * @parameter 
expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
-     * @required
-     * @readonly
-     */
-    private ArtifactFactory artifactFactory;
-
-    /**
      * Maven Project Builder.
      *
-     * @parameter 
expression="${component.org.apache.maven.project.MavenProjectBuilder}"
-     * @required
-     * @readonly
+     * @component
      */
     private MavenProjectBuilder mavenProjectBuilder;
 
     /**
-     * Maven Artifact Resolver
-     *
-     * @parameter 
expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}"
-     * @required
-     * @readonly
-     */
-    private ArtifactResolver artifactResolver;
-
-    /**
-     * @parameter 
expression="${component.org.apache.maven.artifact.metadata.ArtifactMetadataSource}"
-     */
-    protected ArtifactMetadataSource artifactMetadataSource;
-
-    /**
-     * Local Repository.
-     *
-     * @parameter expression="${localRepository}"
-     * @required
-     * @readonly
-     */
-    private ArtifactRepository localRepository;
-
-    /**
-     * Internationalization.
-     *
      * @component
      */
-    private I18N i18n;
+    protected ArtifactMetadataSource artifactMetadataSource;
 
     /**
      * @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
@@ -141,14 +75,6 @@
     }
 
     /**
-     * @see org.apache.maven.reporting.MavenReport#getCategoryName()
-     */
-    public String getCategoryName()
-    {
-        return CATEGORY_PROJECT_INFORMATION;
-    }
-
-    /**
      * @see 
org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
      */
     public String getDescription( Locale locale )
@@ -157,60 +83,47 @@
     }
 
     /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
+     * @see 
org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
      */
-    protected String getOutputDirectory()
+    public void executeReport( Locale locale )
     {
-        return outputDirectory;
-    }
+        ReportResolutionListener listener = resolveProject();
 
-    /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#getProject()
-     */
-    protected MavenProject getProject()
-    {
-        return project;
-    }
+        DependenciesRenderer r = new DependenciesRenderer( getSink(), locale, 
listener.getDirectDependencies(),
+                                                           
listener.getTransitiveDependencies(),
+                                                           
listener.getOmittedArtifacts(), listener.getDepTree() );
 
-    /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
-     */
-    protected Renderer getSiteRenderer()
-    {
-        return siteRenderer;
+        r.render();
     }
 
-    /**
-     * @see 
org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
-     */
-    public void executeReport( Locale locale )
+    private ReportResolutionListener resolveProject()
     {
+        Map managedVersions = null;
         try
         {
-            ReportResolutionListener listener = resolveProject();
-
-            DependenciesRenderer r = new DependenciesRenderer( getSink(), 
locale, listener.getDirectDependencies(),
-                                                               
listener.getTransitiveDependencies(),
-                                                               
listener.getOmittedArtifacts(), listener.getDepTree() );
-
-            r.render();
+            managedVersions = createManagedVersionMap( project.getId(), 
project.getDependencyManagement() );
         }
-        catch ( Exception e )
+        catch ( ProjectBuildingException e )
         {
             getLog().error( "An error occurred while resolving project 
dependencies.", e );
         }
-    }
-
-    private ReportResolutionListener resolveProject()
-        throws ArtifactNotFoundException, ArtifactResolutionException, 
ProjectBuildingException
-    {
-        Map managedVersions = createManagedVersionMap( project.getId(), 
project.getDependencyManagement() );
 
         ReportResolutionListener listener = new ReportResolutionListener();
 
-        artifactResolver.resolveTransitively( 
project.getDependencyArtifacts(), project.getArtifact(), managedVersions,
-                                              localRepository, 
project.getRemoteArtifactRepositories(),
-                                              artifactMetadataSource, null, 
Collections.singletonList( listener ) );
+        try
+        {
+            resolver.resolveTransitively( project.getDependencyArtifacts(), 
project.getArtifact(), managedVersions,
+                                          localRepository, 
project.getRemoteArtifactRepositories(),
+                                          artifactMetadataSource, null, 
Collections.singletonList( listener ) );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            getLog().error( "An error occurred while resolving project 
dependencies.", e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            getLog().error( "An error occurred while resolving project 
dependencies.", e );
+        }
 
         return listener;
     }
@@ -229,9 +142,9 @@
                 try
                 {
                     VersionRange versionRange = 
VersionRange.createFromVersionSpec( d.getVersion() );
-                    Artifact artifact = 
artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),
-                                                                               
   versionRange, d.getType(),
-                                                                               
   d.getClassifier(), d.getScope() );
+                    Artifact artifact = factory.createDependencyArtifact( 
d.getGroupId(), d.getArtifactId(),
+                                                                          
versionRange, d.getType(), d.getClassifier(),
+                                                                          
d.getScope() );
                     map.put( d.getManagementKey(), artifact );
                 }
                 catch ( InvalidVersionSpecificationException e )
@@ -259,30 +172,30 @@
     private class DependenciesRenderer
         extends AbstractMavenReportRenderer
     {
-        private Locale locale;
+        private final Locale locale;
 
-        private Map directDep;
+        private final Map directDep;
 
-        private Map transitiveDep;
+        private final Map transitiveDep;
 
-        private Map omittedDeps;
+        private final Map omittedDeps;
 
-        private Map depTree;
+        private final Map depTree;
 
-        public DependenciesRenderer( Sink sink, Locale locale, Map 
directDependencies, Map transitiveDependencies,
-                                     Map omittedDependencies, Map 
dependencyTree )
+        DependenciesRenderer( Sink sink, Locale locale, Map 
directDependencies, Map transitiveDependencies,
+                              Map omittedDependencies, Map dependencyTree )
         {
             super( sink );
 
             this.locale = locale;
 
-            this.directDep = directDependencies;
+            this.directDep = Collections.unmodifiableMap( directDependencies );
 
-            this.transitiveDep = transitiveDependencies;
+            this.transitiveDep = Collections.unmodifiableMap( 
transitiveDependencies );
 
-            this.omittedDeps = omittedDependencies;
+            this.omittedDeps = Collections.unmodifiableMap( 
omittedDependencies );
 
-            this.depTree = dependencyTree;
+            this.depTree = Collections.unmodifiableMap( dependencyTree );
         }
 
         public String getTitle()
@@ -312,69 +225,42 @@
             String groupId = getReportString( 
"report.dependencies.column.groupId" );
             String artifactId = getReportString( 
"report.dependencies.column.artifactId" );
             String version = getReportString( 
"report.dependencies.column.version" );
+            String classifier = getReportString( 
"report.dependencies.column.classifier" );
             String type = getReportString( "report.dependencies.column.type" );
             String optional = getReportString( 
"report.dependencies.column.optional" );
+            String[] tableHeader = new String[]{groupId, artifactId, version, 
classifier, type, optional};
 
             // collect dependencies by scope
-            Map dependenciesByScope = new HashMap()
-            {
-                public Object put( Object key, Object value )
-                {
-                    List multiValue = (List) get( key );
-                    if ( multiValue == null )
-                    {
-                        multiValue = new ArrayList();
-                    }
-                    multiValue.add( value );
-                    return super.put( key, multiValue );
-                }
-            };
-
+            Map dependenciesByScope = new HashMap();
             for ( Iterator i = dependencies.iterator(); i.hasNext(); )
             {
                 Artifact artifact = (Artifact) i.next();
 
-                dependenciesByScope.put( artifact.getScope(), getArtifactRow( 
artifact ) );
-            }
-
-            for ( Iterator iter = dependenciesByScope.keySet().iterator(); 
iter.hasNext(); )
-            {
-                String scope = (String) iter.next();
-                List artifactsRows = (List) dependenciesByScope.get( scope );
-
-                startSection( scope );
-
-                paragraph( getReportString( "report.dependencies.intro." + 
scope ) );
-                startTable();
-                tableHeader( new String[]{groupId, artifactId, version, type, 
optional} );
-
-                // optional at the end + sort group id
-                Collections.sort( artifactsRows, new Comparator()
+                List multiValue = (List) dependenciesByScope.get( 
artifact.getScope() );
+                if ( multiValue == null )
                 {
-
-                    public int compare( Object row1, Object row2 )
-                    {
-                        String[] s1 = (String[]) row1;
-                        String[] s2 = (String[]) row2;
-                        return s1[0].compareTo( s2[0] ) + ( s1[4] != null ? 
1000000 : 0 ) -
-                            ( s2[4] != null ? 1000000 : 0 );
-                    }
-                } );
-
-                for ( Iterator iterator = artifactsRows.iterator(); 
iterator.hasNext(); )
-                {
-                    String[] row = (String[]) iterator.next();
-                    tableRow( row );
+                    multiValue = new ArrayList();
                 }
-                endTable();
-
-                endSection();
+                multiValue.add( artifact );
+                dependenciesByScope.put( artifact.getScope(), multiValue );
             }
 
+            renderDependenciesForScope( Artifact.SCOPE_COMPILE,
+                                        (List) dependenciesByScope.get( 
Artifact.SCOPE_COMPILE ), tableHeader );
+            renderDependenciesForScope( Artifact.SCOPE_RUNTIME,
+                                        (List) dependenciesByScope.get( 
Artifact.SCOPE_RUNTIME ), tableHeader );
+            renderDependenciesForScope( Artifact.SCOPE_TEST, (List) 
dependenciesByScope.get( Artifact.SCOPE_TEST ),
+                                        tableHeader );
+            renderDependenciesForScope( Artifact.SCOPE_PROVIDED,
+                                        (List) dependenciesByScope.get( 
Artifact.SCOPE_PROVIDED ), tableHeader );
+            renderDependenciesForScope( Artifact.SCOPE_SYSTEM, (List) 
dependenciesByScope.get( Artifact.SCOPE_SYSTEM ),
+                                        tableHeader );
+
             endSection();
 
             // Transitive dependencies
-            Set artifacts = new HashSet( transitiveDep.values() );
+            List artifacts = new ArrayList( transitiveDep.values() );
+            Collections.sort( artifacts, getArtifactComparator() );
 
             startSection( getReportString( 
"report.transitivedependencies.title" ) );
 
@@ -388,7 +274,7 @@
 
                 startTable();
 
-                tableHeader( new String[]{groupId, artifactId, version, type, 
optional} );
+                tableHeader( tableHeader );
 
                 for ( Iterator i = artifacts.iterator(); i.hasNext(); )
                 {
@@ -418,20 +304,60 @@
             endSection();
         }
 
-        private String[] getArtifactRow( Artifact artifact )
+        private void renderDependenciesForScope( String scope, List artifacts, 
String[] tableHeader )
         {
-            String[] row;
-            if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+            if ( artifacts != null )
             {
-                row = new String[]{artifact.getGroupId(), 
artifact.getArtifactId(), artifact.getVersion(),
-                    artifact.getType(), artifact.isOptional() ? "X" : null};
+                // can't use straight artifact comparison because we want 
optional last
+                Collections.sort( artifacts, getArtifactComparator() );
+
+                startSection( scope );
+
+                paragraph( getReportString( "report.dependencies.intro." + 
scope ) );
+                startTable();
+                tableHeader( tableHeader );
+
+                for ( Iterator iterator = artifacts.iterator(); 
iterator.hasNext(); )
+                {
+                    Artifact artifact = (Artifact) iterator.next();
+                    tableRow( getArtifactRow( artifact ) );
+                }
+                endTable();
+
+                endSection();
             }
-            else
+        }
+
+        private Comparator getArtifactComparator()
+        {
+            return new Comparator()
             {
-                row = new String[]{artifact.getGroupId(), 
artifact.getArtifactId(), artifact.getVersion(),
-                    artifact.getType(), artifact.isOptional() ? "X" : null};
-            }
-            return row;
+                public int compare( Object o1, Object o2 )
+                {
+                    Artifact a1 = (Artifact) o1;
+                    Artifact a2 = (Artifact) o2;
+
+                    // put optional last
+                    if ( a1.isOptional() && !a2.isOptional() )
+                    {
+                        return +1;
+                    }
+                    else if ( !a1.isOptional() && a2.isOptional() )
+                    {
+                        return -1;
+                    }
+                    else
+                    {
+                        return a1.compareTo( a2 );
+                    }
+                }
+            };
+        }
+
+        private String[] getArtifactRow( Artifact artifact )
+        {
+            return new String[]{artifact.getGroupId(), 
artifact.getArtifactId(), artifact.getVersion(),
+                artifact.getClassifier(), artifact.getType(), 
artifact.isOptional() ? "(optional)" : " "};
         }
 
         private void printDependencyListing( Artifact artifact )
@@ -554,8 +480,8 @@
             boolean allowStubModel = false;
             if ( !"pom".equals( artifact.getType() ) )
             {
-                projectArtifact = artifactFactory.createProjectArtifact( 
artifact.getGroupId(), artifact
-                    .getArtifactId(), artifact.getVersion(), 
artifact.getScope() );
+                projectArtifact = factory.createProjectArtifact( 
artifact.getGroupId(), artifact.getArtifactId(),
+                                                                 
artifact.getVersion(), artifact.getScope() );
                 allowStubModel = true;
             }
 

Modified: 
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties?rev=405649&r1=405648&r2=405649&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
 Tue May  9 23:16:43 2006
@@ -26,6 +26,7 @@
 report.dependencies.column.url=URL
 report.dependencies.column.optional=Optional
 report.dependencies.column.type=Type
+report.dependencies.column.classifier=Classifier
 
 report.dependencies.intro.runtime=The following is a list of runtime 
dependencies for this project. These dependencies are required to run the 
application:
 report.dependencies.intro.compile=The following is a list of compile 
dependencies for this project. These dependencies are required to compile and 
run the application:


Reply via email to