You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/10/06 18:11:40 UTC

svn commit: r453656 - in /maven/sandbox/maven-artifact-tools: ./ src/main/java/org/apache/maven/artifact/tools/components/ src/main/java/org/apache/maven/artifact/tools/repository/ src/main/java/org/apache/maven/artifact/tools/resolve/ src/test/java/or...

Author: jdcasey
Date: Fri Oct  6 09:11:39 2006
New Revision: 453656

URL: http://svn.apache.org/viewvc?view=rev&rev=453656
Log:
Adding unit test for component accessor class, and refining the API for repository sources.

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

Modified: maven/sandbox/maven-artifact-tools/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/pom.xml?view=diff&rev=453656&r1=453655&r2=453656
==============================================================================
--- maven/sandbox/maven-artifact-tools/pom.xml (original)
+++ maven/sandbox/maven-artifact-tools/pom.xml Fri Oct  6 09:11:39 2006
@@ -1,36 +1,10 @@
-<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">
+<?xml version="1.0"?><project>
   <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>
+  <version>1.0-SNAPSHOT</version>
   <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>
@@ -43,31 +17,10 @@
               <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>
@@ -77,14 +30,46 @@
             </goals>
           </execution>
         </executions>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+        </configuration>
       </plugin>
     </plugins>
   </build>
-
   <pluginRepositories>
     <pluginRepository>
       <id>apache.snapshots</id>
       <url>http://people.apache.org/repo/m2-snapshot-repository</url>
     </pluginRepository>
   </pluginRepositories>
-</project>
+  <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>
+    <dependency>
+      <groupId>easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <version>1.2_Java1.3</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Modified: 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=diff&rev=453656&r1=453655&r2=453656
==============================================================================
--- maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java (original)
+++ maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/components/MavenComponentAccess.java Fri Oct  6 09:11:39 2006
@@ -1,5 +1,7 @@
 package org.apache.maven.artifact.tools.components;
 
+import java.util.Map;
+
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
@@ -7,17 +9,19 @@
 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.configuration.PlexusConfigurationResourceException;
 import org.codehaus.plexus.context.Context;
 import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.embed.Embedder;
+import org.codehaus.plexus.embed.PlexusEmbedder;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 /**
- * @plexus.component role="org.apache.maven.artifact.tools.components" role-hint="default"
+ * @plexus.component role="org.apache.maven.artifact.tools.components.MavenComponentAccess" role-hint="default"
  * 
  * @author jdcasey
  */
@@ -41,27 +45,48 @@
      * @plexus.requirement
      */
     private ArtifactHandlerManager artifactHandlerManager;
-    
+
     /**
      * @plexus.requirement
      */
     private ArtifactRepositoryFactory artifactRepositoryFactory;
-    
+
     /**
      * @plexus.requirement
      */
     private MavenProjectBuilder mavenProjectBuilder;
-    
+
     private PlexusContainer container;
 
-    private static MavenComponentAccess staticInstance;
+    private final Map artifactRepositoryLayoutsById;
 
