svn commit: r679277 - in /maven/sandbox/trunk/mercury/src: main/java/org/apache/maven/mercury/ main/java/org/apache/maven/mercury/metadata/ main/java/org/apache/maven/mercury/metadata/conflict/ main/java/org/apache/maven/mercury/metadata/sat/ main/java...

View: New views
1 Messages — Rating Filter:   Alert me  

svn commit: r679277 - in /maven/sandbox/trunk/mercury/src: main/java/org/apache/maven/mercury/ main/java/org/apache/maven/mercury/metadata/ main/java/org/apache/maven/mercury/metadata/conflict/ main/java/org/apache/maven/mercury/metadata/sat/ main/java...

by ogusakov :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Author: ogusakov
Date: Wed Jul 23 22:39:20 2008
New Revision: 679277

URL: http://svn.apache.org/viewvc?rev=679277&view=rev
Log:
revamped the project to introduced all the new concepts: active Repository, Transport and all other good things.

Added:
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactMetadata.java
      - copied, changed from r678107, maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java   (contents, props changed)
      - copied, changed from r678107, maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java
      - copied, changed from r678107, maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Server.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Transport.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Verifier.java
Removed:
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/DefaultMetadataResolver.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/HttpMetadataSource.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataGraph.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataGraphEdge.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataGraphVertex.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolution.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolutionException.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolutionRequest.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolutionRequestTypeEnum.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolutionResult.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolver.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataSource.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/conflict/
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/ClasspathTransformation.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/DefaultClasspathTransformation.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/MetadataGraphTransformationException.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/layout/
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/
Modified:
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/Artifact.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/DefaultArtifact.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ClassicVersionComparator.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataRetrievalException.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTree.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatContext.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatHelper.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatSolver.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatVar.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/ClasspathContainer.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/AbstractRepository.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultLocalRepository.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultRemoteRepository.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/LocalRepository.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/RemoteRepository.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/AbstractSimpleTreeTest.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataTreeTest.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MockMetadataSource.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/MetadataBuilder.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/XmlMetadataBuilder.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataReaderTest.java

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/Artifact.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/Artifact.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/Artifact.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/Artifact.java Wed Jul 23 22:39:20 2008
@@ -30,7 +30,7 @@
  * snapshot, etc) - construct subclasses and use accordingly?
  */
 public interface Artifact
-    extends Comparable
+extends Comparable
 {
     String LATEST_VERSION = "LATEST";
 

Copied: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactMetadata.java (from r678107, maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java)
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactMetadata.java?p2=maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactMetadata.java&p1=maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java&r1=678107&r2=679277&rev=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactMetadata.java Wed Jul 23 22:39:20 2008
@@ -1,35 +1,29 @@
-package org.apache.maven.mercury.metadata;
+package org.apache.maven.mercury;
 
 import java.util.Collection;
+import java.util.List;
 
-import org.apache.maven.mercury.Artifact;
-import org.apache.maven.mercury.ArtifactScopeEnum;
 
 /**
- * Artifact Metadata that is resolved independent of Artifact itself.
+ * Artifact Metadata that is resolved independent of Artifact itself. It's
+ * built on top of ArtifactBasicMetadata
  *
  * @author Oleg Gusakov
  * @version $Id$
  */
 public class ArtifactMetadata
+extends ArtifactBasicMetadata
 {
-    /**
-     * standard glorified artifact coordinates
-     */
-    protected String groupId;
-
-    protected String artifactId;
-
-    protected String version;
-
-    protected String type = "jar";
-
+    // in addition to basic coordinates
+  
     protected ArtifactScopeEnum artifactScope;
 
-    protected String classifier;
-    
+    protected String scope;
+
     protected boolean optional;
 
+    private boolean release;
+
     /**
      * explanation: why this MD was chosen over it's siblings
      * in the resulting structure (classpath for now)
@@ -37,7 +31,7 @@
     protected String why;
 
     /** dependencies of the artifact behind this metadata */
-    protected Collection<ArtifactMetadata> dependencies;
+    protected List<ArtifactMetadata> dependencies;
 
     /** metadata URI */
     protected String uri;
@@ -145,98 +139,6 @@
     {
     }
     
-    //---------------------------------------------------------------------
-    public boolean sameGAV( ArtifactMetadata md )
-    {
-      if( md == null )
-        return false;
-      
-      return
-          sameGA( md )
-          && version != null
-          && version.equals( md.getVersion() )
-      ;
-    }
-    //---------------------------------------------------------------------
-    public boolean sameGA( ArtifactMetadata md )
-    {
-      if( md == null )
-        return false;
-      
-      return
-          groupId != null
-          && artifactId != null
-          && groupId.equals( md.getGroupId() )
-          && artifactId.equals( md.getArtifactId() )
-      ;
-    }
-
-    public String getGA()
-    {
-      return toDomainString();
-    }
-
-    public String getGAV()
-    {
-      return toString();
-    }
-    
-    @Override
-    public String toString()
-    {
-        return groupId + ":" + artifactId + ":" + version;
-    }
-
-    public String toDomainString()
-    {
-        return groupId + ":" + artifactId;
-    }
-
-    public String getGroupId()
-    {
-        return groupId;
-    }
-
-    public void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    public String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    public void setArtifactId( String name )
-    {
-        this.artifactId = name;
-    }
-
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public void setVersion( String version )
-    {
-        this.version = version;
-    }
-
-    public String getType()
-    {
-        return type;
-    }
-
-    public String getCheckedType()
-    {
-        return type == null ? "jar" : type;
-    }
-
-    public void setType( String type )
-    {
-        this.type = type;
-    }
-
     public ArtifactScopeEnum getArtifactScope()
     {
         return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : artifactScope;
@@ -252,16 +154,6 @@
         this.artifactScope = scope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : ArtifactScopeEnum.valueOf( scope );
     }
 
-    public String getClassifier()
-    {
-        return classifier;
-    }
-
-    public void setClassifier( String classifier )
-    {
-        this.classifier = classifier;
-    }
-
     public boolean isResolved()
     {
         return resolved;
@@ -302,12 +194,12 @@
         this.artifactExists = artifactExists;
     }
 
-    public Collection<ArtifactMetadata> getDependencies()
+    public List<ArtifactMetadata> getDependencies()
     {
         return dependencies;
     }
 
-    public void setDependencies( Collection<ArtifactMetadata> dependencies )
+    public void setDependencies( List<ArtifactMetadata> dependencies )
     {
         this.dependencies = dependencies;
     }
@@ -368,6 +260,16 @@
     {
       return classifier == null;
     }
+
+    public void setRelease( boolean release )
+    {
+        this.release = release;
+    }
+
+    public boolean isRelease()
+    {
+        return release;
+    }
     
     
 }

Copied: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java (from r678107, maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java)
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java?p2=maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java&p1=maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java&r1=678107&r2=679277&rev=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java Wed Jul 23 22:39:20 2008
@@ -1,5 +1,6 @@
 package org.apache.maven.mercury;
 
+
 /**
  * Type safe reincarnation of Artifact scope. Also supplies the <code>DEFAULT_SCOPE<code> as well
  * as convenience method to deal with scope relationships.

Propchange: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/ArtifactScopeEnum.java
------------------------------------------------------------------------------
    svn:mergeinfo =

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/DefaultArtifact.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/DefaultArtifact.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/DefaultArtifact.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/DefaultArtifact.java Wed Jul 23 22:39:20 2008
@@ -28,29 +28,13 @@
  * @version $Id$
  */
 public class DefaultArtifact
-    implements Artifact
+extends ArtifactMetadata
+implements Artifact
 {
-    private String groupId;
-
-    private String artifactId;
-
-    private String type;
-
     private File file;
 
-    private String version;
-
-    // This is Maven specific. jvz/
     private String classifier;
 
-    private String scope;
-
-    private boolean optional;
-
-    private boolean release;
-
-    private boolean resolved;
-
     // Why is this here? What repository is determined at runtime and is therefore a
     // runtime charactistic. This needs to go. jvz.
     private Repository repository;
@@ -156,46 +140,6 @@
         return ( value == null ) || ( value.trim().length() < 1 );
     }
 
-    public String getClassifier()
-    {
-        return classifier;
-    }
-
-    public boolean hasClassifier()
-    {
-        return StringUtils.isNotEmpty( classifier );
-    }
-
-    public String getScope()
-    {
-        return scope;
-    }
-
-    public String getGroupId()
-    {
-        return groupId;
-    }
-
-    public String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public void setVersion( String version )
-    {
-        this.version = version;
-    }
-
-    public String getType()
-    {
-        return type;
-    }
-
     public void setFile( File file )
     {
         this.file = file;
@@ -227,14 +171,14 @@
 
     public String getDependencyConflictId()
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append( getGroupId() );
         sb.append( ":" );
         appendArtifactTypeClassifierString( sb );
         return sb.toString();
     }
 
-    private void appendArtifactTypeClassifierString( StringBuffer sb )
+    private void appendArtifactTypeClassifierString( StringBuilder sb )
     {
         sb.append( getArtifactId() );
         sb.append( ":" );
@@ -249,10 +193,10 @@
     // ----------------------------------------------------------------------
     // Object overrides
     // ----------------------------------------------------------------------
-
+    @Override
     public String toString()
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         if ( getGroupId() != null )
         {
             sb.append( getGroupId() );
@@ -274,6 +218,7 @@
         return sb.toString();
     }
 
+    @Override
     public int hashCode()
     {
         int result = 17;
@@ -288,6 +233,7 @@
         return result;
     }
 
+    @Override
     public boolean equals( Object o )
     {
         if ( o == this )
@@ -380,54 +326,9 @@
         this.downloadUrl = downloadUrl;
     }
 
-    public void setScope( String scope )
-    {
-        this.scope = scope;
-    }
-
-    public void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    public void setArtifactId( String artifactId )
-    {
-        this.artifactId = artifactId;
-    }
-
-    public void setResolved( boolean resolved )
-    {
-        this.resolved = resolved;
-    }
-
-    public boolean isResolved()
-    {
-        return resolved;
-    }
-
     public void setResolvedVersion( String version )
     {
         this.version = version;
         // retain baseVersion
     }
-
-    public void setRelease( boolean release )
-    {
-        this.release = release;
-    }
-
-    public boolean isRelease()
-    {
-        return release;
-    }
-
-    public boolean isOptional()
-    {
-        return optional;
-    }
-
-    public void setOptional( boolean optional )
-    {
-        this.optional = optional;
-    }
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ClassicVersionComparator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ClassicVersionComparator.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ClassicVersionComparator.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ClassicVersionComparator.java Wed Jul 23 22:39:20 2008
@@ -2,6 +2,7 @@
 
 import java.util.Comparator;
 
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.metadata.version.DefaultArtifactVersion;
 
 /**

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataRetrievalException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataRetrievalException.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataRetrievalException.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataRetrievalException.java Wed Jul 23 22:39:20 2008
@@ -1,5 +1,7 @@
 package org.apache.maven.mercury.metadata;
 
+import org.apache.maven.mercury.ArtifactMetadata;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTree.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTree.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTree.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTree.java Wed Jul 23 22:39:20 2008
@@ -4,13 +4,19 @@
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import org.apache.maven.mercury.ArtifactBasicMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.ArtifactScopeEnum;
 import org.apache.maven.mercury.metadata.sat.DefaultSatSolver;
 import org.apache.maven.mercury.metadata.sat.SatException;
 import org.apache.maven.mercury.repository.LocalRepository;
 import org.apache.maven.mercury.repository.RemoteRepository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.VirtualRepositoryReader;
 
 /**
  * This is the new entry point into Artifact resolution process.
@@ -21,27 +27,26 @@
  */
 public class MetadataTree
 {
-  private MetadataSource _mdSource;
+//  private MetadataSource _mdSource;
+  
   private Set<MetadataTreeArtifactFilter> _filters;
   private List<Comparator<MetadataTreeNode>> _comparators;
-  private LocalRepository _localRepository;
-  private List<RemoteRepository> _remoteRepositories;
+  
+  private VirtualRepositoryReader _reader;
   
   MetadataTreeNode _root;
   
   public MetadataTree(
-        MetadataSource mdSource
-      , Set<MetadataTreeArtifactFilter> filters
+        Set<MetadataTreeArtifactFilter> filters
       , List<Comparator<MetadataTreeNode>> comparators
       , LocalRepository localRepository
       , List<RemoteRepository> remoteRepositories
-                        )
+                     )
+  throws RepositoryException
   {
-    this._mdSource = mdSource;
     this._filters = filters;
     this._comparators = comparators;
-    this._localRepository = localRepository;
-    this._remoteRepositories = remoteRepositories;
+    this._reader = new VirtualRepositoryReader( localRepository, remoteRepositories );
   }
   //-----------------------------------------------------
   public MetadataTreeNode buildTree( ArtifactMetadata startMD )
@@ -50,40 +55,38 @@
     if( startMD == null )
       throw new MetadataTreeException( "null start point" );
     
-    if( _mdSource == null )
-      throw new MetadataTreeException( "null metadata source" );
-    
-    if( _localRepository == null )
-      throw new MetadataTreeException( "null local repo" );
+    _reader.init();
     
     _root = createNode( startMD, null, startMD );
     return _root;
   }
   //-----------------------------------------------------
-  private MetadataTreeNode createNode( ArtifactMetadata nodeMD, MetadataTreeNode parent, ArtifactMetadata nodeQuery )
+  private MetadataTreeNode createNode( ArtifactBasicMetadata nodeMD, MetadataTreeNode parent, ArtifactMetadata nodeQuery )
   throws MetadataTreeException
   {
     checkForCircularDependency( nodeMD, parent );
 
-    MetadataResolution mr;
+    ArtifactMetadata mr;
     
     try
     {
-      mr = _mdSource.retrieve( nodeMD, _localRepository, _remoteRepositories );
+      mr = _reader.readMetadata( nodeMD );
 
-      if( mr == null || mr.getArtifactMetadata() == null )
+      if( mr == null )
         throw new MetadataTreeException( "no result found for " + nodeMD );
       
-      MetadataTreeNode node = new MetadataTreeNode( mr.getArtifactMetadata(), parent, nodeQuery );
+      MetadataTreeNode node = new MetadataTreeNode( mr, parent, nodeQuery );
   
-      Collection<ArtifactMetadata> dependencies = mr.getArtifactMetadata().getDependencies();
+      List<ArtifactMetadata> dependencies = mr.getDependencies();
       
       if( dependencies == null || dependencies.size() < 1 )
         return node;
       
+      Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> expandedDeps = _reader.findMetadata( dependencies );
+      
       for( ArtifactMetadata md : dependencies )
       {
-        Collection<ArtifactMetadata> versions = _mdSource.expand( md, _localRepository, _remoteRepositories );
+        List<ArtifactBasicMetadata> versions = expandedDeps.get(  md );
         if( versions == null || versions.size() < 1 )
         {
           if( md.isOptional() )
@@ -92,7 +95,7 @@
         }
         
         boolean noGoodVersions = true;
-        for( ArtifactMetadata ver : versions )
+        for( ArtifactBasicMetadata ver : versions )
         {
           if( veto( ver, _filters) )
             continue;
@@ -115,13 +118,13 @@
     
       return node;
     }
-    catch (MetadataRetrievalException e)
+    catch (RepositoryException e)
     {
       throw new MetadataTreeException( e );
     }
   }
   //-----------------------------------------------------
-  private void checkForCircularDependency( ArtifactMetadata md, MetadataTreeNode parent )
+  private void checkForCircularDependency( ArtifactBasicMetadata md, MetadataTreeNode parent )
   throws MetadataTreeCircularDependencyException
   {
     MetadataTreeNode p = parent;
@@ -151,7 +154,7 @@
     }
   }
   //-----------------------------------------------------
-  private boolean veto(ArtifactMetadata md, Set<MetadataTreeArtifactFilter> filters )
+  private boolean veto(ArtifactBasicMetadata md, Set<MetadataTreeArtifactFilter> filters )
   {
     if( filters != null && filters.size() > 1)
       for( MetadataTreeArtifactFilter filter : filters )

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java Wed Jul 23 22:39:20 2008
@@ -1,5 +1,7 @@
 package org.apache.maven.mercury.metadata;
 
+import org.apache.maven.mercury.ArtifactBasicMetadata;
+
 /**
  * This is a member of a chain of filters that can stop an ArtifactMetadata
  * from reaching the resolution tree
@@ -8,6 +10,6 @@
  */
 public interface MetadataTreeArtifactFilter
 {
-  public boolean veto( ArtifactMetadata md )
+  public boolean veto( ArtifactBasicMetadata md )
   ;
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java Wed Jul 23 22:39:20 2008
@@ -4,6 +4,7 @@
 import java.util.List;
 
 import org.apache.maven.mercury.Artifact;
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.ArtifactScopeEnum;
 /**
  * metadata [dirty] Tree

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java Wed Jul 23 22:39:20 2008
@@ -9,8 +9,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.ArtifactScopeEnum;
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
 import org.apache.maven.mercury.metadata.MetadataTreeNode;
 import org.apache.maven.mercury.metadata.MetadataTreeNodeGAComparator;
 import org.apache.maven.mercury.metadata.MetadataTreeNodeGAVComparator;

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatContext.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatContext.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatContext.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatContext.java Wed Jul 23 22:39:20 2008
@@ -3,7 +3,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
 
  /**
   * This class hold all variables fed to the SAT solver. Because of the

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatHelper.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatHelper.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatHelper.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatHelper.java Wed Jul 23 22:39:20 2008
@@ -4,7 +4,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.sat4j.core.ReadOnlyVec;
 import org.sat4j.core.ReadOnlyVecInt;
 import org.sat4j.core.Vec;

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatSolver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatSolver.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatSolver.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatSolver.java Wed Jul 23 22:39:20 2008
@@ -3,7 +3,7 @@
 import java.util.Comparator;
 import java.util.List;
 
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.metadata.MetadataTreeNode;
 
 /**

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatVar.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatVar.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatVar.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/sat/SatVar.java Wed Jul 23 22:39:20 2008
@@ -1,6 +1,6 @@
 package org.apache.maven.mercury.metadata.sat;
 
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
 
 /**
  * @author <a href="oleg@...">Oleg Gusakov</a>

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/ClasspathContainer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/ClasspathContainer.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/ClasspathContainer.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/transform/ClasspathContainer.java Wed Jul 23 22:39:20 2008
@@ -4,9 +4,8 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.ArtifactScopeEnum;
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
-import org.apache.maven.mercury.metadata.MetadataResolutionException;
 import org.apache.maven.mercury.metadata.MetadataTreeNode;
 
 /*
@@ -61,7 +60,6 @@
 
     //-------------------------------------------------------------------------------------------
     public MetadataTreeNode getClasspathAsTree()
-        throws MetadataResolutionException
     {
         if ( classpath == null || classpath.size() < 1 )
             return null;

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/AbstractRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/AbstractRepository.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/AbstractRepository.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/AbstractRepository.java Wed Jul 23 22:39:20 2008
@@ -1,8 +1,5 @@
 package org.apache.maven.mercury.repository;
 
-import org.apache.maven.mercury.Artifact;
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
-import org.apache.maven.mercury.repository.layout.RepositoryLayout;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
@@ -19,31 +16,54 @@
  * the License.
  */
 
+/**
+ * parent of all repositories
+ */
 public abstract class AbstractRepository
 implements Repository
 {
-    private String id;
-        
-    private RepositoryLayout layout;
-
-    public AbstractRepository( String id, RepositoryLayout layout )
-    {
-        this.id = id;
-        this.layout = layout;
-    }
-
-    public String getId()
-    {
-        return id;
-    }
-
-    public RepositoryLayout getLayout()
-    {
-        return layout;
-    }
-
-    public String pathOf( ArtifactMetadata md )
-    {
-        return layout.pathOf( md );
-    }
+  public static final String DEFAULT_READ_PROTOCOL  = "http";
+  public static final String DEFAULT_WRITE_PROTOCOL = "http";
+
+  public static final String DEFAULT_LOCAL_READ_PROTOCOL  = "file";
+  public static final String DEFAULT_LOCAL_WRITE_PROTOCOL = "file";
+
+  private String             id;
+
+  private String             defaultReadProtocol    = DEFAULT_READ_PROTOCOL;
+
+  private String             defaultWriteProtocol   = DEFAULT_WRITE_PROTOCOL;
+
+  public AbstractRepository( String id )
+  {
+    this.id = id;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public String getDefaultReadProtocol()
+  {
+    return defaultReadProtocol;
+  }
+
+  public void setDefaultReadProtocol(
+      String defaultReadProtocol )
+  {
+    this.defaultReadProtocol = defaultReadProtocol;
+  }
+
+  public String getDefaultWriteProtocol()
+  {
+    return defaultWriteProtocol;
+  }
+
+  public void setDefaultWriteProtocol(
+      String defaultWriteProtocol )
+  {
+    this.defaultWriteProtocol = defaultWriteProtocol;
+  }
+
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultLocalRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultLocalRepository.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultLocalRepository.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultLocalRepository.java Wed Jul 23 22:39:20 2008
@@ -2,17 +2,19 @@
 
 import java.io.File;
 
-import org.apache.maven.mercury.repository.layout.RepositoryLayout;
+import org.apache.maven.mercury.repository.api.NonExistentProtocolException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
 
 public class DefaultLocalRepository
-    extends AbstractRepository
-    implements LocalRepository
+extends AbstractRepository
+implements LocalRepository
 {
     private File directory;
     
-    public DefaultLocalRepository( String id, RepositoryLayout layout, File directory )
+    public DefaultLocalRepository( String id, File directory )
     {
-        super( id, layout );
+        super( id );
         this.directory = directory;
     }
 
@@ -20,4 +22,29 @@
     {
         return directory;
     }
+
+    public RepositoryReader getReader()
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+
+    public RepositoryReader getReader( String protocol )
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+
+    public RepositoryWriter getWriter()
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+
+    public RepositoryWriter getWriter( String protocol )
+        throws NonExistentProtocolException
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultRemoteRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultRemoteRepository.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultRemoteRepository.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/DefaultRemoteRepository.java Wed Jul 23 22:39:20 2008
@@ -1,6 +1,8 @@
 package org.apache.maven.mercury.repository;
 
-import org.apache.maven.mercury.repository.layout.RepositoryLayout;
+import org.apache.maven.mercury.repository.api.NonExistentProtocolException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
 
 public class DefaultRemoteRepository
 extends AbstractRepository
@@ -8,9 +10,9 @@
 {
     private String url;
     
-    public DefaultRemoteRepository( String id, RepositoryLayout layout, String url )
+    public DefaultRemoteRepository( String id, String url )
     {
-        super( id, layout );
+        super( id );
         this.url = url;
     }
 
@@ -18,4 +20,29 @@
     {
         return url;
     }
+
+    public RepositoryReader getReader()
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+
+    public RepositoryReader getReader( String protocol )
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+
+    public RepositoryWriter getWriter()
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+
+    public RepositoryWriter getWriter( String protocol )
+        throws NonExistentProtocolException
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/LocalRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/LocalRepository.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/LocalRepository.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/LocalRepository.java Wed Jul 23 22:39:20 2008
@@ -2,6 +2,7 @@
 
 import java.io.File;
 
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -24,7 +25,7 @@
 /**
  */
 public interface LocalRepository
-    extends Repository
+extends Repository
 {
     File getDirectory();
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/RemoteRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/RemoteRepository.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/RemoteRepository.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/RemoteRepository.java Wed Jul 23 22:39:20 2008
@@ -1,5 +1,6 @@
 package org.apache.maven.mercury.repository;
 
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Copied: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java (from r678107, maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java)
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java?p2=maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java&p1=maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java&r1=678107&r2=679277&rev=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/Repository.java Wed Jul 23 22:39:20 2008
@@ -1,7 +1,8 @@
 package org.apache.maven.mercury.repository;
 
-import org.apache.maven.mercury.Artifact;
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
+import org.apache.maven.mercury.repository.api.NonExistentProtocolException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -26,7 +27,37 @@
  */
 public interface Repository
 {
-    String pathOf( ArtifactMetadata md );
-
     String getId();
+    
+    /**
+     * get default reader, if any
+     *
+     * @return default reader or null, if none exists
+     */
+    RepositoryReader getReader();
+    
+    /**
+     *
+     * @param protocol
+     * @return reader instance for the specified protocol
+     * @throws NonExistentProtocolException if protocol not supported
+     */
+    RepositoryReader getReader( String protocol );
+
+    
+    /**
+     * get default writer, if any
+     *
+     * @return default writer or null, if none exists
+     */
+    RepositoryWriter getWriter();
+    
+    /**
+     *
+     * @param protocol
+     * @return writer instance for the specified protocol
+     * @throws NonExistentProtocolException if protocol not supported
+     */
+    RepositoryWriter getWriter( String protocol )
+    throws NonExistentProtocolException;
 }

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java?rev=679277&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java Wed Jul 23 22:39:20 2008
@@ -0,0 +1,101 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file                                                                                            
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.mercury.transport.api;
+
+import java.net.URI;
+
+import org.apache.maven.mercury.repository.api.RepositoryException;
+
+/**
+ * Binding
+ * <p/>
+ * A Binding represents a remote uri whose contents are to be downloaded
+ * and stored in a locally, or a local resource whose contents are to be
+ * uploaded to the remote uri.
+ */
+public class Binding
+{
+    protected URI     remoteResource;
+    protected URI     localResource;
+    protected boolean lenientChecksum = true;
+    
+    protected RepositoryException error;
+      
+    public Binding()
+    {        
+    }
+    
+    public Binding( URI remoteUrl, URI localFile, boolean lenientChecksum )
+    {
+        this.remoteResource = remoteUrl;
+        this.localResource = localFile;
+        this.lenientChecksum = lenientChecksum;
+    }
+
+    public boolean isLenientChecksum()
+    {
+        return lenientChecksum;
+    }
+
+    public void setLenientChecksum( boolean leniantChecksum )
+    {
+        this.lenientChecksum = leniantChecksum;
+    }
+
+    public URI getRemoteResource()
+    {
+      return remoteResource;
+    }
+
+    public void setRemoteResource(
+        URI remoteResource )
+    {
+      this.remoteResource = remoteResource;
+    }
+
+    public URI getLocalResource()
+    {
+      return localResource;
+    }
+
+    public void setLocalResource(
+        URI localResource )
+    {
+      this.localResource = localResource;
+    }
+
+    public RepositoryException getError()
+    {
+      return error;
+    }
+
+    public void setError(
+        RepositoryException error )
+    {
+      this.error = error;
+    }
+
+    public String toString()
+    {
+        return "[" + remoteResource + "," + localResource + "," + lenientChecksum + "]";
+    }
+    
+    
+}

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Server.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Server.java?rev=679277&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Server.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Server.java Wed Jul 23 22:39:20 2008
@@ -0,0 +1,6 @@
+package org.apache.maven.mercury.transport.api;
+
+public class Server
+{
+
+}

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java?rev=679277&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java Wed Jul 23 22:39:20 2008
@@ -0,0 +1,6 @@
+package org.apache.maven.mercury.transport.api;
+
+public interface StreamObserver
+{
+
+}

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Transport.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Transport.java?rev=679277&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Transport.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Transport.java Wed Jul 23 22:39:20 2008
@@ -0,0 +1,6 @@
+package org.apache.maven.mercury.transport.api;
+
+public interface Transport
+{
+
+}

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java?rev=679277&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java Wed Jul 23 22:39:20 2008
@@ -0,0 +1,54 @@
+package org.apache.maven.mercury.transport.api;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class TransportException
+    extends Exception
+{
+
+  /**
+   *
+   */
+  public TransportException()
+  {
+    // TODO Auto-generated constructor stub
+  }
+
+  /**
+   * @param message
+   */
+  public TransportException(
+      String message )
+  {
+    super( message );
+    // TODO Auto-generated constructor stub
+  }
+
+  /**
+   * @param cause
+   */
+  public TransportException(
+      Throwable cause )
+  {
+    super( cause );
+    // TODO Auto-generated constructor stub
+  }
+
+  /**
+   * @param message
+   * @param cause
+   */
+  public TransportException(
+      String message,
+      Throwable cause )
+  {
+    super( message, cause );
+    // TODO Auto-generated constructor stub
+  }
+
+}

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java?rev=679277&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java Wed Jul 23 22:39:20 2008
@@ -0,0 +1,98 @@
+package org.apache.maven.mercury.transport.api;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Repository access transaction. Consists of a collection of bindings
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class TransportTransaction
+{
+  public static final int DEFAULT_SIZE = 32;
+  
+  protected List<Binding> _bindings;
+  
+  //------------------------------------------------------------------------------------------------
+  private void init()
+  {
+    init( DEFAULT_SIZE );
+  }
+  //------------------------------------------------------------------------------------------------
+  private void init( int n )
+  {
+    if( _bindings == null )
+      _bindings = new ArrayList<Binding>( n );
+  }
+  //------------------------------------------------------------------------------------------------
+  /**
+   *
+   */
+  public TransportTransaction()
+  {
+    init();
+  }
+  //------------------------------------------------------------------------------------------------
+  /**
+   *
+   */
+  public TransportTransaction add( Binding binding )
+  {
+    init();
+    
+    _bindings.add( binding );
+    
+    return this;
+  }
+  //------------------------------------------------------------------------------------------------
+  /**
+   *
+   */
+  public TransportTransaction add( URI remoteResource, URI localResource, boolean lenientChecksum )
+  {
+    init();
+    
+    _bindings.add( new Binding( remoteResource, localResource, lenientChecksum ) );
+    
+    return this;
+  }
+  //------------------------------------------------------------------------------------------------
+  /**
+   *
+   */
+  public TransportTransaction add( URI remoteResource, URI localResource )
+  {
+    init();
+    
+    _bindings.add( new Binding( remoteResource, localResource, true ) );
+    
+    return this;
+  }
+  //------------------------------------------------------------------------------------------------
+  @SuppressWarnings("unchecked")
+  public List<Binding> getBindings()
+  {
+    return _bindings == null ? (List<Binding>)Collections.EMPTY_LIST : _bindings;
+  }
+
+  public void setBindings( List<Binding> bindings )
+  {
+    this._bindings = bindings;
+  }
+  //------------------------------------------------------------------------------------------------
+  public void clearErrors()
+  {
+    if( _bindings == null )
+      return;
+    
+    for( Binding b : _bindings )
+      b.setError( null );
+  }
+  //------------------------------------------------------------------------------------------------
+  //------------------------------------------------------------------------------------------------
+}

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Verifier.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Verifier.java?rev=679277&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Verifier.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Verifier.java Wed Jul 23 22:39:20 2008
@@ -0,0 +1,6 @@
+package org.apache.maven.mercury.transport.api;
+
+public interface Verifier
+{
+
+}

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/AbstractSimpleTreeTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/AbstractSimpleTreeTest.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/AbstractSimpleTreeTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/AbstractSimpleTreeTest.java Wed Jul 23 22:39:20 2008
@@ -1,5 +1,7 @@
 package org.apache.maven.mercury.metadata;
 
+import org.apache.maven.mercury.ArtifactMetadata;
+
 import junit.framework.TestCase;
 
 public abstract class AbstractSimpleTreeTest

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java Wed Jul 23 22:39:20 2008
@@ -8,6 +8,7 @@
 import junit.framework.TestCase;
 
 import org.apache.maven.mercury.Artifact;
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.repository.DefaultLocalRepository;
 import org.apache.maven.mercury.repository.DefaultRemoteRepository;
 import org.apache.maven.mercury.repository.LocalRepository;

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataTreeTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataTreeTest.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataTreeTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataTreeTest.java Wed Jul 23 22:39:20 2008
@@ -7,6 +7,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.impl.LogFactoryImpl;
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.ArtifactScopeEnum;
 import org.apache.maven.mercury.repository.DefaultLocalRepository;
 

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MockMetadataSource.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MockMetadataSource.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MockMetadataSource.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MockMetadataSource.java Wed Jul 23 22:39:20 2008
@@ -8,6 +8,7 @@
 import java.util.Set;
 
 import org.apache.commons.digester.Digester;
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.metadata.version.VersionException;
 import org.apache.maven.mercury.metadata.version.VersionRange;
 import org.apache.maven.mercury.repository.DefaultLocalRepository;

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/MetadataBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/MetadataBuilder.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/MetadataBuilder.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/MetadataBuilder.java Wed Jul 23 22:39:20 2008
@@ -2,7 +2,7 @@
 
 import java.util.List;
 
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
 
 public interface MetadataBuilder
 {

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/XmlMetadataBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/XmlMetadataBuilder.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/XmlMetadataBuilder.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/builder/XmlMetadataBuilder.java Wed Jul 23 22:39:20 2008
@@ -3,7 +3,7 @@
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
 
 public class XmlMetadataBuilder
 implements MetadataBuilder

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java Wed Jul 23 22:39:20 2008
@@ -6,8 +6,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.maven.mercury.ArtifactMetadata;
 import org.apache.maven.mercury.ArtifactScopeEnum;
-import org.apache.maven.mercury.metadata.ArtifactMetadata;
 import org.apache.maven.mercury.metadata.ClassicDepthComparator;
 import org.apache.maven.mercury.metadata.ClassicVersionComparator;
 import org.apache.maven.mercury.metadata.MetadataTreeNode;

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataReaderTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataReaderTest.java?rev=679277&r1=679276&r2=679277&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataReaderTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataReaderTest.java Wed Jul 23 22:39:20 2008
@@ -7,17 +7,16 @@
 import java.util.HashSet;
 import java.util.List;
 
+import junit.framework.TestCase;
+
 import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
 import org.apache.maven.mercury.spi.http.client.Binding;
 import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetrievalRequest;
 import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetriever;
 import org.apache.maven.mercury.spi.http.client.retrieve.RetrievalResponse;
 import org.apache.maven.mercury.spi.http.server.HttpTestServer;
-import org.apache.maven.mercury.spi.http.server.SimpleTestServer;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
-import junit.framework.TestCase;
-
 public class MetadataReaderTest
 extends TestCase
 {
@@ -28,20 +27,11 @@
   HttpTestServer _server;
   DefaultRetrievalRequest _request;
 
-
+  //-------------------------------------------------------------------------
   @Override
   protected void setUp()
   throws Exception
   {
-//    File [] list = _testBase.listFiles();
-//    if( list != null )
-//    {
-//      for( File f : list )
-//        System.out.println( f.getCanonicalPath() );
-//    }
-//    else
-//      System.out.println("no files in "+_testBase.getCanonicalPath() );
-    
     _retriever = new DefaultRetriever();
     _server = new HttpTestServer( _testBase, "/repo" );
     _server.start();
@@ -58,15 +48,14 @@
       _server.stop();
       _server.destroy();
   }
-
+  //-------------------------------------------------------------------------
   public void testReadMd()
   throws FileNotFoundException, IOException, XmlPullParserException
   {
      Metadata mmd = _reader.read( new FileInputStream( new File( _testBase, "a/a/maven-metadata.xml") ) );
      validateMmd( mmd );
   }
-
-
+  //-------------------------------------------------------------------------
   public void testReadRemoteMd()
   throws FileNotFoundException, IOException, XmlPullParserException
   {
@@ -89,7 +78,7 @@
     validateMmd( mmd );
     
   }
-  
+  //-------------------------------------------------------------------------
   private void validateMmd( Metadata mmd )
   {
     assertNotNull( mmd );
@@ -103,5 +92,6 @@
     assertNotNull( versions );
     assertTrue( versions.size() > 3 );
   }
-  
+  //-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
 }


LightInTheBox - Buy quality products at wholesale price