You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/08/02 00:55:48 UTC

svn commit: r681887 [5/10] - in /maven/sandbox/trunk/mercury: mercury-artifact/ mercury-artifact/src/ mercury-artifact/src/main/ mercury-artifact/src/main/java/ mercury-artifact/src/main/java/org/ mercury-artifact/src/main/java/org/apache/ mercury-arti...

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,81 @@
+package org.apache.maven.mercury.repository.api;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
+import org.apache.maven.mercury.artifact.DefaultArtifact;
+
+/**
+ * Repository reader API to be implemented by any repo implementation that wishes 
+ * to serve artifacts to the build process
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public interface RepositoryReader
+extends RepositoryOperator, MetadataReader
+{
+  /**
+   * given basic coordinates query - instantiate all available matches as ArtifactBasicMetadata objects. 
+   * <b>Analogous to reading maven-metadata.xml</b> file from GA folder i.e. this transforms
+   * GA[Vrange] -> [GAV1, GAV2, ... GAVn]
+   * 
+   * @param query list of MD coordinate queries to find 
+   * @return map of results - lists of available matches.  
+   * <b>If no results are found, reader should return null<b> If there were exceptions, map element will indicate 
+   * it with hasExceptions() 
+   * @throws RepositoryException
+   */
+  public Map<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>> readVersions( List<? extends ArtifactBasicMetadata> query )
+  throws RepositoryException, IllegalArgumentException;
+  
+  /**
+   * given basic coordinates query read full ArtifactMetadata objects -
+   * with dependencies as queries i.e. each dependency at this stage is an ArtifactBasicMetadata
+   * <b>Analogous to reading pom.xml</b> file for given GAV
+   * 
+   * @param query list of MD coordinate queries to read. They are found by previous call to findMetadata 
+   * @return result as list of available MD objects with dependencies filled in. Order is the same 
+   * as in query list. null means not found or worse
+   * @throws RepositoryException
+   */
+  public Map< ArtifactBasicMetadata, ArtifactMetadata > readDependencies( List<? extends ArtifactBasicMetadata> query )
+  throws RepositoryException, IllegalArgumentException;
+
+  /**
+   * Given basic coordinates query read Artifact objects
+   * Analogous to downloading artifact binary  file into local repo for given GAV
+   * 
+   * @param query list of MD coordinate queries to read. 
+   * @return array of results - lists of available matches. Order is the same as in query list. null means not found or worse
+   * @throws RepositoryException
+   */
+  public RepositoryOperationResult<DefaultArtifact> readArtifacts( List<? extends ArtifactBasicMetadata> query )
+  throws RepositoryException, IllegalArgumentException;
+
+  /**
+   * Need if for explanation function - where and how(protocol) this artifact is found.
+   */
+  public Repository getRepository();
+
+  /**
+   * Need if to trick circular dependency on maven-project, projectBuilder hides behind this processor
+   */
+  public void setMetadataProcessor( MetadataProcessor mdProcessor );
+  public MetadataProcessor getMetadataProcessor();
+  
+  /**
+   * read content pointed by relative path. It will return content bytes
+   * 
+   * @param path - realative resource path in this repository
+   * @return byte [] of the resource content, pointed by the path
+   * @throws MetadataProcessingException
+   */
+  public byte [] readRawData( String path )
+  throws MetadataProcessingException;
+
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReaderFactory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReaderFactory.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReaderFactory.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReaderFactory.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,7 @@
+package org.apache.maven.mercury.repository.api;
+
+public interface RepositoryReaderFactory
+{
+  public RepositoryReader getReader( Repository repo, MetadataProcessor mdProcessor )
+  throws RepositoryException;
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,29 @@
+package org.apache.maven.mercury.repository.api;
+
+import java.util.Collection;
+
+import org.apache.maven.mercury.artifact.Artifact;
+
+
+/**
+ * Repository writer API to be implemented by any repo implementation that wishes 
+ * to store artifacts for Maven. All operations are asynchronous and can generate
+ * callback events
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public interface RepositoryWriter
+extends RepositoryOperator
+{
+  /**
+   * write (upload) given artifact to the repository
+   * 
+   * @param artifact to upload
+   * @throws RepositoryException
+   */
+  public void writeArtifact( Collection<Artifact> artifact )
+  throws RepositoryException;
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,7 @@
+package org.apache.maven.mercury.repository.api;
+
+public interface RepositoryWriterFactory
+{
+  public RepositoryWriter getWriter( Repository repo, MetadataProcessor mdProcessor )
+  throws RepositoryException;
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,217 @@
+package org.apache.maven.mercury.repository.api;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
+
+/**
+ * this helper class hides the necessity to talk to localRepo and a bunch of remoteRepos.
+ * It also adds discrete convenience methods, hiding batch nature of RepositoryReader
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class VirtualRepositoryReader
+implements MetadataReader
+{
+  //----------------------------------------------------------------------------------------------------------------------------
+  private List<Repository>       _repositories = new ArrayList<Repository>(8);
+  private RepositoryReader[]     _repositoryReaders;
+
+  private LocalRepository       _localRepository;
+  
+  private MetadataProcessor     _processor;
+  
+  private boolean _initialized = false;
+  //----------------------------------------------------------------------------------------------------------------------------
+  public VirtualRepositoryReader(
+                  LocalRepository localRepository
+                , List<RemoteRepository> remoteRepositories
+                , MetadataProcessor processor
+                          )
+  throws RepositoryException
+  {
+    if( _localRepository == null )
+      throw new RepositoryException( "null local repo" );
+    
+    if( processor == null )
+      throw new RepositoryException( "null metadata processor" );
+    this._processor = processor;
+    
+    this._localRepository = localRepository;
+
+    this._repositories.add( localRepository );
+    
+    if( remoteRepositories != null && remoteRepositories.size() > 0 )
+      this._repositories.addAll( remoteRepositories );
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  public VirtualRepositoryReader( List<Repository> repositories, MetadataProcessor processor  )
+  throws RepositoryException
+  {
+    if( processor == null )
+      throw new RepositoryException( "null metadata processor" );
+    this._processor = processor;
+
+    if( repositories != null && repositories.size() > 0 )
+      this._repositories.addAll( repositories );
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  public VirtualRepositoryReader( Repository... repositories )
+  throws RepositoryException
+  {
+    if( repositories != null && repositories.length > 0 )
+      for( Repository r : repositories )
+        this._repositories.add( r );
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  public void addRepository( Repository repo )
+  throws RepositoryException
+  {
+    if( _initialized )
+      throw new RepositoryException("cannot add repositories after VirtualReader has been initialized");
+    
+    _repositories.add( repo );
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  public void init()
+  throws RepositoryException
+  {
+    if( _initialized )
+      return;
+    
+    int repositoryCount = _repositories.size();
+    
+    _repositoryReaders = new RepositoryReader[ repositoryCount ];
+    
+    // move local repo's upfront - they are faster!
+    int i = 0;
+    for( Repository r : _repositories )
+    {
+      if( ! r.isLocal() )
+        continue;
+      
+      _repositoryReaders[ i++ ] = r.getReader(_processor);
+      if( ! r.isReadOnly() )
+        _localRepository = (LocalRepository)r.getReader(_processor).getRepository();
+    }
+    for( Repository r : _repositories )
+    {
+      if( r.isLocal() )
+        continue;
+
+      _repositoryReaders[ i++ ] = r.getReader(_processor);
+    }
+    _initialized = true;
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  public Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> readVersions( List<? extends ArtifactBasicMetadata> query )
+  throws IllegalArgumentException, RepositoryException
+  {
+    if( query == null )
+      throw new IllegalArgumentException("null bmd supplied");
+    
+    init();
+        
+    Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> res = null;
+
+    for( RepositoryReader rr : _repositoryReaders )
+    {
+      Map<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>> repoRes = rr.readVersions( query );
+      
+      if( repoRes != null )
+        for( ArtifactBasicMetadata key : repoRes.keySet() )
+        {
+          RepositoryOperationResult<ArtifactBasicMetadata> ror = repoRes.get( key );
+          if( ror != null && !ror.hasExceptions() && ror.hasResults() )
+          {
+            List<ArtifactBasicMetadata> rorRes = ror.getResults();
+            for( ArtifactBasicMetadata bmd : rorRes )
+              bmd.setTracker(  rr );
+            
+            if( res == null )
+              res = new HashMap<ArtifactBasicMetadata, List<ArtifactBasicMetadata>>( query.size() );
+            
+            if( res.containsKey( key ) )
+              res.get( key ).addAll( rorRes );
+            else
+              res.put( key, rorRes );
+          }
+        }
+    }
+    
+    return res;
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  public ArtifactMetadata readDependencies( ArtifactBasicMetadata bmd )
+  throws IllegalArgumentException, RepositoryException
+  {
+    if( bmd == null )
+      throw new IllegalArgumentException("null bmd supplied");
+    
+    init();
+    
+    List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>(1);
+    query.add( bmd );
+    
+    for( RepositoryReader rr : _repositoryReaders )
+    {
+      Map<ArtifactBasicMetadata, ArtifactMetadata> res = rr.readDependencies( query );
+      if( res != null && ! res.isEmpty() )
+      {
+        ArtifactMetadata md = res.get( bmd );
+        md.setTracker( rr );
+        return md;
+      }
+    }
+    
+    return null;
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  /* (non-Javadoc)
+   * @see org.apache.maven.mercury.repository.api.MetadataReader#readMetadata(org.apache.maven.mercury.ArtifactBasicMetadata)
+   */
+  public byte[] readMetadata( ArtifactBasicMetadata bmd )
+      throws MetadataProcessingException
+  {
+    return readRawData( bmd, "", "pom" );
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  /* (non-Javadoc)
+   * @see org.apache.maven.mercury.repository.api.MetadataReader#readRawData(org.apache.maven.mercury.ArtifactBasicMetadata, java.lang.String)
+   */
+  public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+  throws MetadataProcessingException
+  {
+    if( bmd == null )
+      throw new IllegalArgumentException("null bmd supplied");
+    
+    try
+    {
+      init();
+    }
+    catch( RepositoryException e )
+    {
+      throw new MetadataProcessingException(e);
+    }
+    
+    byte [] res = null;
+    
+    for( RepositoryReader rr : _repositoryReaders )
+    {
+      res = rr.readRawData( bmd, classifier, type );
+      if( res != null )
+        return res;
+    }
+    
+    return null;
+  }
+  //----------------------------------------------------------------------------------------------------------------------------
+  //----------------------------------------------------------------------------------------------------------------------------
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/pom.xml?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/pom.xml (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/pom.xml Fri Aug  1 15:55:40 2008
@@ -0,0 +1,20 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.mercury</groupId>
+  <artifactId>mercury-repo-local-m2</artifactId>
+  <name>Mercury dependency calulator</name>
+  <version>1.0.0-SNAPSHOT</version>
+  <description/>
+  <parent>
+  	<groupId>org.apache.maven.mercury</groupId>
+  	<artifactId>mercury-repo</artifactId>
+  	<version>1.0.0-SNAPSHOT</version>
+  </parent>
+  <dependencies>
+  	<dependency>
+  		<groupId>org.apache.maven.mercury</groupId>
+  		<artifactId>mercury-repo-api</artifactId>
+  		<version>1.0.0-SNAPSHOT</version>
+  	</dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,76 @@
+package org.apache.maven.mercury.repository.local.m2;
+
+import java.io.File;
+
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+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 LocalRepositoryM2
+extends AbstractRepository
+implements LocalRepository
+{
+    private File directory;
+    //----------------------------------------------------------------------------------
+    public LocalRepositoryM2( String id, File directory )
+    {
+        super( id, DEFAULT_REPOSITORY_TYPE );
+        this.directory = directory;
+    }
+    //----------------------------------------------------------------------------------
+    public LocalRepositoryM2( String id, File directory, String type )
+    {
+        super( id, type );
+        this.directory = directory;
+    }
+    //----------------------------------------------------------------------------------
+    public File getDirectory()
+    {
+        return directory;
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryReader getReader( MetadataProcessor processor ) 
+    {
+      if( reader == null )
+        reader = new LocalRepositoryReaderM2( this, processor );
+
+      return reader;
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryReader getReader( MetadataProcessor processor, String protocol )
+    {
+       return getReader(processor);
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryWriter getWriter()
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryWriter getWriter( String protocol )
+        throws NonExistentProtocolException
+    {
+      return null;
+    }
+    //----------------------------------------------------------------------------------
+    public boolean isLocal()
+    {
+      return true;
+    }
+    //----------------------------------------------------------------------------------
+    public boolean isReadOnly()
+    {
+      return false;
+    }
+    //----------------------------------------------------------------------------------
+    public String getType()
+    {
+      return DEFAULT_REPOSITORY_TYPE;
+    }
+    //----------------------------------------------------------------------------------
+    //----------------------------------------------------------------------------------
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,229 @@
+package org.apache.maven.mercury.repository.local.m2;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
+import org.apache.maven.mercury.artifact.DefaultArtifact;
+import org.apache.maven.mercury.artifact.version.VersionException;
+import org.apache.maven.mercury.artifact.version.VersionRange;
+import org.apache.maven.mercury.repository.api.AbstracRepositoryReader;
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessingException;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+import org.apache.maven.mercury.repository.api.MetadataReader;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryOperationResult;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+
+public class LocalRepositoryReaderM2
+extends AbstracRepositoryReader
+implements RepositoryReader, MetadataReader
+{
+  private static final org.slf4j.Logger _log = org.slf4j.LoggerFactory.getLogger( LocalRepositoryReaderM2.class ); 
+  //---------------------------------------------------------------------------------------------------------------
+  private static final String [] _protocols = new String [] { "file" };
+  
+  LocalRepository _repo;
+  File _repoDir;
+  //---------------------------------------------------------------------------------------------------------------
+  public LocalRepositoryReaderM2( LocalRepository repo, MetadataProcessor mdProcessor )
+  {
+    if( repo == null )
+      throw new IllegalArgumentException("localRepo cannot be null");
+    
+    _repoDir = repo.getDirectory();
+    if( _repoDir == null )
+      throw new IllegalArgumentException("localRepo directory cannot be null");
+    
+    if( !_repoDir.exists() )
+      throw new IllegalArgumentException("localRepo directory \""+_repoDir.getAbsolutePath()+"\" should exist");
+
+    _repo = repo;
+    
+    if( mdProcessor == null )
+      throw new IllegalArgumentException("MetadataProcessor cannot be null ");
+    
+    setMetadataProcessor(  mdProcessor );
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public Repository getRepository()
+  {
+    return _repo;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public RepositoryOperationResult<DefaultArtifact> readArtifacts( List<? extends ArtifactBasicMetadata> query )
+      throws RepositoryException,
+      IllegalArgumentException
+  {
+    // TODO Auto-generated method stub
+    return null;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  /**
+   * 
+   */
+  public Map<ArtifactBasicMetadata, ArtifactMetadata> readDependencies( List<? extends ArtifactBasicMetadata> query )
+      throws RepositoryException,
+      IllegalArgumentException
+  {
+    if( query == null || query.size() < 1 )
+      return null;
+
+    Map<ArtifactBasicMetadata, ArtifactMetadata> ror = new HashMap<ArtifactBasicMetadata, ArtifactMetadata>(16);
+    
+    File pomFile = null;
+    for( ArtifactBasicMetadata bmd : query )
+    {
+      String pomPath = bmd.getGroupId().replace( '.', '/' )
+                      + "/" + bmd.getArtifactId()
+                      + "/" + bmd.getVersion()
+                      + "/" + bmd.getBaseName()
+                      + ".pom"
+                      ;
+      
+      pomFile = new File( _repoDir, pomPath );
+      if( ! pomFile.exists() )
+      {
+        _log.warn( "file \""+pomPath+"\" does not exist in local repo" );
+        continue;
+      }
+      
+      // TODO HIGH og: delegate POM processing to maven-project
+      // for testing purpose - I plug in my test processor
+      try
+      {
+        List<ArtifactBasicMetadata> deps = _mdProcessor.getDependencies( bmd, this );
+        ArtifactMetadata md = new ArtifactMetadata( bmd );
+        md.setDependencies( deps );
+        
+        ror.put( bmd, md );
+      }
+      catch( MetadataProcessingException e )
+      {
+        _log.warn( "error reading "+bmd.toString()+" dependencies", e );
+        continue;
+      }
+      
+    }
+    
+    return ror;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  /**
+   * direct disk search, no redirects, first attempt
+   */
+  public Map<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>> readVersions(
+      List<? extends ArtifactBasicMetadata> query )
+      throws RepositoryException,
+      IllegalArgumentException
+  {
+    if( query == null || query.size() < 1 )
+      return null;
+    Map<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>> res = new HashMap<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>>( query.size() );
+    
+    File gaDir = null;
+    for( ArtifactBasicMetadata bmd : query )
+    {
+      gaDir = new File( _repoDir, bmd.getGroupId().replace( '.', '/' )+"/"+bmd.getArtifactId() );
+      if( ! gaDir.exists() )
+        continue;
+      
+      File [] versionFiles = gaDir.listFiles();
+      
+      RepositoryOperationResult<ArtifactBasicMetadata> rr = null;
+      VersionRange versionQuery;
+      try
+      {
+        versionQuery = new VersionRange( bmd.getVersion() );
+      }
+      catch( VersionException e )
+      {
+        rr = RepositoryOperationResult.add( rr, new RepositoryException(e) );
+        continue;
+      }
+      
+      for( File vf : versionFiles )
+      {
+        if( !vf.isDirectory() )
+          continue;
+        
+        if( !versionQuery.includes(  vf.getName() )  )
+          continue;
+        
+        ArtifactBasicMetadata vmd = new ArtifactBasicMetadata();
+        vmd.setGroupId( bmd.getGroupId() );
+        vmd.setArtifactId(  bmd.getArtifactId() );
+        vmd.setClassifier( bmd.getClassifier() );
+        vmd.setType( bmd.getType() );
+        vmd.setVersion( vf.getName() );
+        
+        rr = RepositoryOperationResult.add( rr, vmd );
+      }
+      if( rr != null )
+        res.put( bmd, rr );
+    }
+    
+    return res;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+  throws MetadataProcessingException
+  {
+    String bmdPath = bmd.getGroupId().replace( '.', '/' )+"/"+bmd.getArtifactId()+"/"+bmd.getVersion();
+    
+    String path = bmdPath+"/"+bmd.getBaseName(classifier)+'.' + (type == null ? bmd.getType() : type );
+    
+    return readRawData( path );
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public byte[] readRawData( String path )
+  throws MetadataProcessingException
+  {
+    File file = new File( _repoDir, path );
+    
+    if( ! file.exists() )
+      return null;
+    
+    FileInputStream fis = null;
+    
+    try
+    {
+      fis = new FileInputStream( file );
+      int len = (int)file.length();
+      byte [] pom = new byte [ len ];
+      fis.read( pom );
+      return pom;
+    }
+    catch( IOException e )
+    {
+      throw new MetadataProcessingException(e);
+    }
+    finally
+    {
+      if( fis != null ) try { fis.close(); } catch( Exception any ) {}
+    }
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public boolean canHandle( String protocol )
+  {
+    return AbstractRepository.DEFAULT_LOCAL_READ_PROTOCOL.equals( protocol );
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public String[] getProtocols()
+  {
+    return _protocols;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public void close()
+  {
+  }
+  //---------------------------------------------------------------------------------------------------------------
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Factory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Factory.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Factory.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Factory.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,33 @@
+package org.apache.maven.mercury.repository.local.m2;
+
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryReaderFactory;
+import org.codehaus.plexus.i18n.DefaultLanguage;
+import org.codehaus.plexus.i18n.Language;
+
+public class LocalRepositoryReaderM2Factory
+implements RepositoryReaderFactory
+{
+  private static final Language lang = new DefaultLanguage( LocalRepositoryReaderM2Factory.class );
+  private static final LocalRepositoryReaderM2Factory factory = new LocalRepositoryReaderM2Factory();
+  
+  static 
+  {
+    AbstractRepository.register( AbstractRepository.DEFAULT_REPOSITORY_TYPE, factory  );
+  }
+  
+  public RepositoryReader getReader( Repository repo, MetadataProcessor mdProcessor)
+  throws RepositoryException
+  {
+    if( repo == null || !(repo instanceof LocalRepository) )
+      throw new RepositoryException( lang.getMessage( "bad.repository.type", repo == null ? "null" : repo.getClass().getName() ) );
+    
+    return new LocalRepositoryReaderM2( (LocalRepository)repo, mdProcessor );
+  }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,84 @@
+package org.apache.maven.mercury.repository.local.m2;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.mercury.artifact.Artifact;
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
+import org.apache.maven.mercury.artifact.DefaultArtifact;
+import org.apache.maven.mercury.artifact.version.VersionException;
+import org.apache.maven.mercury.artifact.version.VersionRange;
+import org.apache.maven.mercury.repository.api.AbstracRepositoryReader;
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessingException;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+import org.apache.maven.mercury.repository.api.MetadataReader;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryOperationResult;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
+
+public class LocalRepositoryWriterM2
+implements RepositoryWriter
+{
+  private static final org.slf4j.Logger _log = org.slf4j.LoggerFactory.getLogger( LocalRepositoryWriterM2.class ); 
+  //---------------------------------------------------------------------------------------------------------------
+  private static final String [] _protocols = new String [] { "file" };
+  
+  LocalRepository _repo;
+  File _repoDir;
+  //---------------------------------------------------------------------------------------------------------------
+  public LocalRepositoryWriterM2( LocalRepository repo )
+  {
+    if( repo == null )
+      throw new IllegalArgumentException("localRepo cannot be null");
+    
+    _repoDir = repo.getDirectory();
+    if( _repoDir == null )
+      throw new IllegalArgumentException("localRepo directory cannot be null");
+    
+    if( !_repoDir.exists() )
+      throw new IllegalArgumentException("localRepo directory \""+_repoDir.getAbsolutePath()+"\" should exist");
+
+    _repo = repo;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public Repository getRepository()
+  {
+    return _repo;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public boolean canHandle( String protocol )
+  {
+    return AbstractRepository.DEFAULT_LOCAL_READ_PROTOCOL.equals( protocol );
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public String[] getProtocols()
+  {
+    return _protocols;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public void close()
+  {
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  //---------------------------------------------------------------------------------------------------------------
+  /* (non-Javadoc)
+   * @see org.apache.maven.mercury.repository.api.RepositoryWriter#writeArtifact(java.util.Collection)
+   */
+  public void writeArtifact(
+      Collection<Artifact> artifact )
+      throws RepositoryException
+  {
+    // TODO Auto-generated method stub
+    
+  }
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,33 @@
+package org.apache.maven.mercury.repository.local.m2;
+
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryReaderFactory;
+import org.codehaus.plexus.i18n.DefaultLanguage;
+import org.codehaus.plexus.i18n.Language;
+
+public class LocalRepositoryWriterM2Factory
+implements RepositoryReaderFactory
+{
+  private static final Language lang = new DefaultLanguage( LocalRepositoryWriterM2Factory.class );
+  private static final LocalRepositoryWriterM2Factory factory = new LocalRepositoryWriterM2Factory();
+  
+  static 
+  {
+    AbstractRepository.register( AbstractRepository.DEFAULT_REPOSITORY_TYPE, factory  );
+  }
+  
+  public RepositoryReader getReader( Repository repo, MetadataProcessor mdProcessor)
+  throws RepositoryException
+  {
+    if( repo == null || !(repo instanceof LocalRepository) )
+      throw new RepositoryException( lang.getMessage( "bad.repository.type", repo == null ? "null" : repo.getClass().getName() ) );
+    
+    return new LocalRepositoryReaderM2( (LocalRepository)repo, mdProcessor );
+  }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties Fri Aug  1 15:55:40 2008
@@ -0,0 +1 @@
+bad.repository.type=repository should implement LocalRepository, instead got {0}
\ No newline at end of file

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/pom.xml?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/pom.xml (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/pom.xml Fri Aug  1 15:55:40 2008
@@ -0,0 +1,30 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.mercury</groupId>
+  <artifactId>mercury-repo-remote-m2</artifactId>
+  <name>Mercury dependency calulator</name>
+  <version>1.0.0-SNAPSHOT</version>
+  <description/>
+  <parent>
+  	<groupId>org.apache.maven.mercury</groupId>
+  	<artifactId>mercury-repo</artifactId>
+  	<version>1.0.0-SNAPSHOT</version>
+  </parent>
+  <dependencies>
+  	<dependency>
+  		<groupId>org.apache.maven.mercury</groupId>
+  		<artifactId>mercury-repo-api</artifactId>
+  		<version>1.0.0-SNAPSHOT</version>
+  	</dependency>
+  	<dependency>
+  		<groupId>org.apache.maven.mercury</groupId>
+  		<artifactId>mercury-transport-http</artifactId>
+  		<version>1.0.0-SNAPSHOT</version>
+  	</dependency>
+  	<dependency>
+  		<groupId>org.apache.maven.mercury</groupId>
+  		<artifactId>mercury-md-shared</artifactId>
+  		<version>1.0.0-SNAPSHOT</version>
+  	</dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties Fri Aug  1 15:55:40 2008
@@ -0,0 +1,6 @@
+bad.repository.type=repository should implement LocalRepository, instead got {0}
+bad.repository.null=repository cannot be null
+bad.repository.server.null=remote repository server cannot be null
+bad.repository.server.url.null=remote repository server URL cannot be null
+
+maven.metadata.xml.exception=Exception {0} during processing maven-metadata.xml from {1} in repository {2}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,71 @@
+package org.apache.maven.mercury.repository.remote.m2;
+
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+import org.apache.maven.mercury.repository.api.NonExistentProtocolException;
+import org.apache.maven.mercury.repository.api.RemoteRepository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
+import org.apache.maven.mercury.transport.api.Server;
+
+
+public class RemoteRepositoryM2
+extends AbstractRepository
+implements RemoteRepository
+{
+    private Server _server;
+    //----------------------------------------------------------------------------------
+    public RemoteRepositoryM2( String id, Server server  )
+    {
+        super( id, DEFAULT_REPOSITORY_TYPE );
+        this._server = server;
+    }
+    //----------------------------------------------------------------------------------
+    public Server getServer()
+    {
+        return _server;
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryReader getReader( MetadataProcessor processor )
+    throws RepositoryException
+    {
+      return new RemoteRepositoryReaderM2( this, processor );
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryReader getReader( MetadataProcessor processor, String protocol )
+    throws RepositoryException
+    {
+      return getReader(processor);
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryWriter getWriter()
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+    //----------------------------------------------------------------------------------
+    public RepositoryWriter getWriter( String protocol )
+        throws NonExistentProtocolException
+    {
+      // TODO Auto-generated method stub
+      return null;
+    }
+    //----------------------------------------------------------------------------------
+    public boolean isLocal()
+    {
+     return false;
+    }
+    //----------------------------------------------------------------------------------
+    public boolean isReadOnly()
+    {
+      return false;
+    }
+    //----------------------------------------------------------------------------------
+    public String getType()
+    {
+      return DEFAULT_REPOSITORY_TYPE;
+    }
+    //----------------------------------------------------------------------------------
+    //----------------------------------------------------------------------------------
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2OperationException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2OperationException.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2OperationException.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2OperationException.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,56 @@
+package org.apache.maven.mercury.repository.remote.m2;
+
+import org.apache.maven.mercury.repository.api.RepositoryException;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class RemoteRepositoryM2OperationException
+extends RepositoryException
+{
+
+  /**
+   * 
+   */
+  public RemoteRepositoryM2OperationException()
+  {
+    // TODO Auto-generated constructor stub
+  }
+
+  /**
+   * @param message
+   */
+  public RemoteRepositoryM2OperationException(
+      String message )
+  {
+    super( message );
+    // TODO Auto-generated constructor stub
+  }
+
+  /**
+   * @param cause
+   */
+  public RemoteRepositoryM2OperationException(
+      Throwable cause )
+  {
+    super( cause );
+    // TODO Auto-generated constructor stub
+  }
+
+  /**
+   * @param message
+   * @param cause
+   */
+  public RemoteRepositoryM2OperationException(
+      String message,
+      Throwable cause )
+  {
+    super( message, cause );
+    // TODO Auto-generated constructor stub
+  }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,298 @@
+package org.apache.maven.mercury.repository.remote.m2;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
+import org.apache.maven.mercury.artifact.DefaultArtifact;
+import org.apache.maven.mercury.artifact.version.VersionException;
+import org.apache.maven.mercury.artifact.version.VersionRange;
+import org.apache.maven.mercury.repository.api.AbstracRepositoryReader;
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessingException;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+import org.apache.maven.mercury.repository.api.MetadataReader;
+import org.apache.maven.mercury.repository.api.RemoteRepository;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryOperationResult;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.metadata.Metadata;
+import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.mercury.spi.http.client.HttpClientException;
+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.transport.api.Binding;
+import org.codehaus.plexus.i18n.DefaultLanguage;
+import org.codehaus.plexus.i18n.Language;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+/**
+ * implementation of M2 remote repository reader. Actual Transport used comes from RemoteRepository Server' URL
+ * 
+ *  Current implementation does not do the check and uses jetty-client directly. 
+ *  TODO - re-implements after jetty-client implements ReaderTransport 
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class RemoteRepositoryReaderM2
+extends AbstracRepositoryReader
+implements RepositoryReader, MetadataReader
+{
+  private static final org.slf4j.Logger _log = org.slf4j.LoggerFactory.getLogger( RemoteRepositoryReaderM2.class ); 
+  private static final Language _lang = new DefaultLanguage( RemoteRepositoryReaderM2.class );
+  // TODO - replace with known Transport's protocols. Should be similar to RepositoryReader/Writer registration
+  private static final String [] _protocols = new String [] { "http", "https" };
+  
+  // TODO replace with Transport
+  private DefaultRetriever _transport;
+  //---------------------------------------------------------------------------------------------------------------
+  RemoteRepository _repo;
+  //---------------------------------------------------------------------------------------------------------------
+  public RemoteRepositoryReaderM2( RemoteRepository repo, MetadataProcessor mdProcessor )
+  throws RepositoryException
+  {
+    
+    if( repo == null )
+      throw new IllegalArgumentException( _lang.getMessage( "bad.repository.null") );
+    
+    if( repo.getServer() == null )
+      throw new IllegalArgumentException( _lang.getMessage( "bad.repository.server.null") );
+    
+    if( repo.getServer().getURL() == null )
+      throw new IllegalArgumentException( _lang.getMessage( "bad.repository.server.url.null") );
+    
+    _repo = repo;
+    
+    if( mdProcessor == null )
+      throw new IllegalArgumentException("MetadataProcessor cannot be null ");
+    
+    setMetadataProcessor(  mdProcessor );
+    
+    try
+    {
+      // TODO 2008-07-29 og: here I should analyze Server protocol
+      //                     and come with appropriate Transport implementation 
+      _transport = new DefaultRetriever();
+    }
+    catch( HttpClientException e )
+    {
+      throw new RepositoryException(e);
+    }
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public Repository getRepository()
+  {
+    return _repo;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public RepositoryOperationResult<DefaultArtifact> readArtifacts( List<? extends ArtifactBasicMetadata> query )
+      throws RepositoryException,
+      IllegalArgumentException
+  {
+    // TODO Auto-generated method stub
+    return null;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  /**
+   * 
+   */
+  public Map<ArtifactBasicMetadata, ArtifactMetadata> readDependencies( List<? extends ArtifactBasicMetadata> query )
+      throws RepositoryException,
+      IllegalArgumentException
+  {
+    if( query == null || query.size() < 1 )
+      return null;
+
+    Map<ArtifactBasicMetadata, ArtifactMetadata> ror = new HashMap<ArtifactBasicMetadata, ArtifactMetadata>(16);
+    
+    for( ArtifactBasicMetadata bmd : query )
+    {
+      try
+      {
+        List<ArtifactBasicMetadata> deps = _mdProcessor.getDependencies( bmd, this );
+        ArtifactMetadata md = new ArtifactMetadata( bmd );
+        md.setDependencies( deps );
+        
+        ror.put( bmd, md );
+      }
+      catch( MetadataProcessingException e )
+      {
+        _log.warn( "error reading "+bmd.toString()+" dependencies", e );
+        continue;
+      }
+      
+    }
+    
+    return ror;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  /**
+   * direct disk search, no redirects, first attempt
+   */
+  public Map<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>> readVersions( List<? extends ArtifactBasicMetadata> query )
+      throws RepositoryException,
+      IllegalArgumentException
+  {
+    if( query == null || query.size() < 1 )
+      return null;
+
+    Map<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>> res = new HashMap<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>>( query.size() );
+    
+    String gaPath = null;
+    for( ArtifactBasicMetadata bmd : query )
+    {
+      gaPath = bmd.getGroupId().replace( '.', '/' )+'/'+bmd.getArtifactId()+"/maven-metadata.xml";
+      
+      byte[] mavenMetadata;
+      try
+      {
+        mavenMetadata = readRawData( gaPath );
+      }
+      catch( MetadataProcessingException e )
+      {
+        continue;
+      }
+      
+      if( mavenMetadata == null )
+        continue;
+      
+      MetadataXpp3Reader mmReader = new MetadataXpp3Reader();
+      Metadata mmd;
+      try
+      {
+        mmd = mmReader.read( new ByteArrayInputStream(mavenMetadata) );
+      }
+      catch( IOException e )
+      {
+        _log.warn( _lang.getMessage( "maven.metadata.xml.exception", e.getMessage(), gaPath, _repo.getId() ) );
+        continue;
+      }
+      catch( XmlPullParserException pe )
+      {
+        _log.error( pe.getMessage() );
+        throw new RepositoryException( pe );
+      }
+
+      RepositoryOperationResult<ArtifactBasicMetadata> rr = null;
+      VersionRange versionQuery;
+      try
+      {
+        versionQuery = new VersionRange( bmd.getVersion() );
+      }
+      catch( VersionException e )
+      {
+        rr = RepositoryOperationResult.add( rr, new RepositoryException(e) );
+        continue;
+      }
+      
+      for( Object vo : mmd.getVersioning().getVersions() )
+      {
+        if( vo == null || !(vo instanceof String) )
+          continue;
+        
+        String v = (String)vo;
+        
+        if( !versionQuery.includes(  v )  )
+          continue;
+        
+        ArtifactBasicMetadata vmd = new ArtifactBasicMetadata();
+        vmd.setGroupId( bmd.getGroupId() );
+        vmd.setArtifactId(  bmd.getArtifactId() );
+        vmd.setClassifier( bmd.getClassifier() );
+        vmd.setType( bmd.getType() );
+        vmd.setVersion( v );
+        
+        rr = RepositoryOperationResult.add( rr, vmd );
+      }
+      if( rr != null )
+        res.put( bmd, rr );
+    }
+    
+    return res;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+  throws MetadataProcessingException
+  {
+    String bmdPath = bmd.getGroupId().replace( '.', '/' )
+                    + '/'+bmd.getArtifactId()
+                    + '/'+bmd.getVersion()
+                    + '/'+bmd.getBaseName(classifier)
+                    + '.' + (type == null ? bmd.getType() : type )
+                    ;
+    
+    return readRawData( bmdPath );
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public byte[] readRawData( String path )
+  throws MetadataProcessingException
+  {
+    if( path == null || path.length() < 1 )
+      return null;
+    
+    FileInputStream fis = null;
+    File tempFile = null;
+    try
+    {
+      // transport workaround - until it can do in-memory Bindings
+      tempFile = File.createTempFile( "mercury", "readraw" );
+      
+      String separator = "/";
+      if( path.startsWith( separator ))
+        separator = "";
+      
+      Binding binding = new Binding( new URL(_repo.getServer().getURL().toString() + separator + path) , tempFile );
+      DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+      request.addBinding( binding );
+      
+      RetrievalResponse response = _transport.retrieve( request );
+      
+      if( response.hasExceptions() )
+      {
+        throw new MetadataProcessingException( response.getExceptions().toString() );
+      }
+    
+      fis = new FileInputStream( tempFile );
+      int len = (int)tempFile.length();
+      byte [] pom = new byte [ len ];
+      fis.read( pom );
+      return pom;
+    }
+    catch( IOException e )
+    {
+      throw new MetadataProcessingException(e);
+    }
+    finally
+    {
+      if( fis != null ) try { fis.close(); } catch( Exception any ) {}
+      if( tempFile != null ) try { if(tempFile.exists()) tempFile.delete(); } catch( Exception any ) {}
+    }
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public boolean canHandle( String protocol )
+  {
+    return AbstractRepository.DEFAULT_REMOTE_READ_PROTOCOL.equals( protocol );
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  //---------------------------------------------------------------------------------------------------------------
+  public void close()
+  {
+    // TODO Auto-generated method stub
+    
+  }
+  public String[] getProtocols()
+  {
+    return _protocols;
+  }
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2Factory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2Factory.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2Factory.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2Factory.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,33 @@
+package org.apache.maven.mercury.repository.remote.m2;
+
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.MetadataProcessor;
+import org.apache.maven.mercury.repository.api.RemoteRepository;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryReaderFactory;
+import org.codehaus.plexus.i18n.DefaultLanguage;
+import org.codehaus.plexus.i18n.Language;
+
+public class RemoteRepositoryReaderM2Factory
+implements RepositoryReaderFactory
+{
+  private static final Language lang = new DefaultLanguage( RemoteRepositoryReaderM2Factory.class );
+  private static final RemoteRepositoryReaderM2Factory factory = new RemoteRepositoryReaderM2Factory();
+  
+  static 
+  {
+    AbstractRepository.register( AbstractRepository.DEFAULT_REPOSITORY_TYPE, factory  );
+  }
+  
+  public RepositoryReader getReader( Repository repo, MetadataProcessor mdProcessor )
+  throws RepositoryException
+  {
+    if( repo == null || !(repo instanceof RemoteRepository) )
+      throw new RepositoryException( lang.getMessage( "bad.repository.type", repo == null ? "null" : repo.getClass().getName() ) );
+    
+    return new RemoteRepositoryReaderM2( (RemoteRepository)repo, mdProcessor );
+  }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-repo/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/pom.xml?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/pom.xml (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/pom.xml Fri Aug  1 15:55:40 2008
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.maven.mercury</groupId>
+    <artifactId>mercury-pom</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <artifactId>mercury-repo</artifactId>
+  <packaging>pom</packaging>
+  <name>Mercury Repository reactor</name>
+  <version>1.0.0-SNAPSHOT</version>
+
+  <modules>
+    <module>mercury-repo-api</module>
+    <module>mercury-repo-local-m2</module>
+    <module>mercury-repo-remote-m2</module>
+  </modules>
+
+</project>
\ No newline at end of file

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/pom.xml?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/pom.xml (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/pom.xml Fri Aug  1 15:55:40 2008
@@ -0,0 +1,12 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>mercury-transport-api</artifactId>
+  <name>Mercury transport APIs</name>
+  <description>Mercury transport APIs</description>
+  <parent>
+  	<groupId>org.apache.maven.mercury</groupId>
+  	<artifactId>mercury-transport</artifactId>
+  	<version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+</project>
\ No newline at end of file

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/AbstractTransport.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/AbstractTransport.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/AbstractTransport.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/AbstractTransport.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,43 @@
+package org.apache.maven.mercury.transport.api;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Helper parent of transport implementations. Common for read and write transports
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public abstract class AbstractTransport
+{
+  private Map< String, Server > _servers = Collections.synchronizedMap( new HashMap< String, Server >(8) );
+  
+  public void addServer( Server server )
+  {
+    if( server == null )
+      return;
+    
+    _servers.put( server.getId(), server );
+  }
+  
+  public void addServers( Collection<ServerContainer> containers )
+  {
+    for( ServerContainer c : containers )
+      addServer( c.getServer() );
+  }
+
+  public Server findServer( String id )
+  {
+    return _servers.get( id );
+  }
+
+  public void dropServer( String id )
+  {
+    _servers.remove( id );
+  }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,142 @@
+/**
+ * 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.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+
+/**
+ * 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
+{
+  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger( Binding.class );
+  
+  protected URL                 remoteResource;
+  protected File                localFile;
+  /** 
+   * inbound in-memory binding for reading remote content.
+   * It is created by the constructor
+   */
+  protected ByteArrayOutputStream localOS;
+  /**
+   * this is outbound in-memory binding. IS is passed by the client
+   */
+  protected InputStream         localIS;
+
+  protected Exception error;
+
+  public Binding()
+  {
+  }
+
+  public Binding(
+      URL remoteUrl,
+      File localFile)
+  {
+    this.remoteResource = remoteUrl;
+    this.localFile = localFile;
+
+  }
+
+  /** 
+   * this is in-memory binding for writing remote content into localOS
+   * 
+   * @param remoteUrl
+   * @param lenientChecksum
+   */
+  public Binding( URL remoteUrl )
+  {
+    this.remoteResource = remoteUrl;
+    // let's assume 4k on average
+    this.localOS = new ByteArrayOutputStream( 4*1024 );
+  }
+
+  /**
+   * outbound constructor - send contents of the stream to remoteUrl
+   * 
+   * @param remoteUrl
+   * @param is
+   */
+  public Binding( URL remoteUrl, InputStream is )
+  {
+    this.remoteResource = remoteUrl;
+    this.localIS = is;
+  }
+
+  public URL getRemoteResource()
+  {
+    return remoteResource;
+  }
+
+  public void setRemoteResource( URL remoteResource )
+  {
+    this.remoteResource = remoteResource;
+  }
+
+  public Exception getError()
+  {
+    return error;
+  }
+
+  public void setError( Exception error )
+  {
+    this.error = error;
+  }
+  
+  public boolean isInMemory()
+  {
+    return (!isFile() && (localIS != null || localOS != null));
+  }
+  
+  public boolean isFile()
+  {
+    return localFile != null;
+  }
+  
+  public byte [] getInboundContent()
+  {
+    if( localOS != null )
+      return localOS.toByteArray();
+    
+    return null;
+  }
+  
+  public OutputStream getLocalOutputStream()
+  {
+      return localOS;
+  }
+  
+  public InputStream getLocalInputStream()
+  {
+      return localIS;
+  }
+  
+  public File getLocalFile ()
+  {
+      return localFile;
+  }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Credentials.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Credentials.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Credentials.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Credentials.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,65 @@
+package org.apache.maven.mercury.transport.api;
+
+/**
+ * supplies credentials to the server
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class Credentials
+{
+  private String user;
+  private String pass;
+  
+  private byte [] cert;
+  
+  public Credentials( String user, String pass )
+  {
+    this.user = user;
+    this.pass = pass;
+  }
+  
+  public Credentials( byte [] cert, String user, String pass )
+  {
+    this( user, pass );
+    this.cert = cert;
+  }
+  
+  public Credentials( byte [] cert )
+  {
+    this.cert = cert;
+  }
+
+  public String getUser()
+  {
+    return user;
+  }
+
+  public void setUser( String user )
+  {
+    this.user = user;
+  }
+
+  public String getPass()
+  {
+    return pass;
+  }
+
+  public void setPass( String pass )
+  {
+    this.pass = pass;
+  }
+
+  public byte [] getCertificate()
+  {
+    return cert;
+  }
+
+  public void setCertificate( byte [] cert )
+  {
+    this.cert = cert;
+  }
+  
+  
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ReaderTransport.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ReaderTransport.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ReaderTransport.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ReaderTransport.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,14 @@
+package org.apache.maven.mercury.transport.api;
+
+/**
+ * generic Transport interface - allows client to read data from a remote repository
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public interface ReaderTransport
+{
+  public TransportTransaction read( TransportTransaction trx )
+  throws TransportException;
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,92 @@
+/**
+ * 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.URL;
+import java.util.Set;
+
+public class Server
+{
+  private String                     id;
+  private Set<StreamObserverFactory> streamObserverFactories;
+  private URL                        url;
+  private Credentials          serverCredentials;
+  private URL                        proxy;
+  private Credentials          proxyCredentials;
+
+  public Server( String id, URL url )
+  {
+    this.url = url;
+    this.id = id;
+  }
+
+  public Server( String id, URL url, Credentials serverCredentials )
+  {
+    this( id, url );
+    this.serverCredentials = serverCredentials;
+  }
+
+  public Server( String id, URL url, Credentials serverCredentials, URL proxy )
+  {
+    this( id, url, serverCredentials );
+    this.proxy = proxy;
+  }
+
+  public Server( String id, URL url, Credentials serverCredentials, URL proxy, Credentials proxyCredentials )
+  {
+    this( id, url, serverCredentials, proxy );
+    this.proxyCredentials = proxyCredentials;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public URL getURL()
+  {
+    return this.url;
+  }
+
+  public Credentials getServerCredentials()
+  {
+    return this.serverCredentials;
+  }
+
+  public URL getProxy()
+  {
+    return this.proxy;
+  }
+
+  public Credentials getProxyCredentials()
+  {
+    return this.serverCredentials;
+  }
+
+  public Set<StreamObserverFactory> getStreamObserverFactories()
+  {
+    return streamObserverFactories;
+  }
+
+  public void setStreamObserverFactories( Set<StreamObserverFactory> factories )
+  {
+    streamObserverFactories = factories;
+  }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ServerContainer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ServerContainer.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ServerContainer.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/ServerContainer.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,13 @@
+package org.apache.maven.mercury.transport.api;
+
+/**
+ * common interface for transports to obtain their servers from Collection's
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public interface ServerContainer
+{
+  public Server getServer();
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserver.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,25 @@
+/**
+ * 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;
+
+public interface StreamObserver
+{
+    void byteReady(int b);
+    void bytesReady(byte[]b, int off, int len);
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserverFactory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserverFactory.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserverFactory.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/StreamObserverFactory.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,24 @@
+/**
+ * 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;
+
+public interface StreamObserverFactory
+{
+    public StreamObserver newInstance();
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportException.java Fri Aug  1 15:55:40 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/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/TransportTransaction.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,134 @@
+package org.apache.maven.mercury.transport.api;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+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( URL remoteResource, File localResource )
+  {
+    init();
+    
+    _bindings.add( new Binding( remoteResource, localResource ) );
+    
+    return this;
+  }
+  //------------------------------------------------------------------------------------------------
+  public TransportTransaction add( URL remoteResource )
+  {
+    init();
+    
+    _bindings.add( new Binding( remoteResource ) );
+    
+    return this;
+  }
+  //------------------------------------------------------------------------------------------------
+  public TransportTransaction add( URL remoteResource, InputStream is )
+  {
+    init();
+    
+    _bindings.add( new Binding( remoteResource, is ) );
+    
+    return this;
+  }
+
+  //------------------------------------------------------------------------------------------------
+  public TransportTransaction add( URL remoteResource, byte [] localResource )
+  {
+    init();
+    
+    _bindings.add( new Binding( remoteResource, new ByteArrayInputStream(localResource)) );
+    
+    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 boolean isEmpty()
+  {
+    if( _bindings == null || _bindings.size() < 1 )
+      return true;
+    
+    return false;
+  }
+  //------------------------------------------------------------------------------------------------
+  public boolean hasErrors()
+  {
+    if( _bindings == null )
+      return false;
+    
+    for( Binding b : _bindings )
+      if( b.getError() != null )
+        return true;
+    
+    return false;
+  }
+  //------------------------------------------------------------------------------------------------
+  public void clearErrors()
+  {
+    if( _bindings == null )
+      return;
+    
+    for( Binding b : _bindings )
+      b.setError( null );
+  }
+  //------------------------------------------------------------------------------------------------
+  //------------------------------------------------------------------------------------------------
+}