Author: jdcasey
Date: Wed Oct  4 17:46:58 2006
New Revision: 453073

URL: http://svn.apache.org/viewvc?view=rev&rev=453073
Log:
First attempt at a convenience API for resolving artifacts.

Added:
    maven/sandbox/maven-artifact-tools/
    maven/sandbox/maven-artifact-tools/pom.xml   (with props)
    maven/sandbox/maven-artifact-tools/src/
    maven/sandbox/maven-artifact-tools/src/main/
    maven/sandbox/maven-artifact-tools/src/main/java/
    maven/sandbox/maven-artifact-tools/src/main/java/org/
    maven/sandbox/maven-artifact-tools/src/main/java/org/apache/
    maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/
    maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/InvalidConfigurationException.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/ComponentAccessException.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositoryTool.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactQuery.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionResult.java
   (with props)
    
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java
   (with props)
    maven/sandbox/maven-artifact-tools/src/test/
    maven/sandbox/maven-artifact-tools/src/test/java/
    maven/sandbox/maven-artifact-tools/src/test/java/org/
    maven/sandbox/maven-artifact-tools/src/test/java/org/apache/
    maven/sandbox/maven-artifact-tools/src/test/java/org/apache/maven/
    maven/sandbox/maven-artifact-tools/src/test/java/org/apache/maven/artifact/
    
maven/sandbox/maven-artifact-tools/src/test/java/org/apache/maven/artifact/tools/

Added: maven/sandbox/maven-artifact-tools/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/pom.xml?view=auto&rev=453073
==============================================================================
--- maven/sandbox/maven-artifact-tools/pom.xml (added)
+++ maven/sandbox/maven-artifact-tools/pom.xml Wed Oct  4 17:46:58 2006
@@ -0,0 +1,90 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven</groupId>
+  <artifactId>maven-artifact-tools</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <name>Maven Artifact-Access Tools</name>
+  <url>http://maven.apache.org</url>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact-manager</artifactId>
+      <version>2.0.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact</artifactId>
+      <version>2.0.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>2.0.4</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>create-component-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+          <!--  Nothing to merge on this project, yet.
+          <execution>
+            <id>merge</id>
+            <configuration>
+              
<output>${project.build.outputDirectory}/META-INF/plexus/components.xml</output>
+              <descriptors>
+                
<descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+                
<descriptor>src/main/resources/META-INF/plexus/components.xml</descriptor>
+              </descriptors>
+            </configuration>
+            <goals>
+              <goal>merge-descriptors</goal>
+            </goals>
+          </execution>
+           -->
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+        </configuration>
+
+        <executions>
+          <execution>
+            <id>make-assembly</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>apache.snapshots</id>
+      <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+    </pluginRepository>
+  </pluginRepositories>
+</project>

