[prev in list] [next in list] [prev in thread] [next in thread]
List: maven-dev
Subject: svn commit: r599644 - in
From: jvanzyl () apache ! org
Date: 2007-11-30 0:02:54
Message-ID: 20071130000256.10F2F1A983A () eris ! apache ! org
[Download RAW message or body]
Author: jvanzyl
Date: Thu Nov 29 16:02:37 2007
New Revision: 599644
URL: http://svn.apache.org/viewvc?rev=599644&view=rev
Log:
o merging in oleg's latest artifact changes
Removed:
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraphVertice.java
Modified:
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/ArtifactMetadata.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/DefaultMetadataResolver.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraph.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraphEdge.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolution.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionRequestTypeEnum.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionResult.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolver.java
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataTreeNode.java
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java \
Thu Nov 29 16:02:37 2007 @@ -1,5 +1,13 @@
package org.apache.maven.artifact;
+/**
+ * Type safe reincarnation of Artifact scope. Also supplies the \
<code>DEFAULT_SCOPE<code> as well + * as convenience method to deal with scope \
relationships. + *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
public enum ArtifactScopeEnum
{
compile( 1 ), test( 2 ), runtime( 3 ), provided( 4 ), system( 5 );
@@ -19,6 +27,21 @@
return id;
}
+
+ /**
+ * Helper method to simplify null processing
+ *
+ * @return
+ */
+ public static final ArtifactScopeEnum checkScope( ArtifactScopeEnum scope )
+ {
+ return scope == null ? DEFAULT_SCOPE : scope;
+ }
+
+ /**
+ *
+ * @return unsafe String representation of this scope.
+ */
public String getScope()
{
if ( id == 1 )
@@ -43,5 +66,39 @@
{
return Artifact.SCOPE_SYSTEM;
}
+ }
+
+ private static final ArtifactScopeEnum [][][] _compliancySets = {
+ { { compile }, { compile, test, runtime, provided, system } }
+ , { { test }, { compile, test, provided, system } }
+ , { { runtime }, { compile, runtime, system } }
+ , { { provided }, { compile, test, provided } }
+ };
+
+ /**
+ * scope relationship function. Used by the graph conflict resolution policies
+ *
+ * @param scope
+ * @return true is supplied scope is an inclusive sub-scope of current one.
+ */
+ public boolean encloses( ArtifactScopeEnum scope )
+ {
+ final ArtifactScopeEnum s = checkScope(scope);
+
+ // system scope is historic only - and simple
+ if( id == system.id )
+ return scope.id == system.id;
+
+
+ for( ArtifactScopeEnum[][] set : _compliancySets ) {
+ if( id == set[0][0].id ) {
+ for( ArtifactScopeEnum ase : set[1] ) {
+ if( s.id == ase.id )
+ return true;
+ }
+ break;
+ }
+ }
+ return false;
}
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/ArtifactMetadata.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/ArtifactMetadata.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/ArtifactMetadata.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/ArtifactMetadata.java \
Thu Nov 29 16:02:37 2007 @@ -1,21 +1,78 @@
package org.apache.maven.artifact.resolver.metadata;
+import java.util.Collection;
+
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactScopeEnum;
-/** @author Oleg Gusakov */
+/**
+ * Artifact Metadata that is resolved independent of Artifact itself.
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
public class ArtifactMetadata
{
+ /**
+ * standard glorified artifact coordinates
+ */
protected String groupId;
protected String artifactId;
protected String version;
protected String type;
protected ArtifactScopeEnum artifactScope;
protected String classifier;
+
+ /**
+ * explanation: why this MD was chosen over it's siblings
+ * in the resulting structure (classpath for now)
+ */
+ protected String why;
+
+ /** dependencies of the artifact behind this metadata */
+ protected Collection<ArtifactMetadata> dependencies;
+
+ /** metadata URI */
protected String uri;
+ /** is metadata found anywhere */
protected boolean resolved = false;
-
+
+ /** does the actual artifact for this metadata exists */
+ protected boolean artifactExists = false;
+
+ /** artifact URI */
+ protected String artifactUri;
+
+ /** error message */
+ private String error;
+
+ //------------------------------------------------------------------
+ /**
+ *
+ */
+ public ArtifactMetadata( String name )
+ {
+ if( name == null )
+ return;
+ int ind1 = name.indexOf(':');
+ int ind2 = name.lastIndexOf(':');
+
+ if( ind1 == -1 || ind2 == -1 )
+ return;
+
+ this.groupId = name.substring(0, ind1);
+ if( ind1 == ind2 )
+ {
+ this.artifactId = name.substring(ind1+1);
+ }
+ else
+ {
+ this.artifactId = name.substring( ind1+1, ind2 );
+ this.version = name.substring( ind2+1 );
+ }
+ }
+
//------------------------------------------------------------------
public ArtifactMetadata( String groupId,
String name,
@@ -23,7 +80,6 @@
{
this( groupId, name, version, null );
}
-
//------------------------------------------------------------------
public ArtifactMetadata( String groupId,
String name,
@@ -51,12 +107,43 @@
ArtifactScopeEnum artifactScope,
String classifier )
{
+ this( groupId, name, version, type, artifactScope, classifier, null );
+ }
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId,
+ String name,
+ String version,
+ String type,
+ ArtifactScopeEnum artifactScope,
+ String classifier
+ , String artifactUri
+ )
+ {
+ this( groupId, name, version, type, artifactScope, classifier, artifactUri, \
null, true, null ); + }
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId
+ , String name
+ , String version
+ , String type
+ , ArtifactScopeEnum artifactScope
+ , String classifier
+ , String artifactUri
+ , String why
+ , boolean resolved
+ , String error
+ )
+ {
this.groupId = groupId;
this.artifactId = name;
this.version = version;
this.type = type;
this.artifactScope = artifactScope;
this.classifier = classifier;
+ this.artifactUri = artifactUri;
+ this.why = why;
+ this.resolved = resolved;
+ this.error = error;
}
//------------------------------------------------------------------
@@ -69,20 +156,19 @@
}
*/
}
-
//------------------------------------------------------------------
- public void init( ArtifactMetadata af )
- {
- setGroupId( af.getGroupId() );
- setArtifactId( af.getArtifactId() );
- setVersion( af.getVersion() );
- setType( af.getType() );
- setScope( af.getScope() );
- setClassifier( af.getClassifier() );
- //setUri( af.getDownloadUrl() );
-
- this.resolved = af.isResolved();
- }
+// public void init( ArtifactMetadata af )
+// {
+// setGroupId( af.getGroupId() );
+// setArtifactId( af.getArtifactId() );
+// setVersion( af.getVersion() );
+// setType( af.getType() );
+// setScope( af.getScope() );
+// setClassifier( af.getClassifier() );
+// //setUri( af.getDownloadUrl() );
+//
+// this.resolved = af.isResolved();
+// }
//------------------------------------------------------------------
@Override
@@ -188,19 +274,72 @@
public String getScope()
{
- if ( artifactScope == null )
- {
- return ArtifactScopeEnum.DEFAULT_SCOPE.getScope();
- }
-
- return artifactScope.getScope();
+ return getArtifactScope().getScope();
}
- public String getDependencyConflictId()
+ public ArtifactScopeEnum getScopeAsEnum()
+ {
+ return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : \
artifactScope; + }
+
+ public boolean isArtifactExists()
+ {
+ return artifactExists;
+ }
+
+ public void setArtifactExists(boolean artifactExists)
+ {
+ this.artifactExists = artifactExists;
+ }
+
+
+ public Collection<ArtifactMetadata> getDependencies()
+ {
+ return dependencies;
+ }
+
+ public void setDependencies(Collection<ArtifactMetadata> dependencies)
+ {
+ this.dependencies = dependencies;
+ }
+
+ public String getArtifactUri()
+ {
+ return artifactUri;
+ }
+
+ public void setArtifactUri(String artifactUri)
+ {
+ this.artifactUri = artifactUri;
+ }
+
+
+ public String getWhy()
+ {
+ return why;
+ }
+ public void setWhy(String why)
+ {
+ this.why = why;
+ }
+ //-------------------------------------------------------------------
+ public String getError()
+ {
+ return error;
+ }
+ public void setError(String error)
+ {
+ this.error = error;
+ }
+ public boolean isError()
+ {
+ return error == null;
+ }
+ //------------------------------------------------------------------
+ public String getDependencyConflictId()
{
return groupId + ":" + artifactId;
}
-
//------------------------------------------------------------------
//------------------------------------------------------------------
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/DefaultMetadataResolver.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/DefaultMetadataResolver.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/DefaultMetadataResolver.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/DefaultMetadataResolver.java \
Thu Nov 29 16:02:37 2007 @@ -1,19 +1,30 @@
package org.apache.maven.artifact.resolver.metadata;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactScopeEnum;
import org.apache.maven.artifact.factory.ArtifactFactory;
+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.ArtifactResolutionRequest;
import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.conflict.GraphConflictResolver;
+import org.apache.maven.artifact.transform.ClasspathTransformation;
import org.codehaus.plexus.logging.AbstractLogEnabled;
+
/**
- * @author Oleg Gusakov
+ * default implementation of the metadata resolver
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
* @plexus.component
+ *
*/
public class DefaultMetadataResolver
extends AbstractLogEnabled
@@ -30,6 +41,12 @@
/** @plexus.requirement */
MetadataSource metadataSource;
+ /** @plexus.requirement */
+ GraphConflictResolver conflictResolver;
+
+ /** @plexus.requirement */
+ ClasspathTransformation classpathTransformation;
+
//------------------------------------------------------------------------
public MetadataResolutionResult resolveMetadata( MetadataResolutionRequest req )
throws MetadataResolutionException
@@ -38,30 +55,20 @@
{
getLogger().debug( "Received request for: " + req.getQuery() );
- MetadataResolutionResult res = new MetadataResolutionResult();
+ MetadataResolutionResult res = new MetadataResolutionResult( \
conflictResolver, classpathTransformation);
if ( req.type == null )
{
throw new MetadataResolutionException( "no type in the request" );
}
- MetadataTreeNode tree = resolveTree( req, null );
-
- MetadataGraph graph;
-
- if ( MetadataResolutionRequestTypeEnum.tree.equals( req.type ) )
- {
- res.setTree( tree );
- }
- if ( MetadataResolutionRequestTypeEnum.graph.equals( req.type ) )
- {
- graph = new MetadataGraph( tree );
-
- res.setTree( tree );
-
- res.setGraph( graph );
- }
+ MetadataTreeNode tree = resolveMetadataTree( req.getQuery()
+ , null
+ , req.getLocalRepository()
+ , req.getRemoteRepositories()
+ );
+ res.setTree( tree );
return res;
}
catch ( MetadataResolutionException mrEx )
@@ -75,16 +82,18 @@
}
//------------------------------------------------------------------------
- private MetadataTreeNode resolveTree( MetadataResolutionRequest req,
- MetadataTreeNode parent )
+ private MetadataTreeNode resolveMetadataTree( ArtifactMetadata query
+ , MetadataTreeNode parent
+ , ArtifactRepository localRepository
+ , List<ArtifactRepository> remoteRepositories
+ )
throws MetadataResolutionException
{
try
{
- ArtifactMetadata query = req.getQuery();
Artifact pomArtifact = artifactFactory.createArtifact(
- query.getGroupId()
+ query.getGroupId()
, query.getArtifactId()
, query.getVersion()
, null
@@ -93,8 +102,8 @@
getLogger().debug( "resolveMetadata request:"
+ "\n> artifact : " + pomArtifact.toString()
- + "\n> remoteRepos: " + req.getRemoteRepositories()
- + "\n> localRepo : " + req.getLocalRepository()
+ + "\n> remoteRepos: " + remoteRepositories
+ + "\n> localRepo : " + localRepository
);
String error = null;
@@ -102,28 +111,25 @@
try
{
ArtifactResolutionRequest arr = new ArtifactResolutionRequest();
-
arr.setArtifact( pomArtifact );
+ arr.setLocalRepository( localRepository );
+ arr.setRemoteRepostories( remoteRepositories );
- arr.setLocalRepository( req.getLocalRepository() );
-
- arr.setRemoteRepostories( req.getRemoteRepositories() );
-
- artifactResolver.resolve( pomArtifact, req.getRemoteRepositories() , \
req.getLocalRepository() ); + artifactResolver.resolve( pomArtifact, \
remoteRepositories , localRepository ); +//System.out.println("Resolved "+query+" : \
"+pomArtifact.isResolved() );
if ( !pomArtifact.isResolved() )
{
getLogger().info( "*************> Did not resolve " + \
pomArtifact.toString() + "\nURL: " + pomArtifact.getDownloadUrl()
- + "\nRepos: " + req.getRemoteRepositories()
- + "\nLocal: " + req.getLocalRepository()
+ + "\nRepos: " + remoteRepositories
+ + "\nLocal: " + localRepository
);
}
}
catch ( ArtifactResolutionException are )
{
pomArtifact.setResolved( false );
-
error = are.getMessage();
}
catch ( ArtifactNotFoundException anfe )
@@ -132,45 +138,62 @@
error = anfe.getMessage();
}
- if ( error != null )
+ if( error != null )
{
getLogger().info( "*************> Did not resolve " + \
pomArtifact.toString()
- + "\nRepos: " + req.getRemoteRepositories()
- + "\nLocal: " + req.getLocalRepository()
+ + "\nRepos: " + remoteRepositories
+ + "\nLocal: " + localRepository
+ "\nerror: " + error
);
}
- if ( pomArtifact.isResolved() )
+ if( pomArtifact.isResolved() )
{
- MetadataResolution metadataResolution = metadataSource.retrieve( \
query, req.getLocalRepository(), req.getRemoteRepositories() );
-
- MetadataTreeNode node = new MetadataTreeNode( pomArtifact, parent, \
true, query.getArtifactScope() );
-
- Set<ArtifactMetadata> dependencies = \
metadataResolution.getDependencies(); + MetadataResolution \
metadataResolution = metadataSource.retrieve( + query
+ , localRepository
+ , remoteRepositories
+ );
+ ArtifactMetadata found = metadataResolution.getArtifactMetadata();
+
+ // TODO
+ // Oleg: this is a shortcut to get AMd artifact location URI
+ // it is only valid because artifact (A) resolution is done BEFORE
+ // Md resolution.
+ //
+ // Should be done inside Md Source instead
+ //
+ found.setArtifactUri( pomArtifact.getFile().toURI().toString() );
+
+ MetadataTreeNode node = new MetadataTreeNode( found
+ , parent
+ , true
+ , found.getScopeAsEnum()
+ );
+ Collection<ArtifactMetadata> dependencies
+ = metadataResolution.getArtifactMetadata().getDependencies();
- if ( dependencies != null && dependencies.size() > 0 )
+ if( dependencies != null && dependencies.size() > 0 )
{
- ArrayList<MetadataTreeNode> kids = new \
ArrayList<MetadataTreeNode>( dependencies.size() );
-
+ int nKids = dependencies.size();
+ node.setNChildren(nKids);
+ int kidNo = 0;
for ( ArtifactMetadata a : dependencies )
{
- req.query.init( a );
-
- req.query.setType( "pom" );
-
- kids.add( resolveTree( req, node ) );
+ MetadataTreeNode kidNode = resolveMetadataTree( a
+ , node
+ , localRepository
+ , remoteRepositories
+ );
+ node.addChild( kidNo++, kidNode );
}
- node.addChildren( kids );
}
return node;
- }
- else
- {
+ } else {
return new MetadataTreeNode( pomArtifact, parent, false, \
query.getArtifactScope() ); }
}
- catch ( Exception anyEx )
+ catch( Exception anyEx )
{
throw new MetadataResolutionException( anyEx );
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraph.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/MetadataGraph.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraph.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraph.java \
Thu Nov 29 16:02:37 2007 @@ -5,17 +5,61 @@
import java.util.List;
import java.util.Map;
-/** @author Oleg Gusakov */
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * maven dependency metadata graph
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
public class MetadataGraph
{
- MetadataGraphVertice entry;
- Map<String, MetadataGraphVertice> vertices;
+ public static char DEFAULT_DOMAIN_SEPARATOR = '>';
+ /**
+ * the entry point we started building the graph from
+ */
+ MetadataGraphVertex entry;
+
+ Map<String, MetadataGraphVertex> vertices;
Map<String, List<MetadataGraphEdge>> edges;
+
+ /**
+ * null in dirty graph, actual scope for transformed graph
+ */
+ ArtifactScopeEnum scope;
//------------------------------------------------------------------------
+ /**
+ * construct graph from a "dirty" tree
+ */
+ public MetadataGraph( int nVertices, int nEdges )
+ throws MetadataResolutionException
+ {
+ edges = new HashMap<String, List<MetadataGraphEdge>>( nEdges );
+ vertices = new HashMap<String, MetadataGraphVertex>( nVertices );
+ }
+ //------------------------------------------------------------------------
+ /**
+ * construct a single vertice
+ */
+ public MetadataGraph( MetadataGraphVertex entry )
+ throws MetadataResolutionException
+ {
+ if( entry == null || entry.getMd() == null )
+ throw new MetadataResolutionException("cannot create a MetadataGraph out of \
empty vertice"); + vertices = new HashMap<String, MetadataGraphVertex>( 1 );
+ vertices.put( entry.getMd().toDomainString(), entry );
+
+ this.entry = entry;
+ }
+ //------------------------------------------------------------------------
+ /**
+ * construct graph from a "dirty" tree
+ */
public MetadataGraph( MetadataTreeNode tree )
- throws MetadataResolutionException
+ throws MetadataResolutionException
{
if ( tree == null )
{
@@ -23,17 +67,19 @@
}
int count = countNodes( tree );
- vertices = new HashMap<String, MetadataGraphVertice>( count );
+ vertices = new HashMap<String, MetadataGraphVertex>( count );
edges = new HashMap<String, List<MetadataGraphEdge>>( count + ( count / 2 ) \
);
- processNodes( null, tree, 0 );
+ processNodes( null, tree, 0, 0 );
}
//------------------------------------------------------------------------
- private void processNodes( MetadataGraphVertice parentVertice,
- MetadataTreeNode node,
- int depth )
- throws MetadataResolutionException
+ private void processNodes( MetadataGraphVertex parentVertice
+ , MetadataTreeNode node
+ , int depth
+ , int pomOrder
+ )
+ throws MetadataResolutionException
{
if ( node == null )
{
@@ -41,15 +87,15 @@
}
String nodeHash = node.graphHash();
- MetadataGraphVertice vertice = vertices.get( nodeHash );
+ MetadataGraphVertex vertice = vertices.get( nodeHash );
if ( vertice == null )
{ // does not exist yet ?
- vertice = new MetadataGraphVertice( node.md );
+ vertice = new MetadataGraphVertex( node.md );
vertices.put( nodeHash, vertice );
}
if ( parentVertice != null )
- { // then create links
+ { // then create edges
String edgeId = edgeHash( parentVertice, vertice );
List<MetadataGraphEdge> edgeList = edges.get( edgeId );
if ( edgeList == null )
@@ -58,9 +104,12 @@
edges.put( edgeId, edgeList );
}
- MetadataGraphEdge e = new MetadataGraphEdge( node.md.version, \
node.md.artifactScope, depth ); + ArtifactMetadata md = node.getMd();
+ MetadataGraphEdge e = new MetadataGraphEdge( md.version, md.resolved, \
md.artifactScope, md.artifactUri, depth, pomOrder ); if ( !edgeList.contains( e ) )
{
+ e.setSource( parentVertice.getMd() );
+ e.setTarget( md );
edgeList.add( e );
}
else
@@ -68,6 +117,10 @@
e = null;
}
}
+ else
+ {
+ entry = vertice;
+ }
MetadataTreeNode[] kids = node.getChildren();
if ( kids == null || kids.length < 1 )
@@ -75,17 +128,18 @@
return;
}
- for ( MetadataTreeNode n : kids )
+ for( int i = 0; i< kids.length; i++ )
{
- processNodes( vertice, n, depth + 1 );
+ MetadataTreeNode n = kids[i];
+ processNodes( vertice, n, depth + 1, i );
}
}
//------------------------------------------------------------------------
- public static String edgeHash( MetadataGraphVertice v1,
- MetadataGraphVertice v2 )
+ public static String edgeHash( MetadataGraphVertex v1,
+ MetadataGraphVertex v2 )
{
- return v1.md.toDomainString() + ">" + v2.md.toDomainString();
+ return v1.md.toDomainString() + DEFAULT_DOMAIN_SEPARATOR + \
v2.md.toDomainString(); // return h1.compareTo(h2) > 0
// ? h1.hashCode()+""+h2.hashCode()
// : h2.hashCode()+""+h1.hashCode()
@@ -93,6 +147,38 @@
}
//------------------------------------------------------------------------
+ public MetadataGraph addVertice( MetadataGraphVertex v )
+ {
+ if( v == null || v.getMd() == null )
+ return this;
+
+ if( vertices == null )
+ vertices = new HashMap<String, MetadataGraphVertex>();
+ vertices.put(v.getMd().toDomainString(), v );
+
+ return this;
+ }
+ //------------------------------------------------------------------------
+ public MetadataGraph addEdge( String key, MetadataGraphEdge e )
+ {
+ if( e == null )
+ return this;
+
+ if( edges == null )
+ edges = new HashMap<String, List<MetadataGraphEdge>>();
+
+ List<MetadataGraphEdge> eList = edges.get(key);
+ if( eList == null ) {
+ eList = new ArrayList<MetadataGraphEdge>();
+ edges.put( key, eList );
+ }
+
+ if( ! eList.contains(e) )
+ eList.add(e);
+
+ return this;
+ }
+ //------------------------------------------------------------------------
private static int countNodes( MetadataTreeNode tree )
{
if ( tree == null )
@@ -115,22 +201,22 @@
}
//------------------------------------------------------------------------
- public MetadataGraphVertice getEntry()
+ public MetadataGraphVertex getEntry()
{
return entry;
}
- public void setEntry( MetadataGraphVertice entry )
+ public void setEntry( MetadataGraphVertex entry )
{
this.entry = entry;
}
- public Map<String, MetadataGraphVertice> getVertices()
+ public Map<String, MetadataGraphVertex> getVertices()
{
return vertices;
}
- public void setVertices( Map<String, MetadataGraphVertice> vertices )
+ public void setVertices( Map<String, MetadataGraphVertex> vertices )
{
this.vertices = vertices;
}
@@ -144,6 +230,32 @@
{
this.edges = edges;
}
+ public ArtifactScopeEnum getScope()
+ {
+ return scope;
+ }
+ public void setScope(ArtifactScopeEnum scope)
+ {
+ this.scope = scope;
+ }
+ //------------------------------------------------------------------------
+ public boolean isEmpty()
+ {
+ return
+ entry == null
+ || vertices == null
+ || vertices.isEmpty()
+ ;
+ }
+ //------------------------------------------------------------------------
+ public boolean isEmptyEdges()
+ {
+ return
+ isEmpty()
+ || edges == null
+ || edges.isEmpty()
+ ;
+ }
//------------------------------------------------------------------------
//------------------------------------------------------------------------
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraphEdge.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/MetadataGraphEdge.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraphEdge.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataGraphEdge.java \
Thu Nov 29 16:02:37 2007 @@ -2,24 +2,54 @@
import org.apache.maven.artifact.ArtifactScopeEnum;
-/** @author Oleg Gusakov */
+
+/**
+ * metadata graph edge - combination of version, scope and depth define
+ * an edge in the graph
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
public class MetadataGraphEdge
{
- String version;
+ String version;
ArtifactScopeEnum scope;
- int depth = -1;
+ int depth = -1;
+ int pomOrder = -1;
+ boolean resolved = true;
+ String artifactUri;
+
+ /**
+ * capturing where this link came from
+ * and where it is linked to.
+ *
+ * In the first implementation only source used for explanatory function
+ */
+ ArtifactMetadata source;
+ ArtifactMetadata target;
- public MetadataGraphEdge( String version,
- ArtifactScopeEnum scope,
- int depth )
+ //----------------------------------------------------------------------------
+ public MetadataGraphEdge( String version
+ , boolean resolved
+ , ArtifactScopeEnum scope
+ , String artifactUri
+ , int depth
+ , int pomOrder
+ )
{
super();
this.version = version;
this.scope = scope;
+ this.artifactUri = artifactUri;
this.depth = depth;
+ this.resolved = resolved;
+ this.pomOrder = pomOrder;
}
-
//----------------------------------------------------------------------------
+ /**
+ * helper for equals
+ */
private static boolean objectsEqual( Object o1,
Object o2 )
{
@@ -37,6 +67,9 @@
}
//----------------------------------------------------------------------------
+ /**
+ * used to eliminate exact duplicates in the edge list
+ */
@Override
public boolean equals( Object o )
{
@@ -45,8 +78,10 @@
MetadataGraphEdge e = (MetadataGraphEdge) o;
return
objectsEqual( version, e.version )
- && objectsEqual( scope, e.scope )
- && depth == e.depth
+ && ArtifactScopeEnum.checkScope(scope).getScope().equals(
+ ArtifactScopeEnum.checkScope(e.scope).getScope()
+ )
+ && depth == e.depth
;
}
return false;
@@ -82,6 +117,57 @@
{
this.depth = depth;
}
+
+ public boolean isResolved()
+ {
+ return resolved;
+ }
+
+ public void setResolved(boolean resolved)
+ {
+ this.resolved = resolved;
+ }
+
+ public int getPomOrder()
+ {
+ return pomOrder;
+ }
+
+ public void setPomOrder(int pomOrder)
+ {
+ this.pomOrder = pomOrder;
+ }
+
+ public String getArtifactUri()
+ {
+ return artifactUri;
+ }
+ public void setArtifactUri(String artifactUri)
+ {
+ this.artifactUri = artifactUri;
+ }
+
+ public ArtifactMetadata getSource()
+ {
+ return source;
+ }
+ public void setSource(ArtifactMetadata source)
+ {
+ this.source = source;
+ }
+ public ArtifactMetadata getTarget()
+ {
+ return target;
+ }
+ public void setTarget(ArtifactMetadata target)
+ {
+ this.target = target;
+ }
+ @Override
+ public String toString()
+ {
+ return "[version="+version+", scope="+(scope == null ? "null" : \
scope.getScope())+", depth="+depth+"]"; + }
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolution.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/MetadataResolution.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolution.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolution.java \
Thu Nov 29 16:02:37 2007 @@ -1,27 +1,54 @@
package org.apache.maven.artifact.resolver.metadata;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
+import java.util.Collection;
-import java.util.Set;
+import org.apache.maven.artifact.repository.ArtifactRepository;
-/** @author Jason van Zyl */
+/**
+ *
+ * @author Jason van Zyl
+ *
+ */
public class MetadataResolution
{
- private Set<ArtifactMetadata> dependencies;
+ /** resolved MD */
+ private ArtifactMetadata artifactMetadata;
- private Set<ArtifactRepository> metadataRepositories;
-
- public MetadataResolution( Set<ArtifactMetadata> dependencies,
- Set<ArtifactRepository> metadataRepositories )
+ /** repositories, added by this POM */
+ private Collection<ArtifactRepository> metadataRepositories;
+ //-------------------------------------------------------------------
+ public MetadataResolution( ArtifactMetadata artifactMetadata )
{
- this.dependencies = dependencies;
-
- this.metadataRepositories = metadataRepositories;
+ this.artifactMetadata = artifactMetadata;
}
-
- public Set<ArtifactMetadata> getDependencies()
+ //-------------------------------------------------------------------
+ public MetadataResolution( ArtifactMetadata artifactMetadata,
+ Collection<ArtifactRepository> metadataRepositories )
{
- return dependencies;
+ this( artifactMetadata );
+ this.metadataRepositories = metadataRepositories;
}
+ //-------------------------------------------------------------------
+ public Collection<ArtifactRepository> getMetadataRepositories()
+ {
+ return metadataRepositories;
+ }
+
+ public void setMetadataRepositories(
+ Collection<ArtifactRepository> metadataRepositories)
+ {
+ this.metadataRepositories = metadataRepositories;
+ }
+ //-------------------------------------------------------------------
+ public ArtifactMetadata getArtifactMetadata()
+ {
+ return artifactMetadata;
+ }
+
+ public void setArtifactMetadata(ArtifactMetadata artifactMetadata)
+ {
+ this.artifactMetadata = artifactMetadata;
+ }
+ //-------------------------------------------------------------------
+ //-------------------------------------------------------------------
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionRequestTypeEnum.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/MetadataResolutionRequestTypeEnum.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionRequestTypeEnum.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionRequestTypeEnum.java \
Thu Nov 29 16:02:37 2007 @@ -2,7 +2,7 @@
public enum MetadataResolutionRequestTypeEnum
{
- tree( 1 ), graph( 2 ), noConflictGraph( 3 ), subGraph( 4 );
+ tree( 1 ), graph( 2 ), classpathCompile( 3 ), classpathTest( 4 ), \
classpathRuntime( 5 );
private int id;
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionResult.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/MetadataResolutionResult.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionResult.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolutionResult.java \
Thu Nov 29 16:02:37 2007 @@ -1,45 +1,93 @@
package org.apache.maven.artifact.resolver.metadata;
-import org.apache.maven.artifact.Artifact;
-
-/** @author Oleg Gusakov */
+import org.apache.maven.artifact.ArtifactScopeEnum;
+import org.apache.maven.artifact.resolver.conflict.GraphConflictResolutionException;
+import org.apache.maven.artifact.resolver.conflict.GraphConflictResolver;
+import org.apache.maven.artifact.transform.ClasspathContainer;
+import org.apache.maven.artifact.transform.ClasspathTransformation;
+import org.apache.maven.artifact.transform.MetadataGraphTransformationException;
+
+/**
+ * This object is tinted with ClasspathTransformation and GraphConflictResolver.
+ * Get rid of them after debugging
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ */
public class MetadataResolutionResult
{
- MetadataTreeNode root;
- MetadataGraph graph;
+ MetadataTreeNode treeRoot;
+ ClasspathTransformation classpathTransformation;
+ GraphConflictResolver conflictResolver;
//----------------------------------------------------------------------------
public MetadataResolutionResult()
{
}
-
//----------------------------------------------------------------------------
public MetadataResolutionResult( MetadataTreeNode root )
{
- this.root = root;
+ this.treeRoot = root;
+ }
+ //----------------------------------------------------------------------------
+ public MetadataResolutionResult( GraphConflictResolver conflictResolver, \
ClasspathTransformation cpt ) + {
+ this.classpathTransformation = cpt;
+ this.conflictResolver = conflictResolver;
}
-
//----------------------------------------------------------------------------
public MetadataTreeNode getTree()
{
- return root;
+ return treeRoot;
}
public void setTree( MetadataTreeNode root )
{
- this.root = root;
+ this.treeRoot = root;
}
+ //----------------------------------------------------------------------------
public MetadataGraph getGraph()
+ throws MetadataResolutionException
{
- return graph;
+ return treeRoot == null ? null : new MetadataGraph(treeRoot);
}
-
- public void setGraph( MetadataGraph graph )
+ //----------------------------------------------------------------------------
+ public MetadataGraph getGraph( ArtifactScopeEnum scope )
+ throws MetadataResolutionException, GraphConflictResolutionException
{
- this.graph = graph;
+ if( treeRoot == null )
+ return null;
+
+ if( conflictResolver == null )
+ return null;
+
+ return conflictResolver.resolveConflicts( getGraph(), scope );
+ }
+ //----------------------------------------------------------------------------
+ public ClasspathContainer getClasspath( ArtifactScopeEnum scope )
+ throws MetadataGraphTransformationException, MetadataResolutionException
+ {
+ if( classpathTransformation == null )
+ return null;
+
+ MetadataGraph dirtyGraph = getGraph();
+ if( dirtyGraph == null )
+ return null;
+
+ ClasspathContainer cpc = classpathTransformation.transform( dirtyGraph, \
scope, false ); +
+ return cpc;
+ }
+
+ public MetadataTreeNode getClasspathTree( ArtifactScopeEnum scope )
+ throws MetadataGraphTransformationException, MetadataResolutionException
+ {
+ ClasspathContainer cpc = getClasspath(scope);
+ if( cpc == null )
+ return null;
+
+ return cpc.getClasspathAsTree();
}
-
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolver.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/MetadataResolver.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolver.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataResolver.java \
Thu Nov 29 16:02:37 2007 @@ -1,10 +1,23 @@
package org.apache.maven.artifact.resolver.metadata;
-/** @author Oleg Gusakov */
+
+/**
+ * entry point into metadata resolution component
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
public interface MetadataResolver
{
String ROLE = MetadataResolver.class.getName();
+ /**
+ * collect all dependency metadata into one "dirty" graph
+ *
+ * @param request
+ * @return
+ * @throws MetadataResolutionException
+ */
MetadataResolutionResult resolveMetadata( MetadataResolutionRequest request )
throws MetadataResolutionException;
}
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataTreeNode.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/ \
artifact/resolver/metadata/MetadataTreeNode.java?rev=599644&r1=599643&r2=599644&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataTreeNode.java \
(original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/metadata/MetadataTreeNode.java \
Thu Nov 29 16:02:37 2007 @@ -8,18 +8,27 @@
public class MetadataTreeNode
{
ArtifactMetadata md; // this node
-
MetadataTreeNode parent; // papa of cause
+ /** default # of children. Used for tree creation optimization only */
+ int nChildren = 8;
+
MetadataTreeNode[] children; // of cause
- boolean resolved = false; // if current node was resolved
+ public int getNChildren()
+ {
+ return nChildren;
+ }
+
+ public void setNChildren(int children)
+ {
+ nChildren = children;
+ }
- //------------------------------------------------------------------------
+ //------------------------------------------------------------------------
public MetadataTreeNode()
{
}
-
//------------------------------------------------------------------------
public MetadataTreeNode( ArtifactMetadata md,
MetadataTreeNode parent,
@@ -29,13 +38,12 @@
if ( md != null )
{
md.setArtifactScope( scope );
+ md.setResolved(resolved);
}
this.md = md;
this.parent = parent;
- this.resolved = resolved;
}
-
//------------------------------------------------------------------------
public MetadataTreeNode( Artifact af,
MetadataTreeNode parent,
@@ -44,21 +52,18 @@
{
this( new ArtifactMetadata( af ), parent, resolved, scope );
}
-
//------------------------------------------------------------------------
- public void addChildren( List<MetadataTreeNode> kidList )
+ public void addChild( int index, MetadataTreeNode kid )
{
- if ( kidList == null || kidList.size() < 1 )
+ if ( kid == null )
{
return;
}
- children = new MetadataTreeNode[kidList.size()];
- int i = 0;
- for ( MetadataTreeNode n : kidList )
- {
- children[i++] = n;
- }
+ if( children == null )
+ children = new MetadataTreeNode[nChildren];
+
+ children[index % nChildren] = kid;
}
//------------------------------------------------------------------
@@ -67,7 +72,6 @@
{
return md == null ? "no metadata" : md.toString();
}
-
//------------------------------------------------------------------
public String graphHash()
throws MetadataResolutionException
@@ -107,16 +111,6 @@
public void setParent( MetadataTreeNode parent )
{
this.parent = parent;
- }
-
- public boolean isResolved()
- {
- return resolved;
- }
-
- public void setResolved( boolean resolved )
- {
- this.resolved = resolved;
}
public MetadataTreeNode[] getChildren()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic