Author: rfscholte
Date: Fri Jul 17 21:06:24 2015
New Revision: 1691641

URL: http://svn.apache.org/r1691641
Log:
ArtifactResolver now uses ArtifactCoordinate

Modified:
    
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java
    
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java
    
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java
    
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java
    
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java
    
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java

Modified: 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java
 (original)
+++ 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java
 Fri Jul 17 21:06:24 2015
@@ -124,7 +124,7 @@ public class ArtifactCoordinate
 
     public final String getType()
     {
-        return type;
+        return type != null ? type : "jar";
     }
 
     public final void setType( String type )

Modified: 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java
 (original)
+++ 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java
 Fri Jul 17 21:06:24 2015
@@ -19,8 +19,11 @@ package org.apache.maven.shared.artifact
  * under the License.
  */
 
+import java.util.Collection;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 
 /**
@@ -29,14 +32,29 @@ import org.apache.maven.shared.artifact.
 public interface ArtifactResolver
 {
 
-    ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest , 
Artifact mavenArtifact  )
+    ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest , 
Artifact mavenArtifact )
         throws ArtifactResolverException;
 
-    Iterable<ArtifactResult> resolveTransitively( ProjectBuildingRequest 
buildingRequest , Artifact mavenArtifact  )
-        throws ArtifactResolverException;
+    ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest , 
ArtifactCoordinate coordinate )
+                    throws ArtifactResolverException;
 
-    Iterable<ArtifactResult> resolveTransitively( ProjectBuildingRequest 
buildingRequest , Artifact mavenArtifact ,
-                              TransformableFilter filter  )
+    /**
+     * This will resolve the dependencies of the coordinate, not resolving the 
the artifact of the coordinate itself.
+     * If the coordinate needs to be resolved too, use 
+     * {@link #resolveDependencies(ProjectBuildingRequest, Collection, 
TransformableFilter)} passing 
+     * {@code Collections.singletonList(coordinate)}
+     * 
+     * @param buildingRequest
+     * @param coordinate
+     * @param filter
+     * @return
+     * @throws ArtifactResolverException
+     */
+    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest 
buildingRequest,
+                                                  ArtifactCoordinate 
coordinate, TransformableFilter filter )
         throws ArtifactResolverException;
 
+    Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest 
buildingRequest,
+                                                  
Collection<ArtifactCoordinate> dependencies, TransformableFilter filter )
+                    throws ArtifactResolverException;
 }

Modified: 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java
 (original)
+++ 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java
 Fri Jul 17 21:06:24 2015
@@ -19,8 +19,11 @@ package org.apache.maven.shared.artifact
  * under the License.
  */
 
+import java.util.Collection;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
 import org.apache.maven.shared.artifact.resolve.ArtifactResolverException;
@@ -42,6 +45,7 @@ public class DefaultArtifactResolver
 {
     private PlexusContainer container;
 
+    @Override
     public ArtifactResult resolveArtifact( ProjectBuildingRequest 
buildingRequest , Artifact mavenArtifact  )
         throws ArtifactResolverException
     {
@@ -59,7 +63,8 @@ public class DefaultArtifactResolver
         }
     }
     
-    public Iterable<ArtifactResult> resolveTransitively( 
ProjectBuildingRequest buildingRequest , Artifact mavenArtifact  )
+    @Override
+    public ArtifactResult resolveArtifact( ProjectBuildingRequest 
buildingRequest, ArtifactCoordinate coordinate )
         throws ArtifactResolverException
     {
         try
@@ -68,7 +73,7 @@ public class DefaultArtifactResolver
 
             ArtifactResolver effectiveArtifactResolver = container.lookup( 
ArtifactResolver.class, hint );
 
-            return effectiveArtifactResolver.resolveTransitively( 
buildingRequest, mavenArtifact );
+            return effectiveArtifactResolver.resolveArtifact( buildingRequest, 
coordinate );
         }
         catch ( ComponentLookupException e )
         {
@@ -76,8 +81,10 @@ public class DefaultArtifactResolver
         }
     }
     
