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"