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 );
+ }
+ //------------------------------------------------------------------------------------------------
+ //------------------------------------------------------------------------------------------------
+}