-    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveTransitively( ProjectBuildingRequest buildingRequest , Artifact 
mavenArtifact ,
-                                     TransformableFilter filter  )
+    @Override
+    public Iterable<ArtifactResult> resolveDependencies( 
ProjectBuildingRequest buildingRequest,
+                                                         
Collection<ArtifactCoordinate> coordinates,
+                                                         TransformableFilter 
filter )
         throws ArtifactResolverException
     {
         try
@@ -86,7 +93,27 @@ public class DefaultArtifactResolver
 
             ArtifactResolver effectiveArtifactResolver = container.lookup( 
ArtifactResolver.class, hint );
 
-            return effectiveArtifactResolver.resolveTransitively( 
buildingRequest, mavenArtifact, filter );
+            return effectiveArtifactResolver.resolveDependencies( 
buildingRequest, coordinates, filter );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ArtifactResolverException( e.getMessage(), e );
+        }
+    }
+    
+    @Override
+    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveDependencies( ProjectBuildingRequest buildingRequest,
+                                                                               
                   ArtifactCoordinate coordinate,
+                                                                               
                   TransformableFilter filter )
+        throws ArtifactResolverException
+    {
+        try
+        {
+            String hint = isMaven31() ? "maven31" : "maven3";
+
+            ArtifactResolver effectiveArtifactResolver = container.lookup( 
ArtifactResolver.class, hint );
+
+            return effectiveArtifactResolver.resolveDependencies( 
buildingRequest, coordinate, filter );
         }
         catch ( ComponentLookupException e )
         {
@@ -127,5 +154,4 @@ public class DefaultArtifactResolver
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY 
);
     }
-
 }

Modified: 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java
 (original)
+++ 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java
 Fri Jul 17 21:06:24 2015
@@ -102,4 +102,35 @@ final class Invoker
             throw new ArtifactResolverException( e.getMessage(), e );
         }
     }
+    
+    /**
+     * <strong>Note:</strong> Ensure that argClasses and args have the same 
number of elements 
+     * 
+     * @param objectClazz the class of the static method
+     * @param staticMethod the static method to call
+     * @param argClasses the classes of the argument, used to select the right 
static method
+     * @param args the actual arguments to be passed
+     * @return the result of the method invocation
+     * @throws ArtifactResolverException if any checked exception occurs
+     */
+    public static Object invoke( Class<?> objectClazz, String staticMethod, 
Class<?>[] argClasses, Object[] args )
+                    throws ArtifactResolverException
+    {
+        try
+        {
+            return objectClazz.getMethod( staticMethod, argClasses ).invoke( 
null, args );
+        }
+        catch ( IllegalAccessException e )
+        {
+            throw new ArtifactResolverException( e.getMessage(), e );
+        }
+        catch ( InvocationTargetException e )
+        {
+            throw new ArtifactResolverException( e.getMessage(), e );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            throw new ArtifactResolverException( e.getMessage(), e );
+        }
+    }
 }

Modified: 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java
 (original)
+++ 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java
 Fri Jul 17 21:06:24 2015
@@ -25,7 +25,9 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 import 
org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer;
 import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
@@ -35,8 +37,11 @@ import org.codehaus.plexus.component.ann
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.artifact.ArtifactType;
+import org.sonatype.aether.artifact.ArtifactTypeRegistry;
 import org.sonatype.aether.collection.CollectRequest;
 import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.graph.Dependency;
 import org.sonatype.aether.graph.DependencyFilter;
 import org.sonatype.aether.repository.RemoteRepository;
 import org.sonatype.aether.resolution.ArtifactDescriptorException;
@@ -45,6 +50,8 @@ import org.sonatype.aether.resolution.Ar
 import org.sonatype.aether.resolution.ArtifactRequest;
 import org.sonatype.aether.resolution.ArtifactResolutionException;
 import org.sonatype.aether.resolution.ArtifactResult;
