started adding tree resolution to Mercury repo system impl

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@760790 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Oleg Gusakov 2009-04-01 06:19:10 +00:00
parent 860c7e04c0
commit 6ab1ab8389
6 changed files with 146 additions and 10 deletions

View File

@ -29,12 +29,16 @@ import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.mercury.artifact.ArtifactMetadata;
import org.apache.maven.mercury.artifact.MetadataTreeNode;
import org.apache.maven.mercury.builder.api.DependencyProcessor;
import org.apache.maven.mercury.repository.api.Repository;
import org.apache.maven.mercury.repository.local.m2.LocalRepositoryM2;
import org.apache.maven.mercury.repository.remote.m2.RemoteRepositoryM2;
import org.apache.maven.mercury.transport.api.Server;
import org.apache.maven.mercury.util.Util;
import org.apache.maven.repository.MavenArtifactMetadata;
import org.apache.maven.repository.MetadataGraph;
import org.apache.maven.repository.MetadataGraphNode;
/**
* @author Oleg Gusakov
@ -137,4 +141,49 @@ public class MercuryAdaptor
return toMavenArtifact( af, new ArtifactMetadata(name) );
}
public static MavenArtifactMetadata toMavenArtifactMetadata( ArtifactMetadata md )
{
MavenArtifactMetadata mmd = new MavenArtifactMetadata();
mmd.setGroupId( md.getGroupId() );
mmd.setArtifactId( md.getArtifactId() );
mmd.setVersion( md.getVersion() );
mmd.setClassifier( md.getClassifier() );
mmd.setType( md.getType() );
return mmd;
}
public static MetadataGraph resolvedTreeToGraph( MetadataTreeNode root )
{
if( root == null )
return null;
MetadataGraphNode entry = new MetadataGraphNode( toMavenArtifactMetadata( root.getMd() ) );
MetadataGraph graph = new MetadataGraph(entry);
addKids( root, entry, graph );
return graph;
}
private static final void addKids( MetadataTreeNode tParent, MetadataGraphNode gParent, MetadataGraph graph )
{
if( !tParent.hasChildren() )
return;
for( MetadataTreeNode kid : tParent.getChildren() )
{
MavenArtifactMetadata mmd = toMavenArtifactMetadata( kid.getMd() );
MetadataGraphNode node = graph.findNode( mmd );
node.addIncident( gParent );
gParent.addIncident( node );
addKids( kid, node, graph );
}
}
}

View File

@ -19,7 +19,17 @@ under the License.
package org.apache.maven.repository.mercury;
import java.io.IOException;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.mercury.artifact.ArtifactMetadata;
import org.apache.maven.repository.AbstractMavenRepositorySystemTest;
import org.apache.maven.repository.MavenArtifactMetadata;
import org.apache.maven.repository.MetadataResolutionRequest;
import org.apache.maven.repository.MetadataResolutionResult;
import org.apache.maven.repository.RepositorySystem;
/**
@ -39,4 +49,44 @@ public class MercuryRepositorySystemTest
_mrs = getContainer().lookup( RepositorySystem.class, "mercury" );
}
public void testRetrieve() throws IOException
{
MavenArtifactMetadata mad = MercuryAdaptor.toMavenArtifactMetadata( new ArtifactMetadata( "asm:asm-xml:3.0" ) );
MetadataResolutionRequest request = new MetadataResolutionRequest();
request.setLocalRepository( _localRepo );
request.setRemoteRepostories( _remoteRepos );
request.setArtifactMetadata( mad );
request.setAsResolvedTree( true );
MetadataResolutionResult res = _mrs.resolveMetadata( request );
// assertNotNull( res );
//
// Set<Artifact> as = res.getArtifacts();
//
// assertNotNull( as );
//
// assertEquals( 4, as.size() );
//
// assertTrue( checkExists( as, "asm:asm-xml:3.0" ) );
//
// assertTrue( checkExists( as, "asm:asm-util:3.0" ) );
//
// assertTrue( checkExists( as, "asm:asm-tree:3.0" ) );
//
// assertTrue( checkExists( as, "asm:asm:3.0" ) );
//
// assertFalse( checkExists( as, "asm:asm-parent:3.0" ) );
//
// for( Artifact a : as )
// {
// assertTrue( a.getFile().exists() );
//
// System.out.println( a.getFile().getCanonicalPath()+ " : "+ a.getFile().length()+" bytes");
// }
}
}

View File

@ -114,8 +114,8 @@ public class MavenArtifactMetadata
public String toString()
{
return getGroupId()+":"+getArtifactId()+":"+getVersion()
+":" + (getClassifier() == null ? "" : getClassifier() )
+":" + (getType() == null ? DEFAULT_TYPE : getType() )
+":" + (getClassifier() == null ? "" : getClassifier() )
+":" + (getType() == null ? DEFAULT_TYPE : getType() )
;
}

View File

@ -50,4 +50,16 @@ public class MetadataGraph
{
nodes.add( node );
}
public MetadataGraphNode findNode( MavenArtifactMetadata md )
{
for( MetadataGraphNode mgn : nodes )
if( mgn.metadata.equals( md ) )
return mgn;
MetadataGraphNode node = new MetadataGraphNode( md );
addNode( node );
return node;
}
}

View File

@ -19,6 +19,7 @@ under the License.
package org.apache.maven.repository;
import java.util.ArrayList;
import java.util.List;
/**
@ -35,6 +36,30 @@ public class MetadataGraphNode
List<MetadataGraphNode> inNodes;
List<MetadataGraphNode> exNodes;
public MetadataGraphNode()
{
inNodes = new ArrayList<MetadataGraphNode>(4);
exNodes = new ArrayList<MetadataGraphNode>(8);
}
public MetadataGraphNode( MavenArtifactMetadata metadata )
{
this();
this.metadata = metadata;
}
public MetadataGraphNode addIncident( MetadataGraphNode node )
{
inNodes.add( node );
return this;
}
public MetadataGraphNode addExident( MetadataGraphNode node )
{
exNodes.add( node );
return this;
}
@Override
public boolean equals( Object obj )
{

View File

@ -39,7 +39,7 @@ import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
*/
public class MetadataResolutionRequest
{
private Artifact artifact;
private MavenArtifactMetadata mad;
// Needs to go away
private Set<Artifact> artifactDependencies;
@ -80,21 +80,21 @@ public class MetadataResolutionRequest
{
}
public MetadataResolutionRequest( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
public MetadataResolutionRequest( MavenArtifactMetadata md, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
{
this.artifact = artifact;
this.mad = md;
this.localRepository = localRepository;
this.remoteRepositories = remoteRepositories;
}
public Artifact getArtifact()
public MavenArtifactMetadata getArtifact()
{
return artifact;
return mad;
}
public MetadataResolutionRequest setArtifact( Artifact artifact )
public MetadataResolutionRequest setArtifactMetadata( MavenArtifactMetadata md )
{
this.artifact = artifact;
this.mad = md;
return this;
}
@ -210,7 +210,7 @@ public class MetadataResolutionRequest
{
StringBuffer sb = new StringBuffer()
.append( "REQUEST: " ).append( "\n" )
.append( "artifact: " ).append( artifact ).append( "\n" )
.append( "artifact: " ).append( mad ).append( "\n" )
.append( artifactDependencies ).append( "\n" )
.append( "localRepository: " ).append( localRepository ).append( "\n" )
.append( "remoteRepositories: " ).append( remoteRepositories ).append( "\n" )