-    public static MavenComponentAccess create()
+    private static MavenComponentAccess selfContainedInstance;
+
+    public MavenComponentAccess()
+    {
+        //used for Plexus-based initialization.
+        this.artifactRepositoryLayoutsById = null;
+    }
+
+    public MavenComponentAccess( MavenSettingsBuilder settingsBuilder, ArtifactResolver artifactResolver,
+                                 ArtifactHandlerManager artifactHandlerManager,
+                                 ArtifactRepositoryFactory artifactRepositoryFactory,
+                                 MavenProjectBuilder mavenProjectBuilder, Map artifactRepositoryLayoutsById )
+    {
+        this.settingsBuilder = settingsBuilder;
+        this.artifactResolver = artifactResolver;
+        this.artifactHandlerManager = artifactHandlerManager;
+        this.artifactRepositoryFactory = artifactRepositoryFactory;
+        this.mavenProjectBuilder = mavenProjectBuilder;
+        this.artifactRepositoryLayoutsById = artifactRepositoryLayoutsById;
+    }
+
+    public static MavenComponentAccess createSelfContainedInstance()
         throws ComponentAccessException
     {
-        if ( staticInstance == null )
+        if ( selfContainedInstance == null )
         {
-            PlexusContainer container = new DefaultPlexusContainer();
+            PlexusEmbedder container = new Embedder();
 
             try
             {
@@ -71,31 +96,54 @@
             {
                 throw new ComponentAccessException( "Failed to start plexus container for maven artifact tooling.", e );
             }
-            
+            catch ( PlexusConfigurationResourceException e )
+            {
+                throw new ComponentAccessException( "Failed to start plexus container for maven artifact tooling.", e );
+            }
+
             try
             {
-                staticInstance = (MavenComponentAccess) container.lookup( ROLE );
+                selfContainedInstance = (MavenComponentAccess) container.lookup( ROLE );
             }
             catch ( ComponentLookupException e )
             {
-                throw new ComponentAccessException( "Failed to lookup components necessary for maven artifact tooling.", e );
+                throw new ComponentAccessException(
+                                                    "Failed to lookup components necessary for maven artifact tooling.",
+                                                    e );
             }
         }
 
-        return staticInstance;
+        return selfContainedInstance;
     }
-    
+
     public ArtifactRepositoryLayout getArtifactRepositoryLayout( String layoutId )
         throws InvalidConfigurationException
     {
-        try
+        ArtifactRepositoryLayout layout = null;
+        
+        if ( artifactRepositoryLayoutsById != null )
+        {
+
+            layout = (ArtifactRepositoryLayout) artifactRepositoryLayoutsById.get( layoutId );
+        }
+        else if ( container != null )
         {
-            return (ArtifactRepositoryLayout) container.lookup( ArtifactRepositoryLayout.ROLE, layoutId );
+            try
+            {
+                layout = (ArtifactRepositoryLayout) container.lookup( ArtifactRepositoryLayout.ROLE, layoutId );
+            }
+            catch ( ComponentLookupException e )
+            {
+                throw new InvalidConfigurationException( "Invalid Maven repository layout: \'" + layoutId + "\'.", e );
+            }
         }
-        catch ( ComponentLookupException e )
+        else
         {
-            throw new InvalidConfigurationException( "Invalid Maven repository layout: \'" + layoutId + "\'.", e );
+            throw new InvalidConfigurationException( "Repository layouts are not available. Either "
+                + "use self-contained instance, or construct with a mapping of layouts by id." );
         }
+        
+        return layout;
     }
 
     public ArtifactHandlerManager getArtifactHandlerManager()

Modified: 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=diff&rev=453656&r1=453655&r2=453656
==============================================================================
--- maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java (original)
+++ maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/ArtifactRepositorySource.java Fri Oct  6 09:11:39 2006
@@ -13,6 +13,4 @@
 
     List getArtifactRepositories();
 
-    ArtifactRepository getMirrorRepository( ArtifactRepository baseRepository );
-
 }

Modified: 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=diff&rev=453656&r1=453655&r2=453656
==============================================================================
--- maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java (original)
+++ maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/repository/MavenArtifactRepositorySource.java Fri Oct  6 09:11:39 2006
@@ -97,21 +97,9 @@
             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 );
-        }
+        repos = constructMirroredRepositoryList( repos );
 
-        return mirrored;
+        return repos;
     }
 
     public ArtifactRepository getLocalRepository()
@@ -127,4 +115,40 @@
         return localRepository;
     }
 
+    private List constructMirroredRepositoryList( List repositories )
+    {
+        List mirrorEnabled = new ArrayList( repositories.size() );
+
+        for ( Iterator it = repositories.iterator(); it.hasNext(); )
+        {
+            ArtifactRepository repository = (ArtifactRepository) it.next();
+
+            ArtifactRepository mirrorRepo = getMirrorRepository( repository );
+
+            if ( mirrorRepo == null )
+            {
+                mirrorEnabled.add( repository );
+            }
+            else
+            {
+                mirrorEnabled.add( mirrorRepo );
+            }
+        }
+
+        return mirrorEnabled;
+    }
+
+    private ArtifactRepository getMirrorRepository( ArtifactRepository baseRepository )
+    {
+        Mirror mirror = settings.getMirrorOf( baseRepository.getId() );
+
+        ArtifactRepository mirrored = null;
+
+        if ( mirror != null )
+        {
+            mirrored = repositoryTool.buildMirrorRepository( baseRepository, mirror, componentAccess );
+        }
+
+        return mirrored;
+    }
 }

Modified: 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=diff&rev=453656&r1=453655&r2=453656
==============================================================================
--- maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java (original)
+++ maven/sandbox/maven-artifact-tools/src/main/java/org/apache/maven/artifact/tools/resolve/ArtifactResolutionTool.java Fri Oct  6 09:11:39 2006
@@ -1,8 +1,6 @@
 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;
@@ -43,10 +41,10 @@
     {
         Artifact artifact = query.createArtifact( artifactHandlerManager );
 
-        List repositories = constructMirroredRepositoryList( repositorySource );
-
         ArtifactRepository localRepository = repositorySource.getLocalRepository();
 
+        List repositories = repositorySource.getArtifactRepositories();
+        
         artifactResolver.resolve( artifact, repositories, localRepository );
 
         MavenProject project = mavenProjectBuilder.buildFromRepository( artifact, Collections.EMPTY_LIST,
@@ -65,29 +63,5 @@
         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;
     }
 }