Propchange: maven/sandbox/maven-artifact-tools/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/maven-artifact-tools/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/InvalidConfigurationException.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/InvalidConfigurationException.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/InvalidConfigurationException.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/InvalidConfigurationException.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,19 @@
+package org.apache.maven.artifact.tools;
+
+public class InvalidConfigurationException
+    extends Exception
+{
+
+    private static final long serialVersionUID = 1L;
+
+    public InvalidConfigurationException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public InvalidConfigurationException( String message )
+    {
+        super( message );
+    }
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/InvalidConfigurationException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/InvalidConfigurationException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/ComponentAccessException.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/ComponentAccessException.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/ComponentAccessException.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/ComponentAccessException.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,14 @@
+package org.apache.maven.artifact.tools.components;
+
+public class ComponentAccessException
+    extends Exception
+{
+
+    private static final long serialVersionUID = 1L;
+
+    public ComponentAccessException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/ComponentAccessException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/ComponentAccessException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,132 @@
+package org.apache.maven.artifact.tools.components;
+
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.tools.InvalidConfigurationException;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.settings.MavenSettingsBuilder;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.PlexusContainerException;
+import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+/**
+ * @plexus.component role="org.apache.maven.artifact.tools.components" 
role-hint="default"
+ * 
+ * @author jdcasey
+ */
+public class MavenComponentAccess
+    implements Contextualizable
+{
+
+    public static final String ROLE = MavenComponentAccess.class.getName();
+
+    /**
+     * @plexus.requirement
+     */
+    private MavenSettingsBuilder settingsBuilder;
+
+    /**
+     * @plexus.requirement
+     */
+    private ArtifactResolver artifactResolver;
+
+    /**
+     * @plexus.requirement
+     */
+    private ArtifactHandlerManager artifactHandlerManager;
+    
+    /**
+     * @plexus.requirement
+     */
+    private ArtifactRepositoryFactory artifactRepositoryFactory;
+    
+    /**
+     * @plexus.requirement
+     */
+    private MavenProjectBuilder mavenProjectBuilder;
+    
+    private PlexusContainer container;
+
+    private static MavenComponentAccess staticInstance;
+
+    public static MavenComponentAccess create()
+        throws ComponentAccessException
+    {
+        if ( staticInstance == null )
+        {
+            PlexusContainer container = new DefaultPlexusContainer();
+
+            try
+            {
+                container.start();
+            }
+            catch ( PlexusContainerException e )
+            {
+                throw new ComponentAccessException( "Failed to start plexus 
container for maven artifact tooling.", e );
+            }
+            
+            try
+            {
+                staticInstance = (MavenComponentAccess) container.lookup( ROLE 
);
+            }
+            catch ( ComponentLookupException e )
+            {
+                throw new ComponentAccessException( "Failed to lookup 
components necessary for maven artifact tooling.", e );
+            }
+        }
+
+        return staticInstance;
+    }
+    
+    public ArtifactRepositoryLayout getArtifactRepositoryLayout( String 
layoutId )
+        throws InvalidConfigurationException
+    {
+        try
+        {
+            return (ArtifactRepositoryLayout) container.lookup( 
ArtifactRepositoryLayout.ROLE, layoutId );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new InvalidConfigurationException( "Invalid Maven repository 
layout: \'" + layoutId + "\'.", e );
+        }
+    }
+
+    public ArtifactHandlerManager getArtifactHandlerManager()
+    {
+        return artifactHandlerManager;
+    }
+
+    public ArtifactResolver getArtifactResolver()
+    {
+        return artifactResolver;
+    }
+
+    public MavenSettingsBuilder getSettingsBuilder()
+    {
+        return settingsBuilder;
+    }
+
+    public ArtifactRepositoryFactory getArtifactRepositoryFactory()
+    {
+        return artifactRepositoryFactory;
+    }
+
+    public void contextualize( Context context )
+        throws ContextException
+    {
+        this.container = (PlexusContainer) context.get( 
PlexusConstants.PLEXUS_KEY );
+    }
+
+    public MavenProjectBuilder getMavenProjectBuilder()
+    {
+        return mavenProjectBuilder;
+    }
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,18 @@
+package org.apache.maven.artifact.tools.repository;
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.tools.InvalidConfigurationException;
+
+public interface ArtifactRepositorySource
+{
+
+    ArtifactRepository getLocalRepository()
+        throws InvalidConfigurationException;
+
+    List getArtifactRepositories();
+
+    ArtifactRepository getMirrorRepository( ArtifactRepository baseRepository 
);
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositoryTool.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositoryTool.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositoryTool.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositoryTool.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,33 @@
+package org.apache.maven.artifact.tools.repository;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.tools.InvalidConfigurationException;
+import org.apache.maven.artifact.tools.components.MavenComponentAccess;
+import org.apache.maven.settings.Mirror;
+
+public class ArtifactRepositoryTool
+{
+
+    public ArtifactRepository buildMirrorRepository( ArtifactRepository 
baseRepository, Mirror mirror,
+                                                     MavenComponentAccess 
componentAccess )
+    {
+        ArtifactRepositoryFactory repoFactory = 
componentAccess.getArtifactRepositoryFactory();
+
+        ArtifactRepository mirrorRepository = 
repoFactory.createArtifactRepository( baseRepository.getId(), mirror
+            .getUrl(), baseRepository.getLayout(), 
baseRepository.getSnapshots(), baseRepository.getReleases() );
+
+        return mirrorRepository;
+    }
+
+    public ArtifactRepository buildLocalRepository( String 
localRepositoryLocation, MavenComponentAccess componentAccess )
+        throws InvalidConfigurationException
+    {
+        ArtifactRepositoryFactory repoFactory = 
componentAccess.getArtifactRepositoryFactory();
+        ArtifactRepositoryLayout repoLayout = 
componentAccess.getArtifactRepositoryLayout( "default" );
+        
+        return repoFactory.createArtifactRepository( "local", 
localRepositoryLocation, repoLayout, null, null );
+    }
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositoryTool.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositoryTool.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,130 @@
+package org.apache.maven.artifact.tools.repository;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.tools.InvalidConfigurationException;
+import org.apache.maven.artifact.tools.components.MavenComponentAccess;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+public class MavenArtifactRepositorySource
+    implements ArtifactRepositorySource
+{
+
+    private final MavenProject project;
+
+    private final Settings settings;
+
+    private final boolean usePluginRepositories;
+
+    private ArtifactRepositoryTool repositoryTool = new 
ArtifactRepositoryTool();
+
+    // cache.
+    private ArtifactRepository localRepository;
+
+    private final MavenComponentAccess componentAccess;
+
+    public MavenArtifactRepositorySource( MavenProject project, File 
userSettingsLocation,
+                                          MavenComponentAccess 
componentAccess, boolean usePluginRepositories )
+        throws InvalidConfigurationException
+    {
+        this.project = project;
+        this.componentAccess = componentAccess;
+        this.usePluginRepositories = usePluginRepositories;
+
+        try
+        {
+            if ( userSettingsLocation == null )
+            {
+                this.settings = 
componentAccess.getSettingsBuilder().buildSettings();
+            }
+            else
+            {
+                this.settings = 
componentAccess.getSettingsBuilder().buildSettings( userSettingsLocation );
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new InvalidConfigurationException( "Error reading Maven 
settings.", e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new InvalidConfigurationException( "Error reading Maven 
settings.", e );
+        }
+    }
+
+    public List getArtifactRepositories()
+    {
+        List repos = new ArrayList();
+        List repoUrls = new ArrayList();
+
+        if ( usePluginRepositories )
+        {
+            List pluginRepos = project.getPluginArtifactRepositories();
+
+            for ( Iterator it = pluginRepos.iterator(); it.hasNext(); )
+            {
+                ArtifactRepository repo = (ArtifactRepository) it.next();
+
+                if ( !repoUrls.contains( repo.getUrl() ) )
+                {
+                    repos.add( repo );
+                }
+
+                repoUrls.add( repo.getUrl() );
+            }
+
+        }
+
+        List normalRepos = project.getRemoteArtifactRepositories();
+
+        for ( Iterator it = normalRepos.iterator(); it.hasNext(); )
+        {
+            ArtifactRepository repo = (ArtifactRepository) it.next();
+
+            if ( !repoUrls.contains( repo.getUrl() ) )
+            {
+                repos.add( repo );
+            }
+
+            repoUrls.add( repo.getUrl() );
+        }
+
+        return repos;
+    }
+
+    public ArtifactRepository getMirrorRepository( ArtifactRepository 
baseRepository )
+    {
+        Mirror mirror = settings.getMirrorOf( baseRepository.getId() );
+
+        ArtifactRepository mirrored = null;
+
+        if ( mirror != null )
+        {
+            mirrored = repositoryTool.buildMirrorRepository( baseRepository, 
mirror, componentAccess );
+        }
+
+        return mirrored;
+    }
+
+    public ArtifactRepository getLocalRepository()
+        throws InvalidConfigurationException
+    {
+        if ( localRepository == null )
+        {
+            String localRepoLocation = settings.getLocalRepository();
+            
+            localRepository = repositoryTool.buildLocalRepository( 
localRepoLocation, componentAccess );
+        }
+        
+        return localRepository;
+    }
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactQuery.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactQuery.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactQuery.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactQuery.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,116 @@
+package org.apache.maven.artifact.tools.resolve;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+public class ArtifactQuery
+{
+
+    private final String artifactId;
+
+    private final String groupId;
+
+    private String version;
+
+    private String classifier;
+
+    private String type = "jar";
+
+    private String versionRangeSpec;
+
+    private String scope = Artifact.SCOPE_COMPILE;
+
+    private boolean isOptional = false;
+    
+    public ArtifactQuery( String groupId, String artifactId )
+    {
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+    }
+    
+    public ArtifactQuery copy()
+    {
+        ArtifactQuery query = new ArtifactQuery( groupId, artifactId );
+        
+        query.version = version;
+        query.classifier = classifier;
+        query.type = type;
+        query.versionRangeSpec = versionRangeSpec;
+        query.scope = scope;
+        query.isOptional = isOptional;
+        
+        return query;
+    }
+
+    public ArtifactQuery setVersion( String version )
+    {
+        this.version = version;
+
+        return this;
+    }
+
+    public ArtifactQuery setVersionRangeSpec( String versionRangeSpec )
+    {
+        this.versionRangeSpec = versionRangeSpec;
+        return this;
+    }
+
+    public ArtifactQuery setClassifier( String classifier )
+    {
+        this.classifier = classifier;
+
+        return this;
+    }
+
+    public ArtifactQuery setScope( String scope )
+    {
+        this.scope = scope;
+        return this;
+    }
+
+    public ArtifactQuery setType( String type )
+    {
+        this.type = type;
+
+        return this;
+    }
+
+    public ArtifactQuery setOptional( boolean isOptional )
+    {
+        this.isOptional = isOptional;
+
+        return this;
+    }
+
+    public Artifact createArtifact( ArtifactHandlerManager 
artifactHandlerManager )
+        throws InvalidVersionSpecificationException
+    {
+        ArtifactHandler artifactHandler = 
artifactHandlerManager.getArtifactHandler( type );
+
+        VersionRange versionRange;
+
+        if ( versionRangeSpec != null )
+        {
+            versionRange = VersionRange.createFromVersionSpec( 
versionRangeSpec );
+        }
+        else if ( version != null )
+        {
+            versionRange = VersionRange.createFromVersion( version );
+        }
+        else
+        {
+            throw new IllegalArgumentException(
+                                                "Cannot create Artifact 
instance from incomplete ArtifactQuery; please supply version or 
versionRangeSpec." );
+        }
+
+        Artifact artifact = new DefaultArtifact( groupId, artifactId, 
versionRange, scope, type, classifier,
+                                                 artifactHandler, isOptional );
+
+        return artifact;
+    }
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactQuery.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactQuery.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionResult.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionResult.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionResult.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionResult.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,48 @@
+package org.apache.maven.artifact.tools.resolve;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.MavenProject;
+
+public class ArtifactResolutionResult
+{
+    
+    private Artifact artifact;
+    
+    private Model model;
+    
+    private MavenProject project;
+    
+    private ArtifactRepository sourceRepository;
+
+    public ArtifactResolutionResult( Artifact artifact, MavenProject project )
+    {
+        this.artifact = artifact;
+        this.project = project;
+        
+        this.model = project.getOriginalModel();
+        this.sourceRepository = artifact.getRepository();
+    }
+
+    public Artifact getArtifact()
+    {
+        return artifact;
+    }
+
+    public Model getModel()
+    {
+        return model;
+    }
+
+    public MavenProject getProject()
+    {
+        return project;
+    }
+
+    public ArtifactRepository getSourceRepository()
+    {
+        return sourceRepository;
+    }
+
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionResult.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionResult.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java?view=auto&rev=453073
==============================================================================
--- 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java
 (added)
+++ 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java
 Wed Oct  4 17:46:58 2006
@@ -0,0 +1,93 @@
+package org.apache.maven.artifact.tools.resolve;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+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.tools.InvalidConfigurationException;
+import org.apache.maven.artifact.tools.components.MavenComponentAccess;
+import org.apache.maven.artifact.tools.repository.ArtifactRepositorySource;
+import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+
+/**
+ * Convenience API for resolving Artifacts and their associated POM metadata.
+ */
+public class ArtifactResolutionTool
+{
+    private final ArtifactResolver artifactResolver;
+
+    private final ArtifactHandlerManager artifactHandlerManager;
+
+    private final MavenProjectBuilder mavenProjectBuilder;
+
+    public ArtifactResolutionTool( MavenComponentAccess componentAccess )
+    {
+        this.artifactResolver = componentAccess.getArtifactResolver();
+        this.artifactHandlerManager = 
componentAccess.getArtifactHandlerManager();
+        this.mavenProjectBuilder = componentAccess.getMavenProjectBuilder();
+    }
+
+    public ArtifactResolutionResult resolve( ArtifactQuery query, 
ArtifactRepositorySource repositorySource )
+        throws InvalidVersionSpecificationException, 
ArtifactResolutionException, ArtifactNotFoundException,
+        InvalidConfigurationException, ProjectBuildingException
+    {
+        Artifact artifact = query.createArtifact( artifactHandlerManager );
+
+        List repositories = constructMirroredRepositoryList( repositorySource 
);
+
+        ArtifactRepository localRepository = 
repositorySource.getLocalRepository();
+
+        artifactResolver.resolve( artifact, repositories, localRepository );
+
+        MavenProject project = mavenProjectBuilder.buildFromRepository( 
artifact, Collections.EMPTY_LIST,
+                                                                        
localRepository );
+
+        ArtifactResolutionResult result = new ArtifactResolutionResult( 
artifact, project );
+
+        return result;
+    }
+
+    public ArtifactResolutionResult resolveProjectMetadata( ArtifactQuery 
query, ArtifactRepositorySource repositorySource )
+        throws InvalidVersionSpecificationException, 
ArtifactResolutionException, ArtifactNotFoundException,
+        InvalidConfigurationException, ProjectBuildingException
+    {
+        ArtifactQuery pomQuery = query.copy();
+        pomQuery.setType( "pom" );
+        
+        return resolve( pomQuery, repositorySource );
+    }
+
+    private List constructMirroredRepositoryList( ArtifactRepositorySource 
repositorySource )
+    {
+        List repositories = repositorySource.getArtifactRepositories();
+        List mirrorEnabled = new ArrayList( repositories.size() );
+
+        for ( Iterator it = repositories.iterator(); it.hasNext(); )
+        {
+            ArtifactRepository repository = (ArtifactRepository) it.next();
+
+            ArtifactRepository mirrorRepo = 
repositorySource.getMirrorRepository( repository );
+
+            if ( mirrorRepo == null )
+            {
+                mirrorEnabled.add( repository );
+            }
+            else
+            {
+                mirrorEnabled.add( mirrorRepo );
+            }
+        }
+
+        return mirrorEnabled;
+    }
+}

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"


Reply via email to