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/07/24 07:40:00 UTC
svn commit: r679278 -
/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/
Author: ogusakov
Date: Wed Jul 23 22:39:59 2008
New Revision: 679278
URL: http://svn.apache.org/viewvc?rev=679278&view=rev
Log:
revamped the project to introduced all the new concepts: active Repository, Transport and all other good things.
Added:
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/NonExistentProtocolException.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryCallback.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryException.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryOperationResult.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java
Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/NonExistentProtocolException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/NonExistentProtocolException.java?rev=679278&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/NonExistentProtocolException.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/NonExistentProtocolException.java Wed Jul 23 22:39:59 2008
@@ -0,0 +1,34 @@
+package org.apache.maven.mercury.repository.api;
+
+public class NonExistentProtocolException
+ extends RepositoryException
+{
+
+ public NonExistentProtocolException()
+ {
+ // TODO Auto-generated constructor stub
+ }
+
+ public NonExistentProtocolException(
+ String message )
+ {
+ super( message );
+ // TODO Auto-generated constructor stub
+ }
+
+ public NonExistentProtocolException(
+ Throwable cause )
+ {
+ super( cause );
+ // TODO Auto-generated constructor stub
+ }
+
+ public NonExistentProtocolException(
+ String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ // TODO Auto-generated constructor stub
+ }
+
+}
Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryCallback.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryCallback.java?rev=679278&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryCallback.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryCallback.java Wed Jul 23 22:39:59 2008
@@ -0,0 +1,17 @@
+package org.apache.maven.mercury.repository.api;
+
+import java.util.List;
+
+/**
+ * This is a generic repository event callback. Used by all repository operations
+ * to signal end of operation and represents a list of exceptions plus a list
+ * of ArtifactBasicMetadata derivatives
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public interface RepositoryCallback
+{
+ public void done( RepositoryOperationResult<?> result );
+}
Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryException.java?rev=679278&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryException.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryException.java Wed Jul 23 22:39:59 2008
@@ -0,0 +1,59 @@
+package org.apache.maven.mercury.repository.api;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class RepositoryException
+ extends Exception
+{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1193169088723411771L;
+
+ /**
+ *
+ */
+ public RepositoryException()
+ {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ */
+ public RepositoryException(
+ String message )
+ {
+ super( message );
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param cause
+ */
+ public RepositoryException(
+ Throwable cause )
+ {
+ super( cause );
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public RepositoryException(
+ String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ // TODO Auto-generated constructor stub
+ }
+
+}
Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryOperationResult.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryOperationResult.java?rev=679278&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryOperationResult.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryOperationResult.java Wed Jul 23 22:39:59 2008
@@ -0,0 +1,69 @@
+package org.apache.maven.mercury.repository.api;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.mercury.ArtifactBasicMetadata;
+/**
+ * generic repository operation result. Represents a List of <T extends ArtifactBasicMetadata>
+ * objects and a set of exceptions thrown in the process
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ * @param <T>
+ */
+public class RepositoryOperationResult<T extends ArtifactBasicMetadata>
+{
+ private Set<RepositoryException> _exceptions = Collections.synchronizedSet( new HashSet<RepositoryException>() );
+ private List<T> _results = Collections.synchronizedList( new ArrayList<T>() );
+
+ public RepositoryOperationResult()
+ {
+ }
+
+ protected void add( RepositoryException exception )
+ {
+ _exceptions.add( exception );
+ }
+
+ public Set<RepositoryException> getExceptions()
+ {
+ return _exceptions;
+ }
+
+ public String toString()
+ {
+ return _exceptions.toString();
+ }
+
+ public boolean hasExceptions()
+ {
+ return _exceptions.size() > 0;
+ }
+
+ public void add( T result )
+ {
+ _results.add( result );
+ }
+
+ public void add( Collection<T> resColl )
+ {
+ _results.addAll( resColl );
+ }
+
+ public List<T> getResults()
+ {
+ return _results;
+ }
+
+ public boolean hasResults()
+ {
+ return _results.size() > 0;
+ }
+
+}
Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java?rev=679278&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java Wed Jul 23 22:39:59 2008
@@ -0,0 +1,69 @@
+package org.apache.maven.mercury.repository.api;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.mercury.Artifact;
+import org.apache.maven.mercury.ArtifactBasicMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
+import org.apache.maven.mercury.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
+{
+ /**
+ * given basic coordinates query - instantiate all available matches as ArtifactBasicMetadata objects.
+ * Analogous to reading maven-metadata.xml 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>> findMetadata( 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
+ * Analogous to reading pom.xml 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 RepositoryOperationResult<ArtifactMetadata> readMetadata( 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;
+
+ /**
+ * Indicates whether this reader is wrapping the localRepo. This flag defines the necessity to download
+ * the artifact, if it was cleared by the conflict resolver but not read from a localRepo.
+ *
+ * @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 boolean isLocal();
+}
Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java?rev=679278&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriter.java Wed Jul 23 22:39:59 2008
@@ -0,0 +1,26 @@
+package org.apache.maven.mercury.repository.api;
+
+import org.apache.maven.mercury.Artifact;
+
+
+/**
+ * Repository wruter 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
+{
+ /**
+ * write (upload) given artifact to the repository
+ *
+ * @param artifact to upload
+ * @throws RepositoryException
+ */
+ public void writeArtifact( Artifact artifact, RepositoryCallback callback )
+ throws RepositoryException;
+}
Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java?rev=679278&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java Wed Jul 23 22:39:59 2008
@@ -0,0 +1,142 @@
+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.ArtifactBasicMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
+import org.apache.maven.mercury.metadata.MetadataTreeException;
+import org.apache.maven.mercury.repository.LocalRepository;
+import org.apache.maven.mercury.repository.RemoteRepository;
+
+/**
+ * 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
+{
+ //----------------------------------------------------------------------------------------------------------------------------
+ private LocalRepository _localRepository;
+ private List<RemoteRepository> _remoteRepositories;
+
+ private int _repositoryCount = 1;
+ private RepositoryReader[] _repositoryReaders;
+ //----------------------------------------------------------------------------------------------------------------------------
+ public VirtualRepositoryReader(
+ LocalRepository localRepository
+ , List<RemoteRepository> remoteRepositories
+ )
+ throws RepositoryException
+ {
+ if( _localRepository == null )
+ throw new RepositoryException( "null local repo" );
+
+ this._localRepository = localRepository;
+
+ this._remoteRepositories = remoteRepositories;
+
+ if( _remoteRepositories != null && _remoteRepositories.size() > 0 )
+ _repositoryCount += _remoteRepositories.size();
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ public void init()
+ {
+ if( _repositoryReaders != null )
+ return;
+
+ _repositoryReaders = new RepositoryReader[ _repositoryCount ];
+ _repositoryReaders[0] = _localRepository.getReader();
+
+ if( _repositoryCount > 1 )
+ {
+ int i = 1;
+ for( RemoteRepository rr : _remoteRepositories )
+ _repositoryReaders[ i++ ] = rr.getReader();
+ }
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ public Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> findMetadata( 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.findMetadata( 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.setReader( 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 readMetadata( 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 );
+
+ List<ArtifactMetadata> resList = null;
+ for( RepositoryReader rr : _repositoryReaders )
+ {
+ resList = readMetadataFromRepository( query, rr );
+ if( resList != null )
+ return resList.get( 0 );
+ }
+
+ return null;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ private List<ArtifactMetadata> readMetadataFromRepository( List<ArtifactBasicMetadata> query, RepositoryReader reader )
+ throws RepositoryException
+ {
+ RepositoryOperationResult<ArtifactMetadata> res = reader.readMetadata( query );
+ if( res != null && !res.hasExceptions() && res.hasResults() )
+ {
+ List<ArtifactMetadata> resList = res.getResults();
+ for( ArtifactBasicMetadata bmd : resList )
+ bmd.setReader( reader );
+
+ return resList;
+ }
+
+ return null;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ //----------------------------------------------------------------------------------------------------------------------------
+}