Author: brett Date: Wed May 10 02:13:18 2006 New Revision: 405686 URL: http://svn.apache.org/viewcvs?rev=405686&view=rev Log: fix some issues in the dependency report (wrong dependency versions included), and simplify
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/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java 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=405686&r1=405685&r2=405686&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml Wed May 10 02:13:18 2006 @@ -38,6 +38,13 @@ <build> <plugins> <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.4</source> + <target>1.4</target> + </configuration> + </plugin> + <plugin> <artifactId>maven-site-plugin</artifactId> </plugin> <plugin> @@ -118,6 +125,11 @@ <groupId>org.apache.maven</groupId> <artifactId>maven-settings</artifactId> <version>2.0.4</version> + </dependency> + <dependency> + <groupId>org.apache.maven.doxia</groupId> + <artifactId>doxia-core</artifactId> + <version>1.0-alpha-8-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.maven.doxia</groupId> 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=405686&r1=405685&r2=405686&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 Wed May 10 02:13:18 2006 @@ -19,7 +19,7 @@ import org.apache.maven.artifact.Artifact; 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.ArtifactCollector; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; @@ -35,12 +35,10 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Set; /** * Generates the Project Dependencies report. @@ -67,6 +65,11 @@ protected ArtifactMetadataSource artifactMetadataSource; /** + * @component + */ + private ArtifactCollector collector; + + /** * @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale) */ public String getName( Locale locale ) @@ -89,9 +92,7 @@ { ReportResolutionListener listener = resolveProject(); - DependenciesRenderer r = new DependenciesRenderer( getSink(), locale, listener.getDirectDependencies(), - listener.getTransitiveDependencies(), - listener.getOmittedArtifacts(), listener.getDepTree() ); + DependenciesRenderer r = new DependenciesRenderer( getSink(), locale, listener ); r.render(); } @@ -112,18 +113,14 @@ try { - resolver.resolveTransitively( project.getDependencyArtifacts(), project.getArtifact(), managedVersions, - localRepository, project.getRemoteArtifactRepositories(), - artifactMetadataSource, null, Collections.singletonList( listener ) ); + collector.collect( 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; } @@ -174,28 +171,15 @@ { private final Locale locale; - private final Map directDep; - - private final Map transitiveDep; - - private final Map omittedDeps; + private final ReportResolutionListener listener; - private final Map depTree; - - DependenciesRenderer( Sink sink, Locale locale, Map directDependencies, Map transitiveDependencies, - Map omittedDependencies, Map dependencyTree ) + DependenciesRenderer( Sink sink, Locale locale, ReportResolutionListener listener ) { super( sink ); this.locale = locale; - this.directDep = Collections.unmodifiableMap( directDependencies ); - - this.transitiveDep = Collections.unmodifiableMap( transitiveDependencies ); - - this.omittedDeps = Collections.unmodifiableMap( omittedDependencies ); - - this.depTree = Collections.unmodifiableMap( dependencyTree ); + this.listener = listener; } public String getTitle() @@ -206,7 +190,7 @@ public void renderBody() { // Dependencies report - Set dependencies = new HashSet( directDep.values() ); + List dependencies = listener.getRootNode().getChildren(); if ( dependencies.isEmpty() ) { @@ -231,19 +215,7 @@ String[] tableHeader = new String[]{groupId, artifactId, version, classifier, type, optional}; // collect dependencies by scope - Map dependenciesByScope = new HashMap(); - for ( Iterator i = dependencies.iterator(); i.hasNext(); ) - { - Artifact artifact = (Artifact) i.next(); - - List multiValue = (List) dependenciesByScope.get( artifact.getScope() ); - if ( multiValue == null ) - { - multiValue = new ArrayList(); - } - multiValue.add( artifact ); - dependenciesByScope.put( artifact.getScope(), multiValue ); - } + Map dependenciesByScope = getDependenciesByScope( dependencies ); renderDependenciesForScope( Artifact.SCOPE_COMPILE, (List) dependenciesByScope.get( Artifact.SCOPE_COMPILE ), tableHeader ); @@ -259,8 +231,8 @@ endSection(); // Transitive dependencies - List artifacts = new ArrayList( transitiveDep.values() ); - Collections.sort( artifacts, getArtifactComparator() ); + List artifacts = new ArrayList( listener.getArtifacts() ); + artifacts.removeAll( dependencies ); startSection( getReportString( "report.transitivedependencies.title" ) ); @@ -272,18 +244,18 @@ { paragraph( getReportString( "report.transitivedependencies.intro" ) ); - startTable(); - - tableHeader( tableHeader ); - - for ( Iterator i = artifacts.iterator(); i.hasNext(); ) - { - Artifact artifact = (Artifact) i.next(); - - tableRow( getArtifactRow( artifact ) ); - } + dependenciesByScope = getDependenciesByScope( artifacts ); - endTable(); + 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(); @@ -293,17 +265,36 @@ //for Dependencies Graph Tree startSection( getReportString( "report.dependencies.graph.tree.title" ) ); - printDependencyListing( project.getArtifact() ); + printDependencyListing( listener.getRootNode() ); endSection(); //for Artifact Descriptions / URLs startSection( getReportString( "report.dependencies.graph.tables.title" ) ); - printDescriptionsAndURLs( project.getArtifact() ); + printDescriptionsAndURLs( listener.getRootNode() ); endSection(); endSection(); } + private Map getDependenciesByScope( List dependencies ) + { + Map dependenciesByScope = new HashMap(); + for ( Iterator i = dependencies.iterator(); i.hasNext(); ) + { + ReportResolutionListener.Node node = (ReportResolutionListener.Node) i.next(); + Artifact artifact = node.getArtifact(); + + List multiValue = (List) dependenciesByScope.get( artifact.getScope() ); + if ( multiValue == null ) + { + multiValue = new ArrayList(); + } + multiValue.add( artifact ); + dependenciesByScope.put( artifact.getScope(), multiValue ); + } + return dependenciesByScope; + } + private void renderDependenciesForScope( String scope, List artifacts, String[] tableHeader ) { if ( artifacts != null ) @@ -360,106 +351,92 @@ artifact.getClassifier(), artifact.getType(), artifact.isOptional() ? "(optional)" : " "}; } - private void printDependencyListing( Artifact artifact ) + private void printDependencyListing( ReportResolutionListener.Node node ) { - String id = artifact.getId(); - - if ( !omittedDeps.containsKey( id ) ) - { - sink.list(); - sink.listItem(); - - sink.link( "#" + id ); - sink.text( id ); - sink.link_(); + Artifact artifact = node.getArtifact(); + String id = artifact.getDependencyConflictId(); - if ( depTree.containsKey( id ) ) - { + sink.list(); + sink.listItem(); - List depList = (List) depTree.get( id ); - for ( Iterator deps = depList.iterator(); deps.hasNext(); ) - { - Artifact dep = (Artifact) deps.next(); - printDependencyListing( dep ); - } - } + sink.link( "#" + id ); + sink.text( id ); + sink.link_(); - sink.listItem_(); - sink.list_(); + for ( Iterator deps = node.getChildren().iterator(); deps.hasNext(); ) + { + ReportResolutionListener.Node dep = (ReportResolutionListener.Node) deps.next(); + printDependencyListing( dep ); } + + sink.listItem_(); + sink.list_(); } - private void printDescriptionsAndURLs( Artifact artifact ) + private void printDescriptionsAndURLs( ReportResolutionListener.Node node ) { - String id = artifact.getId(); + Artifact artifact = node.getArtifact(); + String id = artifact.getDependencyConflictId(); - if ( !omittedDeps.containsKey( id ) ) + String artifactDescription = null; + String artifactUrl = null; + try { - String artifactDescription = null; - String artifactUrl = null; - try - { - MavenProject artifactProject = getMavenProjectFromRepository( artifact, localRepository ); - artifactDescription = artifactProject.getDescription(); - artifactUrl = artifactProject.getUrl(); - } - catch ( ProjectBuildingException e ) - { - getLog().debug( e ); - } - if ( artifactDescription == null ) - - { - artifactDescription = getReportString( "report.dependencies.graph.description.default" ); - } + MavenProject artifactProject = getMavenProjectFromRepository( artifact, localRepository ); + artifactDescription = artifactProject.getDescription(); + artifactUrl = artifactProject.getUrl(); + } + catch ( ProjectBuildingException e ) + { + getLog().debug( e ); + } + if ( artifactDescription == null ) - if ( artifactUrl == null ) - { - artifactUrl = getReportString( "report.dependencies.graph.url.default" ); - } + { + artifactDescription = getReportString( "report.dependencies.graph.description.default" ); + } - sink.anchor( id ); - startSection( id ); - sink.anchor_(); - - sink.paragraph(); - sink.bold(); - sink.text( getReportString( "report.dependencies.column.description" ) ); - sink.bold_(); - sink.lineBreak(); - sink.text( artifactDescription ); - sink.paragraph_(); - - sink.paragraph(); - sink.bold(); - sink.text( getReportString( "report.dependencies.column.url" ) ); - sink.bold_(); - sink.lineBreak(); + if ( artifactUrl == null ) + { + artifactUrl = getReportString( "report.dependencies.graph.url.default" ); + } - if ( artifactUrl != null && artifactUrl.startsWith( "http://" ) ) - { - sink.link( artifactUrl ); - sink.text( artifactUrl ); - sink.link_(); - } - else - { - sink.text( artifactUrl ); - } - sink.paragraph_(); + sink.anchor( id ); + startSection( id ); + sink.anchor_(); + + sink.paragraph(); + sink.bold(); + sink.text( getReportString( "report.dependencies.column.description" ) ); + sink.bold_(); + sink.lineBreak(); + sink.text( artifactDescription ); + sink.paragraph_(); + + sink.paragraph(); + sink.bold(); + sink.text( getReportString( "report.dependencies.column.url" ) ); + sink.bold_(); + sink.lineBreak(); - endSection(); + if ( artifactUrl != null && artifactUrl.startsWith( "http://" ) ) + { + sink.link( artifactUrl ); + sink.text( artifactUrl ); + sink.link_(); } - - if ( depTree.containsKey( id ) ) + else { + sink.text( artifactUrl ); + } + sink.paragraph_(); - List depList = (List) depTree.get( id ); - for ( Iterator deps = depList.iterator(); deps.hasNext(); ) - { - Artifact dep = (Artifact) deps.next(); - printDescriptionsAndURLs( dep ); - } + endSection(); + + for ( Iterator deps = node.getChildren().iterator(); deps.hasNext(); ) + { + ReportResolutionListener.Node dep = (ReportResolutionListener.Node) deps.next(); + printDescriptionsAndURLs( dep ); } } Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java?rev=405686&r1=405685&r2=405686&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java Wed May 10 02:13:18 2006 @@ -16,18 +16,16 @@ * limitations under the License. */ -import org.apache.maven.artifact.resolver.ResolutionListener; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.resolver.ResolutionListener; import org.apache.maven.artifact.versioning.VersionRange; -import java.util.Map; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Set; -import java.util.HashSet; -import java.util.Collections; +import java.util.Map; +import java.util.Stack; /** * @author Edwin Punzalan @@ -35,244 +33,140 @@ public class ReportResolutionListener implements ResolutionListener { - private Map directDep = new HashMap(); + private Stack parents = new Stack(); - private Map transitiveDep = new HashMap(); + private Map artifacts = new HashMap(); - private Map replacedDep = new HashMap(); + private Node rootNode; - private List parents = new ArrayList(); - - private Map depTree = new HashMap(); - - private Map depMap = new HashMap(); - - private Map depthMap = new HashMap(); - - public void testArtifact( Artifact node ) + public void testArtifact( Artifact artifact ) { - + // intentionally blank } public void startProcessChildren( Artifact artifact ) { - parents.add( artifact ); + Node node = (Node) artifacts.get( artifact.getDependencyConflictId() ); + if ( parents.isEmpty() ) + { + rootNode = node; + } + + parents.push( node ); } public void endProcessChildren( Artifact artifact ) { - parents.remove( artifact ); + Node check = (Node) parents.pop(); + assert artifact.equals( check.artifact ); } - public void includeArtifact( Artifact artifact ) + public void omitForNearer( Artifact omitted, Artifact kept ) { - addToDepMap( artifact ); + assert omitted.getDependencyConflictId().equals( kept.getDependencyConflictId() ); - if ( depthMap.containsKey( artifact.getId() ) ) + Node prev = (Node) artifacts.get( omitted.getDependencyConflictId() ); + if ( prev != null ) { - Integer depth = (Integer) depthMap.get( artifact.getId() ); - if ( depth.intValue() <= parents.size() ) + if ( prev.parent != null ) { - return; + prev.parent.children.remove( prev ); } + artifacts.remove( omitted.getDependencyConflictId() ); } - //remove from tree the artifact which is farther down the dependency trail - removeFromDepTree( artifact ); - - depthMap.put( artifact.getId(), new Integer( parents.size() ) ); - - addDependency( artifact ); - - addToDepTree( artifact ); + includeArtifact( kept ); } - private void removeFromDepTree( Artifact artifact ) + public void omitForCycle( Artifact artifact ) { - for ( Iterator artifactDeps = depTree.values().iterator(); artifactDeps.hasNext(); ) - { - List depList = (List) artifactDeps.next(); - for ( Iterator artifacts = depList.iterator(); artifacts.hasNext(); ) - { - Artifact dep = (Artifact) artifacts.next(); - - if ( dep.getId().equals( artifact.getId() ) ) - { - depList.remove( dep ); - break; - } - } - } + // intentionally blank } - private void addToDepTree( Artifact artifact ) + public void includeArtifact( Artifact artifact ) { - if ( parents.size() > 0 ) + if ( artifacts.containsKey( artifact.getDependencyConflictId() ) ) { - Artifact parent = (Artifact) parents.get( parents.size() - 1 ); - - if ( depTree.containsKey( parent.getId() ) ) + Node prev = (Node) artifacts.get( artifact.getDependencyConflictId() ); + if ( prev.parent != null ) { - List deps = (List) depTree.get( parent.getId() ); - - deps.add( artifact ); - } - else - { - List deps = new ArrayList(); - deps.add( artifact ); - depTree.put( parent.getId(), deps ); + prev.parent.children.remove( prev ); } + artifacts.remove( artifact.getDependencyConflictId() ); } - } - private void addToDepMap( Artifact artifact ) - { - if ( parents.size() > 0 ) + Node node = new Node(); + node.artifact = artifact; + if ( !parents.isEmpty() ) { - Artifact parent = (Artifact) parents.get( parents.size() - 1 ); - - if ( depMap.containsKey( parent.getId() ) ) - { - List deps = (List) depMap.get( parent.getId() ); - - deps.add( artifact ); - } - else - { - List deps = new ArrayList(); - deps.add( artifact ); - depMap.put( parent.getId(), deps ); - } + node.parent = (Node) parents.peek(); + node.parent.children.add( node ); } + artifacts.put( artifact.getDependencyConflictId(), node ); } - public void omitForNearer( Artifact omitted, Artifact kept ) + public void updateScope( Artifact artifact, String scope ) { - String key = omitted.getId(); + Node node = (Node) artifacts.get( artifact.getDependencyConflictId() ); - replacedDep.put( key, omitted ); - - if ( directDep.containsKey( key ) ) - { - directDep.remove( key ); - } - else if ( transitiveDep.containsKey( key ) ) - { - transitiveDep.remove( key ); - } - - addDependency( kept ); + node.artifact.setScope( scope ); } - private void addDependency( Artifact artifact ) + public void manageArtifact( Artifact artifact, Artifact replacement ) { - if ( parents.size() == 0 ) - { - //do nothing... artifact is current project - } - else if ( parents.size() == 1 ) - { - if ( !directDep.containsKey( artifact.getId() ) ) - { - if ( artifact.getScope() == null ) - { - artifact.setScope( Artifact.SCOPE_COMPILE ); - } - directDep.put( artifact.getId(), artifact ); - } - } - else - { - if ( !transitiveDep.containsKey( artifact.getId() ) ) - { - if ( artifact.getScope() == null ) - { - Artifact parent = (Artifact) parents.get( parents.size() - 1 ); - - artifact.setScope( parent.getScope() ); - } + Node node = (Node) artifacts.get( artifact.getDependencyConflictId() ); - transitiveDep.put( artifact.getId(), artifact ); - } - } - } - - public void updateScope( Artifact artifact, String scope ) - { - if ( directDep.containsKey( artifact.getId() ) ) + if ( replacement.getVersion() != null ) { - Artifact depArtifact = (Artifact) directDep.get( artifact.getId() ); - - depArtifact.setScope( scope ); + node.artifact.setVersion( replacement.getVersion() ); } - - if ( transitiveDep.containsKey( artifact.getId() ) ) + if ( replacement.getScope() != null ) { - Artifact depArtifact = (Artifact) transitiveDep.get( artifact.getId() ); - - depArtifact.setScope( scope ); + node.artifact.setScope( replacement.getScope() ); } } - public void manageArtifact( Artifact artifact, Artifact replacement ) - { - omitForNearer( artifact, replacement ); - } - - public void omitForCycle( Artifact artifact ) - { - replacedDep.put( artifact.getId(), artifact ); - } - - public void updateScopeCurrentPom( Artifact artifact, String scope ) + public void updateScopeCurrentPom( Artifact artifact, String key ) { - updateScope( artifact, scope ); + // intentionally blank } public void selectVersionFromRange( Artifact artifact ) { - + // intentionally blank } - public void restrictRange( Artifact artifact, Artifact replacement, VersionRange newRange ) + public void restrictRange( Artifact artifact, Artifact artifact1, VersionRange versionRange ) { - + // intentionally blank } - public Set getArtifacts() + public Collection getArtifacts() { - Set all = new HashSet(); - - all.addAll( directDep.values() ); - - all.addAll( transitiveDep.values() ); - - return all; + return artifacts.values(); } - public Map getTransitiveDependencies() + static class Node { - return Collections.unmodifiableMap( transitiveDep ); - } + private Node parent; - public Map getDirectDependencies() - { - return Collections.unmodifiableMap( directDep ); - } + private List children = new ArrayList(); - public Map getOmittedArtifacts() - { - return Collections.unmodifiableMap( replacedDep ); - } + private Artifact artifact; - public Map getDepTree() - { - return depTree; + public List getChildren() + { + return children; + } + + public Artifact getArtifact() + { + return artifact; + } } - public Map getDepMap() + public Node getRootNode() { - return depMap; + return rootNode; } } 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=405686&r1=405685&r2=405686&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 Wed May 10 02:13:18 2006 @@ -18,7 +18,6 @@ report.dependencies.nolist=There are no dependencies for this project. It is a standalone application that does not depend on any other project. report.dependencies.title=Project Dependencies report.dependencies.description=This document lists the projects dependencies and provides information on each dependency. -report.dependencies.intro=The following is a list of dependencies for this project. These dependencies are required to compile and run the application: report.dependencies.column.groupId=GroupId report.dependencies.column.artifactId=ArtifactId report.dependencies.column.version=Version @@ -36,12 +35,7 @@ report.transitivedependencies.title=Project Transitive Dependencies report.transitivedependencies.nolist=No transitive dependencies are required for this project. -report.transitivedependencies.intro=The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies: -report.transitivedependencies.column.groupId=GroupId -report.transitivedependencies.column.artifactId=ArtifactId -report.transitivedependencies.column.version=Version -report.transitivedependencies.column.description=Description -report.transitivedependencies.column.url=URL +report.transitivedependencies.intro=The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies. report.mailing-lists.name=Mailing Lists report.mailing-lists.nolist=There are no mailing lists currently associated with this project. Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java?rev=405686&r1=405685&r2=405686&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java Wed May 10 02:13:18 2006 @@ -22,8 +22,10 @@ import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.artifact.versioning.VersionRange; -import java.util.Set; -import java.util.Map; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; import java.util.List; /** @@ -34,9 +36,12 @@ { private ReportResolutionListener listener; + private static final Artifact[] EMPTY_ARTIFACTS = new Artifact[]{}; + public void testSimpleDependencyTree() { Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" ); + listener.includeArtifact( projectArtifact ); listener.startProcessChildren( projectArtifact ); @@ -51,62 +56,52 @@ listener.endProcessChildren( projectArtifact ); - Set artifacts = listener.getArtifacts(); - assertEquals( "Test total artifacts", 3, artifacts.size() ); - assertTrue( "Test dependency one", artifacts.contains( depArtifact01 ) ); - assertTrue( "Test dependency two", artifacts.contains( depArtifact02 ) ); - assertTrue( "Test dependency three", artifacts.contains( depArtifact03 ) ); - - Map depMap = listener.getDepMap(); - assertEquals( "Test total artifacts in dependency map", 1, depMap.size() ); - assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); - List dependencies = (List) depMap.get( projectArtifact.getId() ); - assertEquals( "Test dependency total", 3, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); - assertTrue( "Test dependency content 3", dependencies.contains( depArtifact03 ) ); - - Map depTree = listener.getDepTree(); - assertEquals( "Test total artifacts in dependency map", 1, depTree.size() ); - assertTrue( "Test dependency map key", depTree.containsKey( projectArtifact.getId() ) ); - dependencies = (List) depTree.get( projectArtifact.getId() ); - assertEquals( "Test dependency total", 3, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); - assertTrue( "Test dependency content 3", dependencies.contains( depArtifact03 ) ); - - Map directDeps = listener.getDirectDependencies(); - assertEquals( "Test total direct dependencies", 3, directDeps.size() ); - assertTrue( "Test dependency content 1", directDeps.containsValue( depArtifact01 ) ); - assertTrue( "Test dependency content 2", directDeps.containsValue( depArtifact02 ) ); - assertTrue( "Test dependency content 3", directDeps.containsValue( depArtifact03 ) ); + Collection artifacts = listener.getArtifacts(); + assertTrue( "Check artifact lists match", compareNodeListToArtifacts( artifacts, new Artifact[]{depArtifact01, + depArtifact02, depArtifact03, projectArtifact} ) ); + + assertEquals( "Test dependency map key", projectArtifact, listener.getRootNode().getArtifact() ); + + assertTrue( "Check artifact lists match", compareNodeListToArtifacts( listener.getRootNode().getChildren(), + new Artifact[]{depArtifact01, + depArtifact02, depArtifact03} ) ); + } + + private boolean compareNodeListToArtifacts( Collection nodes, Artifact[] artifacts ) + { + List artifactsRemaining = new ArrayList( Arrays.asList( artifacts ) ); - Map omittedDeps = listener.getOmittedArtifacts(); - assertEquals( "Test total omitted dependencies", 0, omittedDeps.size() ); + for ( Iterator i = nodes.iterator(); i.hasNext(); ) + { + ReportResolutionListener.Node node = (ReportResolutionListener.Node) i.next(); - Map transDeps = listener.getTransitiveDependencies(); - assertEquals( "Test total transitive dependencies", 0, transDeps.size() ); + if ( !artifactsRemaining.remove( node.getArtifact() ) ) + { + return false; + } + } + return artifactsRemaining.isEmpty(); } public void testSimpleDepTreeWithTransitiveDeps() { Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" ); + listener.includeArtifact( projectArtifact ); listener.startProcessChildren( projectArtifact ); Artifact depArtifact1 = createArtifact( "test-dep", "dependency-one", "1.0" ); listener.includeArtifact( depArtifact1 ); - listener.startProcessChildren( depArtifact1 ); - - Artifact depArtifact01 = createArtifact( "test-dep", "dependency-zero-one", "1.0" ); - listener.includeArtifact( depArtifact01 ); + listener.startProcessChildren( depArtifact1 ); - Artifact depArtifact02 = createArtifact( "test-dep", "dependency-zero-two", "1.0" ); - listener.includeArtifact( depArtifact02 ); + Artifact depArtifact01 = createArtifact( "test-dep", "dependency-zero-one", "1.0" ); + listener.includeArtifact( depArtifact01 ); - listener.endProcessChildren( depArtifact1 ); + Artifact depArtifact02 = createArtifact( "test-dep", "dependency-zero-two", "1.0" ); + listener.includeArtifact( depArtifact02 ); + listener.endProcessChildren( depArtifact1 ); Artifact depArtifact2 = createArtifact( "test-dep", "dependency-two", "1.0" ); listener.includeArtifact( depArtifact2 ); @@ -116,167 +111,93 @@ listener.endProcessChildren( projectArtifact ); - Set artifacts = listener.getArtifacts(); - assertEquals( "Test total artifacts", 5, artifacts.size() ); - assertTrue( "Test dependency one", artifacts.contains( depArtifact1 ) ); - assertTrue( "Test dependency two", artifacts.contains( depArtifact2 ) ); - assertTrue( "Test dependency three", artifacts.contains( depArtifact3 ) ); - assertTrue( "Test dependency four", artifacts.contains( depArtifact01 ) ); - assertTrue( "Test dependency five", artifacts.contains( depArtifact02 ) ); - - Map depMap = listener.getDepMap(); - assertEquals( "Test total artifacts in dependency map", 2, depMap.size() ); - assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); - List dependencies = (List) depMap.get( projectArtifact.getId() ); - assertEquals( "Test dependency total", 3, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); - assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); - assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); - dependencies = (List) depMap.get( depArtifact1.getId() ); - assertEquals( "Test dependency total", 2, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); - - Map depTree = listener.getDepTree(); - assertEquals( "Test total artifacts in dependency map", 2, depTree.size() ); - assertTrue( "Test dependency map key", depTree.containsKey( projectArtifact.getId() ) ); - dependencies = (List) depTree.get( projectArtifact.getId() ); - assertEquals( "Test dependency total", 3, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); - assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); - assertTrue( "Test dependency map key", depTree.containsKey( depArtifact1.getId() ) ); - dependencies = (List) depTree.get( depArtifact1.getId() ); - assertEquals( "Test dependency total", 2, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); - - Map directDeps = listener.getDirectDependencies(); - assertEquals( "Test total direct dependencies", 3, directDeps.size() ); - assertTrue( "Test dependency content 1", directDeps.containsValue( depArtifact1 ) ); - assertTrue( "Test dependency content 2", directDeps.containsValue( depArtifact2 ) ); - assertTrue( "Test dependency content 3", directDeps.containsValue( depArtifact3 ) ); - - Map omittedDeps = listener.getOmittedArtifacts(); - assertEquals( "Test total omitted dependencies", 0, omittedDeps.size() ); - - Map transDeps = listener.getTransitiveDependencies(); - assertEquals( "Test total transitive dependencies", 2, transDeps.size() ); - assertTrue( "Test transitive dependency 1", transDeps.containsValue( depArtifact01 ) ); - assertTrue( "Test transitive dependency 1", transDeps.containsValue( depArtifact02 ) ); + Collection artifacts = listener.getArtifacts(); + assertTrue( compareNodeListToArtifacts( artifacts, new Artifact[]{depArtifact1, depArtifact2, depArtifact3, + depArtifact01, depArtifact02, projectArtifact} ) ); + + assertEquals( "Check root", projectArtifact, listener.getRootNode().getArtifact() ); + assertTrue( compareNodeListToArtifacts( listener.getRootNode().getChildren(), + new Artifact[]{depArtifact1, depArtifact2, depArtifact3} ) ); + + ReportResolutionListener.Node depNode1 = getChild( listener.getRootNode(), depArtifact1 ); + assertTrue( + compareNodeListToArtifacts( depNode1.getChildren(), new Artifact[]{depArtifact01, depArtifact02} ) ); + } + + private ReportResolutionListener.Node getChild( ReportResolutionListener.Node node, Artifact artifact ) + { + ReportResolutionListener.Node result = null; + for ( Iterator i = node.getChildren().iterator(); i.hasNext() && result == null; ) + { + ReportResolutionListener.Node child = (ReportResolutionListener.Node) i.next(); + if ( child.getArtifact().equals( artifact ) ) + { + result = child; + } + } + return result; } public void testComplexDependencyTree() { Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" ); + listener.includeArtifact( projectArtifact ); listener.startProcessChildren( projectArtifact ); Artifact depArtifact1 = createArtifact( "test-dep", "dependency-one", "1.0", Artifact.SCOPE_COMPILE ); listener.includeArtifact( depArtifact1 ); - listener.startProcessChildren( depArtifact1 ); - - Artifact depArtifact11 = createArtifact( "test-dep", "dependency-zero-one", "1.0" ); - listener.includeArtifact( depArtifact11 ); + listener.startProcessChildren( depArtifact1 ); - Artifact depArtifact12 = createArtifact( "test-dep", "dependency-zero-two", "1.0" ); - listener.includeArtifact( depArtifact12 ); + Artifact depArtifact11 = createArtifact( "test-dep", "dependency-zero-one", "1.0" ); + listener.includeArtifact( depArtifact11 ); - listener.startProcessChildren( depArtifact12 ); + Artifact depArtifact12 = createArtifact( "test-dep", "dependency-zero-two", "1.0" ); + listener.includeArtifact( depArtifact12 ); - Artifact depArtifact121 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" ); - listener.includeArtifact( depArtifact121 ); + listener.startProcessChildren( depArtifact12 ); - listener.endProcessChildren( depArtifact12 ); + Artifact depArtifact121 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" ); + listener.includeArtifact( depArtifact121 ); - listener.endProcessChildren( depArtifact1 ); + listener.endProcessChildren( depArtifact12 ); + listener.endProcessChildren( depArtifact1 ); Artifact depArtifact2 = createArtifact( "test-dep", "dependency-two", "1.0", Artifact.SCOPE_TEST ); listener.includeArtifact( depArtifact2 ); - listener.startProcessChildren( depArtifact2 ); + listener.startProcessChildren( depArtifact2 ); - Artifact depArtifact21 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" ); - listener.includeArtifact( depArtifact21 ); - listener.omitForNearer( depArtifact121, depArtifact21 ); - listener.updateScope( depArtifact121, Artifact.SCOPE_TEST ); + Artifact depArtifact21 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" ); + listener.includeArtifact( depArtifact21 ); + listener.omitForNearer( depArtifact121, depArtifact21 ); - listener.endProcessChildren( depArtifact2 ); + listener.endProcessChildren( depArtifact2 ); Artifact depArtifact3 = createArtifact( "test-dep", "dependency-three", "1.0", Artifact.SCOPE_COMPILE ); listener.includeArtifact( depArtifact3 ); listener.endProcessChildren( projectArtifact ); - Set artifacts = listener.getArtifacts(); - assertEquals( "Test total artifacts", 6, artifacts.size() ); - assertTrue( "Test dependency one", artifacts.contains( depArtifact1 ) ); - assertTrue( "Test dependency two", artifacts.contains( depArtifact2 ) ); - assertTrue( "Test dependency three", artifacts.contains( depArtifact3 ) ); - assertTrue( "Test dependency four", artifacts.contains( depArtifact11 ) ); - assertTrue( "Test dependency five", artifacts.contains( depArtifact12 ) ); - assertTrue( "Test dependency six", artifacts.contains( depArtifact21 ) ); - - Map depMap = listener.getDepMap(); - assertEquals( "Test total artifacts in dependency map", 4, depMap.size() ); - assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); - List dependencies = (List) depMap.get( projectArtifact.getId() ); - assertEquals( "Test dependency total", 3, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); - assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); - assertTrue( "Test dependency map key", depMap.containsKey( depArtifact1.getId() ) ); - dependencies = (List) depMap.get( depArtifact1.getId() ); - assertEquals( "Test dependency total", 2, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact11 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact12 ) ); - assertTrue( "Test dependency map key", depMap.containsKey( depArtifact12.getId() ) ); - dependencies = (List) depMap.get( depArtifact12.getId() ); - assertEquals( "Test dependency total", 1, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact121 ) ); - assertTrue( "Test dependency map key", depMap.containsKey( depArtifact2.getId() ) ); - dependencies = (List) depMap.get( depArtifact2.getId() ); - assertEquals( "Test dependency total", 1, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact21 ) ); - - Map depTree = listener.getDepTree(); - assertEquals( "Test total artifacts in dependency map", 4, depTree.size() ); - assertTrue( "Test dependency map key", depTree.containsKey( projectArtifact.getId() ) ); - dependencies = (List) depTree.get( projectArtifact.getId() ); - assertEquals( "Test dependency total", 3, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); - assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); - assertTrue( "Test dependency map key", depTree.containsKey( depArtifact1.getId() ) ); - dependencies = (List) depTree.get( depArtifact1.getId() ); - assertEquals( "Test dependency total", 2, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact11 ) ); - assertTrue( "Test dependency content 2", dependencies.contains( depArtifact12 ) ); - assertTrue( "Test dependency map key", depTree.containsKey( depArtifact12.getId() ) ); - dependencies = (List) depTree.get( depArtifact12.getId() ); - assertEquals( "Test dependency total", 0, dependencies.size() ); - assertTrue( "Test dependency map key", depTree.containsKey( depArtifact2.getId() ) ); - dependencies = (List) depTree.get( depArtifact2.getId() ); - assertEquals( "Test dependency total", 1, dependencies.size() ); - assertTrue( "Test dependency content 1", dependencies.contains( depArtifact21 ) ); - - Map directDeps = listener.getDirectDependencies(); - assertEquals( "Test total direct dependencies", 3, directDeps.size() ); - assertTrue( "Test dependency content 1", directDeps.containsValue( depArtifact1 ) ); - assertTrue( "Test dependency content 2", directDeps.containsValue( depArtifact2 ) ); - assertTrue( "Test dependency content 3", directDeps.containsValue( depArtifact3 ) ); - - Map omittedDeps = listener.getOmittedArtifacts(); - assertEquals( "Test total omitted dependencies", 1, omittedDeps.size() ); - - Map transDeps = listener.getTransitiveDependencies(); - assertEquals( "Test total transitive dependencies", 3, transDeps.size() ); - assertTrue( "Test transitive dependency 1", transDeps.containsValue( depArtifact11 ) ); - assertTrue( "Test transitive dependency 2", transDeps.containsValue( depArtifact12 ) ); - assertTrue( "Test transitive dependency 3", transDeps.containsValue( depArtifact21 ) ); + Collection artifacts = listener.getArtifacts(); + assertTrue( compareNodeListToArtifacts( artifacts, new Artifact[]{depArtifact1, depArtifact2, depArtifact3, + depArtifact11, depArtifact12, depArtifact21, projectArtifact} ) ); + + assertEquals( projectArtifact, listener.getRootNode().getArtifact() ); + + assertTrue( compareNodeListToArtifacts( listener.getRootNode().getChildren(), + new Artifact[]{depArtifact1, depArtifact2, depArtifact3} ) ); + + ReportResolutionListener.Node node = getChild( listener.getRootNode(), depArtifact1 ); + assertTrue( compareNodeListToArtifacts( node.getChildren(), new Artifact[]{depArtifact11, depArtifact12} ) ); + + node = getChild( node, depArtifact12 ); + assertTrue( compareNodeListToArtifacts( node.getChildren(), EMPTY_ARTIFACTS ) ); + + node = getChild( listener.getRootNode(), depArtifact2 ); + assertTrue( compareNodeListToArtifacts( node.getChildren(), new Artifact[]{depArtifact21} ) ); } private Artifact createArtifact( String groupId, String artifactId, String version ) @@ -288,21 +209,14 @@ { VersionRange versionRange = VersionRange.createFromVersion( version ); - Artifact artifact = new DefaultArtifact( groupId, artifactId, versionRange, scope, - "jar", null, new DefaultArtifactHandler(), false ); - - return artifact; + return new DefaultArtifact( groupId, artifactId, versionRange, scope, "jar", null, new DefaultArtifactHandler(), + false ); } protected void setUp() throws Exception { + super.setUp(); listener = new ReportResolutionListener(); - } - - protected void tearDown() - throws Exception - { - listener = null; } }