Author: carlos Date: Sun Mar 2 22:16:42 2008 New Revision: 632948 URL: http://svn.apache.org/viewvc?rev=632948&view=rev Log: [MNG-3093] Track selectVersionFromRange events in the tree
Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java?rev=632948&r1=632947&r2=632948&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java (original) +++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java Sun Mar 2 22:16:42 2008 @@ -26,6 +26,7 @@ import java.util.List; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor; import org.apache.maven.shared.dependency.tree.traversal.SerializingDependencyNodeVisitor; @@ -189,7 +190,11 @@ * artifact scope has not been managed. */ private String premanagedScope; + + private VersionRange versionSelectedFromRange; + private List availableVersions; + // constructors ----------------------------------------------------------- /** @@ -514,6 +519,40 @@ public void setPremanagedScope( String premanagedScope ) { this.premanagedScope = premanagedScope; + } + + /** + * If the version was selected from a range this method will return the range. + * + * @return the version range before a version was selected, or <code>null</code> if the artifact had a explicit + * version. + * @since 1.2 + */ + public VersionRange getVersionSelectedFromRange() + { + return versionSelectedFromRange; + } + + public void setVersionSelectedFromRange( VersionRange versionSelectedFromRange ) + { + this.versionSelectedFromRange = versionSelectedFromRange; + } + + /** + * If the version was selected from a range this method will return the available versions when making the decision. + * + * @return [EMAIL PROTECTED] List} < [EMAIL PROTECTED] String} > the versions available when a version was selected from a range, or + * <code>null</code> if the artifact had a explicit version. + * @since 1.2 + */ + public List getAvailableVersions() + { + return availableVersions; + } + + public void setAvailableVersions( List availableVersions ) + { + this.availableVersions = availableVersions; } /** Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java?rev=632948&r1=632947&r2=632948&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java (original) +++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java Sun Mar 2 22:16:42 2008 @@ -298,8 +298,19 @@ public void selectVersionFromRange( Artifact artifact ) { log( "selectVersionFromRange: artifact=" + artifact ); - - // TODO: track version selection from range in node (MNG-3093) + + DependencyNode node = getNode( artifact ); + + /* + * selectVersionFromRange is called before includeArtifact + */ + if ( node == null && isCurrentNodeIncluded() ) + { + node = addNode( artifact ); + } + + node.setVersionSelectedFromRange( artifact.getVersionRange() ); + node.setAvailableVersions( artifact.getAvailableVersions() ); } /* Modified: maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java?rev=632948&r1=632947&r2=632948&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java (original) +++ maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java Sun Mar 2 22:16:42 2008 @@ -48,6 +48,11 @@ */ private final Map resolutionGroupsByArtifact; + /** + * Map of available versions by artifact. + */ + private final Map availableVersionsByArtifact; + // constructors ----------------------------------------------------------- /** @@ -56,6 +61,7 @@ public ArtifactMetadataSourceStub() { resolutionGroupsByArtifact = new HashMap(); + availableVersionsByArtifact = new HashMap(); } // ArtifactMetadataSource methods ----------------------------------------- @@ -85,7 +91,9 @@ public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories ) throws ArtifactMetadataRetrievalException { - return Collections.EMPTY_LIST; + List availableVersions = (List) availableVersionsByArtifact.get( artifact ); + + return availableVersions != null ? availableVersions : Collections.EMPTY_LIST; } // public methods --------------------------------------------------------- @@ -103,5 +111,18 @@ ResolutionGroup resolution = new ResolutionGroup( artifact, dependencyArtifacts, Collections.EMPTY_LIST ); resolutionGroupsByArtifact.put( artifact, resolution ); + } + + /** + * Adds versions for the specified artifact to this artifact metadata source stub. + * + * @param artifact + * the artifact to add metadata to + * @param versions + * the list of versions to register as available for the specified artifact + */ + public void addAvailableVersions( Artifact artifact, List versions ) + { + availableVersionsByArtifact.put( artifact, versions ); } } Modified: maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java?rev=632948&r1=632947&r2=632948&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java (original) +++ maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java Sun Mar 2 22:16:42 2008 @@ -19,6 +19,7 @@ * under the License. */ +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -41,6 +42,9 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.ResolutionNode; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.PlexusTestCase; @@ -552,6 +556,33 @@ assertDependencyTree( expectedRootNode, project ); } + + /** + * Tests building a tree for a project with a dependency with version range + * + * <pre> + * g:p:t:1 + * \- g:a:t:1 + * </pre> + * + * @throws DependencyTreeBuilderException + */ + public void testProjectWithVersionRange() throws DependencyTreeBuilderException + { + Artifact projectArtifact = createArtifact( "g:p:t:1" ); + Artifact childArtifact = createArtifact( "g:a:t:[1,2)" ); + + MavenProject project = createProject( projectArtifact, new Artifact[] { childArtifact } ); + + DependencyNode expectedRootNode = createNode( "g:p:t:1" ); + expectedRootNode.addChild( createNode( "g:a:t:1.0" ) ); + ArtifactVersion version = new DefaultArtifactVersion( "1.0" ); + List availableVersions = new ArrayList(); + availableVersions.add( version ); + artifactMetadataSource.addAvailableVersions( childArtifact, availableVersions ); + assertDependencyTree( expectedRootNode, project ); + } + // TODO: reinstate when MNG-3236 fixed /* public void testProjectWithFilter() throws DependencyTreeBuilderException, ArtifactResolutionException @@ -593,7 +624,15 @@ String version = get( tokens, 3 ); String scope = get( tokens, 4 ); - VersionRange versionRange = VersionRange.createFromVersion( version ); + VersionRange versionRange; + try + { + versionRange = VersionRange.createFromVersionSpec( version ); + } + catch ( InvalidVersionSpecificationException e ) + { + throw new RuntimeException(e); + } return new DefaultArtifact( groupId, artifactId, versionRange, scope, type, null, new DefaultArtifactHandler() ); }