+import org.sonatype.aether.util.artifact.DefaultArtifact;
+import org.sonatype.aether.util.artifact.DefaultArtifactType;
 
 /**
  * 
@@ -55,7 +62,11 @@ public class Maven30ArtifactResolver
 {
     @Requirement
     private RepositorySystem repositorySystem;
+    
+    @Requirement
+    private ArtifactHandlerManager artifactHandlerManager;
 
+    @Override
     public org.apache.maven.shared.artifact.resolve.ArtifactResult 
resolveArtifact( ProjectBuildingRequest buildingRequest ,
                                                                
org.apache.maven.artifact.Artifact mavenArtifact  )
         throws ArtifactResolverException
@@ -64,6 +75,27 @@ public class Maven30ArtifactResolver
             (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", 
org.apache.maven.artifact.Artifact.class,
                                        mavenArtifact );
 
+        return resolveArtifact( buildingRequest, aetherArtifact );
+    }
+
+    @Override
+    public org.apache.maven.shared.artifact.resolve.ArtifactResult 
resolveArtifact( ProjectBuildingRequest buildingRequest,
+                                                                               
     ArtifactCoordinate coordinate )
+        throws ArtifactResolverException
+    {
+        ArtifactTypeRegistry typeRegistry =
+                        (ArtifactTypeRegistry) Invoker.invoke( 
RepositoryUtils.class, "newArtifactTypeRegistry",
+                                                               
ArtifactHandlerManager.class, artifactHandlerManager );
+
+        Dependency aetherDependency = toDependency( coordinate, typeRegistry );
+        
+        return resolveArtifact( buildingRequest, 
aetherDependency.getArtifact() );
+    }
+
+    private org.apache.maven.shared.artifact.resolve.ArtifactResult 
resolveArtifact( ProjectBuildingRequest buildingRequest,
+                                                                               
      Artifact aetherArtifact )
+        throws ArtifactResolverException
+    {
         @SuppressWarnings( "unchecked" )
         List<RemoteRepository> aetherRepositories =
             (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 
"toRepos", List.class,
@@ -94,55 +126,77 @@ public class Maven30ArtifactResolver
             throw new ArtifactResolverException( e.getMessage(), e );
         }
     }
-
-    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveTransitively( ProjectBuildingRequest buildingRequest ,
-                                  org.apache.maven.artifact.Artifact 
mavenArtifact  )
-        throws ArtifactResolverException
-    {
-        return resolveTransitively( buildingRequest, mavenArtifact, null );
-    }
-
-    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveTransitively( ProjectBuildingRequest buildingRequest ,
-                                  org.apache.maven.artifact.Artifact 
mavenArtifact ,
+    
+    @Override
+    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveDependencies( ProjectBuildingRequest buildingRequest ,
+                                                                               
                   ArtifactCoordinate coordinate ,
                                   TransformableFilter dependencyFilter  )
         throws ArtifactResolverException
     {
-        Artifact aetherArtifact =
-            (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", 
org.apache.maven.artifact.Artifact.class,
-                                       mavenArtifact );
+        ArtifactTypeRegistry typeRegistry =
+                        (ArtifactTypeRegistry) Invoker.invoke( 
RepositoryUtils.class, "newArtifactTypeRegistry",
+                                                               
ArtifactHandlerManager.class, artifactHandlerManager );
 
+        Dependency aetherRoot = toDependency( coordinate, typeRegistry );
+        
         @SuppressWarnings( "unchecked" )
         List<RemoteRepository> aetherRepositories =
             (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 
"toRepos", List.class,
                                                      
buildingRequest.getRemoteRepositories() );
 
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, 
"getRepositorySession" );
+        CollectRequest request = new CollectRequest( aetherRoot, 
aetherRepositories );
 
-        try
+        return resolveDependencies( buildingRequest, aetherRepositories, 
dependencyFilter, request );
+    }
+    
+    
+    @Override
+    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveDependencies( ProjectBuildingRequest buildingRequest,
+                                                                               
                   Collection<ArtifactCoordinate> coordinates,
+                                                                               
                   TransformableFilter filter )
+        throws ArtifactResolverException
+    {
+        ArtifactTypeRegistry typeRegistry =
+            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, 
"newArtifactTypeRegistry",
+                                                   
ArtifactHandlerManager.class, artifactHandlerManager );
+
+        List<Dependency> dependencies = new ArrayList<Dependency>( 
coordinates.size() );
+
+        for ( ArtifactCoordinate coordinate : coordinates )
         {
-            // use descriptor to respect relocation
-            ArtifactDescriptorRequest descriptorRequest =
-                new ArtifactDescriptorRequest( aetherArtifact, 
aetherRepositories, null );
+            dependencies.add( toDependency( coordinate, typeRegistry ) );
+        }
 
-            ArtifactDescriptorResult descriptorResult =
-                repositorySystem.readArtifactDescriptor( session, 
descriptorRequest );
+        @SuppressWarnings( "unchecked" )
+        List<RemoteRepository> aetherRepositories =
+            (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 
"toRepos", List.class,
+                                                     
buildingRequest.getRemoteRepositories() );
+
+        CollectRequest request = new CollectRequest( (Dependency) null, 
dependencies, aetherRepositories );
 
-            CollectRequest request =
-                new CollectRequest( descriptorResult.getDependencies(), 
descriptorResult.getManagedDependencies(),
-                                    aetherRepositories );
+        return resolveDependencies( buildingRequest, aetherRepositories, 
filter, request );
+    }
 
+    private Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveDependencies( ProjectBuildingRequest buildingRequest,
+                                                                               
                    List<RemoteRepository> aetherRepositories,
+                                                                               
                    TransformableFilter dependencyFilter,
+                                                                               
                    CollectRequest request )
+        throws ArtifactResolverException
+    {
+        try
+        {
             DependencyFilter depFilter  = null;
             if ( dependencyFilter != null )
             {
                 depFilter = dependencyFilter.transform( new 
SonatypeAetherFilterTransformer() );
             }
 
-            List<ArtifactResult> dependencyResults = 
repositorySystem.resolveDependencies( session, request, depFilter );
+            RepositorySystemSession session =
+                            (RepositorySystemSession) Invoker.invoke( 
buildingRequest, "getRepositorySession" );
 
-            Collection<ArtifactRequest> artifactRequests = new 
ArrayList<ArtifactRequest>( 1 + dependencyResults.size() );
+            List<ArtifactResult> dependencyResults = 
repositorySystem.resolveDependencies( session, request, depFilter );
 
-            artifactRequests.add( new ArtifactRequest( 
descriptorResult.getArtifact(), aetherRepositories, null ) );
+            Collection<ArtifactRequest> artifactRequests = new 
ArrayList<ArtifactRequest>( dependencyResults.size() );
 
             for ( ArtifactResult artifactResult : dependencyResults )
             {
@@ -169,10 +223,6 @@ public class Maven30ArtifactResolver
                 }
             };
         }
-        catch ( ArtifactDescriptorException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
         catch ( ArtifactResolutionException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
@@ -182,4 +232,27 @@ public class Maven30ArtifactResolver
             throw new ArtifactResolverException( e.getMessage(), e );
         }
     }
+    
+    /**
+     * Based on 
RepositoryUtils#toDependency(org.apache.maven.model.Dependency, 
ArtifactTypeRegistry) 
+     * 
+     * @param coordinate
+     * @param stereotypes
+     * @return as Aether Dependency
+     * 
+     */
+    private static Dependency toDependency( ArtifactCoordinate coordinate, 
ArtifactTypeRegistry stereotypes )
+    {
+        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
+        if ( stereotype == null )
+        {
+            stereotype = new DefaultArtifactType( coordinate.getType() );
+        }
+
+        Artifact artifact =
+            new DefaultArtifact( coordinate.getGroupId(), 
coordinate.getArtifactId(), coordinate.getClassifier(), null,
+                                 coordinate.getVersion(), null, stereotype );
+
+        return new Dependency( artifact, null );
+    }
 }