Added: maven/sandbox/maven-artifact-tools/src/test/java/org/apache/maven/artifact/tools/components/MavenComponentAccessTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-artifact-tools/src/test/java/org/apache/maven/artifact/tools/components/MavenComponentAccessTest.java?view=auto&rev=453656
==============================================================================
--- maven/sandbox/maven-artifact-tools/src/test/java/org/apache/maven/artifact/tools/components/MavenComponentAccessTest.java (added)
+++ maven/sandbox/maven-artifact-tools/src/test/java/org/apache/maven/artifact/tools/components/MavenComponentAccessTest.java Fri Oct  6 09:11:39 2006
@@ -0,0 +1,94 @@
+package org.apache.maven.artifact.tools.components;
+
+import java.util.Collections;
+import java.util.Map;
+
+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.apache.maven.shared.tools.easymock.MockManager;
+import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.configuration.PlexusConfigurationResourceException;
+import org.codehaus.plexus.embed.Embedder;
+import org.codehaus.plexus.embed.PlexusEmbedder;
+import org.easymock.MockControl;
+
+import junit.framework.TestCase;
+
+public class MavenComponentAccessTest
+    extends TestCase
+{
+
+    public void testShouldConstructWithAllRequiredComponentInstancesAndLayoutMap()
+        throws InvalidConfigurationException
+    {
+        //        public MavenComponentAccess( MavenSettingsBuilder settingsBuilder, ArtifactResolver artifactResolver,
+        //                                     ArtifactHandlerManager artifactHandlerManager,
+        //                                     ArtifactRepositoryFactory artifactRepositoryFactory,
+        //                                     MavenProjectBuilder mavenProjectBuilder, Map artifactRepositoryLayoutsById )
+
+        MockManager mm = new MockManager();
+
+        MockControl msbControl = MockControl.createControl( MavenSettingsBuilder.class );
+        mm.add( msbControl );
+
+        MavenSettingsBuilder msb = (MavenSettingsBuilder) msbControl.getMock();
+
+        MockControl arControl = MockControl.createControl( ArtifactResolver.class );
+        mm.add( arControl );
+
+        ArtifactResolver ar = (ArtifactResolver) arControl.getMock();
+
+        MockControl ahmControl = MockControl.createControl( ArtifactHandlerManager.class );
+        mm.add( ahmControl );
+
+        ArtifactHandlerManager ahm = (ArtifactHandlerManager) ahmControl.getMock();
+
+        MockControl arfControl = MockControl.createControl( ArtifactRepositoryFactory.class );
+        mm.add( arfControl );
+
+        ArtifactRepositoryFactory arf = (ArtifactRepositoryFactory) arfControl.getMock();
+
+        MockControl mpbControl = MockControl.createControl( MavenProjectBuilder.class );
+        mm.add( mpbControl );
+
+        MavenProjectBuilder mpb = (MavenProjectBuilder) mpbControl.getMock();
+
+        MockControl arlControl = MockControl.createControl( ArtifactRepositoryLayout.class );
+        mm.add( arlControl );
+
+        ArtifactRepositoryLayout arl = (ArtifactRepositoryLayout) arlControl.getMock();
+
+        Map layouts = Collections.singletonMap( "test", arl );
+
+        MavenComponentAccess mca = new MavenComponentAccess( msb, ar, ahm, arf, mpb, layouts );
+
+        assertSame( arl, mca.getArtifactRepositoryLayout( "test" ) );
+    }
+
+    public void testShouldCreateSelfContainedAndLookupDefaultLayout()
+        throws ComponentAccessException, InvalidConfigurationException
+    {
+        MavenComponentAccess mca = MavenComponentAccess.createSelfContainedInstance();
+
+        assertNotNull( mca.getArtifactRepositoryLayout( "default" ) );
+    }
+
+    public void testShouldLookupInstanceFromExistingContainerAndFindDefaultLayout()
+        throws PlexusContainerException, PlexusConfigurationResourceException, ComponentLookupException,
+        InvalidConfigurationException
+    {
+        PlexusEmbedder embedder = new Embedder();
+        embedder.start();
+
+        MavenComponentAccess mca = (MavenComponentAccess) embedder.lookup( MavenComponentAccess.ROLE );
+
+        assertNotNull( mca.getArtifactRepositoryLayout( "default" ) );
+    }
+
+}

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

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