Modified: 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java
 (original)
+++ 
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java
 Fri Jul 17 21:06:24 2015
@@ -25,7 +25,9 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 import 
org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer;
 import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
@@ -35,7 +37,12 @@ import org.codehaus.plexus.component.ann
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.artifact.DefaultArtifactType;
 import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.graph.DependencyFilter;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.resolution.ArtifactDescriptorException;
@@ -46,6 +53,7 @@ import org.eclipse.aether.resolution.Art
 import org.eclipse.aether.resolution.ArtifactResult;
 import org.eclipse.aether.resolution.DependencyRequest;
 import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.resolution.DependencyResult;
 
 /**
  * 
@@ -56,7 +64,11 @@ public class Maven31ArtifactResolver
 {
     @Requirement
     private RepositorySystem repositorySystem;
+    
+    @Requirement
+    private ArtifactHandlerManager artifactHandlerManager;
 
+    @Override
     public org.apache.maven.shared.artifact.resolve.ArtifactResult 
resolveArtifact( ProjectBuildingRequest buildingRequest ,
                                                                
org.apache.maven.artifact.Artifact mavenArtifact  )
         throws ArtifactResolverException
@@ -65,6 +77,27 @@ public class Maven31ArtifactResolver
             (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", 
org.apache.maven.artifact.Artifact.class,
                                        mavenArtifact );
 
+        return resolveArtifact( buildingRequest, aetherArtifact );
+    }
+    
+    @Override
+    public org.apache.maven.shared.artifact.resolve.ArtifactResult 
resolveArtifact( ProjectBuildingRequest buildingRequest,
+                                                                               
     ArtifactCoordinate coordinate )
+        throws ArtifactResolverException
+    {
+        ArtifactTypeRegistry typeRegistry =
+                        (ArtifactTypeRegistry) Invoker.invoke( 
RepositoryUtils.class, "newArtifactTypeRegistry",
+                                                               
ArtifactHandlerManager.class, artifactHandlerManager );
+
+        Dependency aetherDependency = toDependency( coordinate, typeRegistry );
+        
+        return resolveArtifact( buildingRequest, 
aetherDependency.getArtifact() );
+    }
+    
+    private org.apache.maven.shared.artifact.resolve.ArtifactResult 
resolveArtifact( ProjectBuildingRequest buildingRequest,
+                                                                               
      Artifact aetherArtifact )
+        throws ArtifactResolverException
+    {
         @SuppressWarnings( "unchecked" )
         List<RemoteRepository> aetherRepositories =
             (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 
"toRepos", List.class,
@@ -86,69 +119,90 @@ public class Maven31ArtifactResolver
 
             return new Maven31ArtifactResult( 
repositorySystem.resolveArtifact( session, request ) );
         }
-        catch ( ArtifactResolutionException e )
+        catch ( ArtifactDescriptorException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
         }
-        catch ( ArtifactDescriptorException e )
+        catch ( ArtifactResolutionException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
         }
     }
 
-    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveTransitively( ProjectBuildingRequest buildingRequest ,
-                                     org.apache.maven.artifact.Artifact 
mavenArtifact  )
+    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveDependencies( ProjectBuildingRequest buildingRequest ,
+                                                                               
                   ArtifactCoordinate coordinate ,
+                                     TransformableFilter dependencyFilter  )
         throws ArtifactResolverException
     {
-        return resolveTransitively( buildingRequest, mavenArtifact, null );
+        ArtifactTypeRegistry typeRegistry =
+                        (ArtifactTypeRegistry) Invoker.invoke( 
RepositoryUtils.class, "newArtifactTypeRegistry",
+                                                               
ArtifactHandlerManager.class, artifactHandlerManager );
+
+        Dependency aetherRoot = toDependency( coordinate, typeRegistry );
+        
+        @SuppressWarnings( "unchecked" )
+        List<RemoteRepository> aetherRepositories =
+            (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 
"toRepos", List.class,
+                                                     
buildingRequest.getRemoteRepositories() );
+
+        CollectRequest request = new CollectRequest( aetherRoot, 
aetherRepositories );
+
+        return resolveDependencies( buildingRequest, aetherRepositories, 
dependencyFilter, request );
     }
 
-    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveTransitively( ProjectBuildingRequest buildingRequest ,
-                                     org.apache.maven.artifact.Artifact 
mavenArtifact ,
-                                     TransformableFilter dependencyFilter  )
+    
+    
+    @Override
+    public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveDependencies( ProjectBuildingRequest buildingRequest,
+                                                                               
                   Collection<ArtifactCoordinate> coordinates,
+                                                                               
                   TransformableFilter filter )
         throws ArtifactResolverException
     {
-        Artifact aetherArtifact =
-            (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", 
org.apache.maven.artifact.Artifact.class,
-                                       mavenArtifact );
+        ArtifactTypeRegistry typeRegistry =
+            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, 
"newArtifactTypeRegistry",
+                                                   
ArtifactHandlerManager.class, artifactHandlerManager );
+
+        List<Dependency> dependencies = new ArrayList<Dependency>( 
coordinates.size() );
+
+        for ( ArtifactCoordinate coordinate : coordinates )
+        {
+            dependencies.add( toDependency( coordinate, typeRegistry ) );
+        }
 
         @SuppressWarnings( "unchecked" )
         List<RemoteRepository> aetherRepositories =
             (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 
"toRepos", List.class,
                                                      
buildingRequest.getRemoteRepositories() );
 
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, 
"getRepositorySession" );
+        CollectRequest request = new CollectRequest( (Dependency) null, 
dependencies, aetherRepositories );
 
+        return resolveDependencies( buildingRequest, aetherRepositories, 
filter, request );
+    }
+    
+    private Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> 
resolveDependencies( ProjectBuildingRequest buildingRequest,
+                                                                               
                    List<RemoteRepository> aetherRepositories,
+                                                                               
                    TransformableFilter dependencyFilter,
+                                                                               
                    CollectRequest request )
+        throws ArtifactResolverException
+    {
         try
         {
-            // use descriptor to respect relocation
-            ArtifactDescriptorRequest descriptorRequest =
-                new ArtifactDescriptorRequest( aetherArtifact, 
aetherRepositories, null );
-
-            ArtifactDescriptorResult descriptorResult =
-                repositorySystem.readArtifactDescriptor( session, 
descriptorRequest );
-
-            CollectRequest request =
-                new CollectRequest( descriptorResult.getDependencies(), 
descriptorResult.getManagedDependencies(),
-                                    aetherRepositories );
-
-            DependencyFilter depFilter = null;
+            DependencyFilter depFilter  = null;
             if ( dependencyFilter != null )
             {
                 depFilter = dependencyFilter.transform( new 
EclipseAetherFilterTransformer() );
             }
 
             DependencyRequest depRequest = new DependencyRequest( request, 
depFilter );
+            
+            RepositorySystemSession session =
+                            (RepositorySystemSession) Invoker.invoke( 
buildingRequest, "getRepositorySession" );
 
-            List<ArtifactResult> dependencyResults =
-                repositorySystem.resolveDependencies( session, depRequest 
).getArtifactResults();
-
-            Collection<ArtifactRequest> artifactRequests = new 
ArrayList<ArtifactRequest>( 1 + dependencyResults.size() );
+            DependencyResult dependencyResults = 
repositorySystem.resolveDependencies( session, depRequest );
 
-            artifactRequests.add( new ArtifactRequest( 
descriptorResult.getArtifact(), aetherRepositories, null ) );
+            Collection<ArtifactRequest> artifactRequests = new 
ArrayList<ArtifactRequest>( dependencyResults.getArtifactResults().size() );
 
-            for ( ArtifactResult artifactResult : dependencyResults )
+            for ( ArtifactResult artifactResult : 
dependencyResults.getArtifactResults() )
             {
                 artifactRequests.add( new ArtifactRequest( 
artifactResult.getArtifact(), aetherRepositories, null ) );
             }
@@ -173,10 +227,6 @@ public class Maven31ArtifactResolver
                 }
             };
         }
-        catch ( ArtifactDescriptorException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
         catch ( ArtifactResolutionException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
@@ -186,4 +236,27 @@ public class Maven31ArtifactResolver
             throw new ArtifactResolverException( e.getMessage(), e );
         }
     }
+    
+    /**
+     * Based on 
RepositoryUtils#toDependency(org.apache.maven.model.Dependency, 
ArtifactTypeRegistry) 
+     * 
+     * @param coordinate
+     * @param stereotypes
+     * @return as Aether Dependency
+     * 
+     */
+    private static Dependency toDependency( ArtifactCoordinate coordinate, 
ArtifactTypeRegistry stereotypes )
+    {
+        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
+        if ( stereotype == null )
+        {
+            stereotype = new DefaultArtifactType( coordinate.getType() );
+        }
+
+        Artifact artifact =
+            new DefaultArtifact( coordinate.getGroupId(), 
coordinate.getArtifactId(), coordinate.getClassifier(), null,
+                                 coordinate.getVersion(), null, stereotype );
+
+        return new Dependency( artifact, null );
+    }
 }


Reply via email to