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/10/13 21:58:21 UTC
svn commit: r704219 - in
/maven/mercury/trunk/mercury-repo/mercury-repo-virtual: ./
src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/maven/ src/main/java/org/apache/maven/mercury/
src/main/java/org/apache/maven/mercury/repository/ ...
Author: ogusakov
Date: Mon Oct 13 12:58:21 2008
New Revision: 704219
URL: http://svn.apache.org/viewvc?rev=704219&view=rev
Log:
added virtual repo project
Added:
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java (with props)
Modified:
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml?rev=704219&r1=704218&r2=704219&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml Mon Oct 13 12:58:21 2008
@@ -9,4 +9,11 @@
<artifactId>mercury-repo</artifactId>
<version>1.0.0-alpha-2-SNAPSHOT</version>
</parent>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
</project>
\ No newline at end of file
Added: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java?rev=704219&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java Mon Oct 13 12:58:21 2008
@@ -0,0 +1,278 @@
+package org.apache.maven.mercury.repository.virtual;
+
+import java.util.ArrayList;
+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.api.ArtifactListProcessor;
+import org.apache.maven.mercury.artifact.api.ArtifactListProcessorException;
+import org.apache.maven.mercury.builder.api.DependencyProcessor;
+import org.apache.maven.mercury.builder.api.MetadataReader;
+import org.apache.maven.mercury.builder.api.MetadataReaderException;
+import org.apache.maven.mercury.repository.api.AbstractRepOpResult;
+import org.apache.maven.mercury.repository.api.ArtifactBasicResults;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+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.RepositoryMetadataCache;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+
+/**
+ * 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 DependencyProcessor _processor;
+
+ RepositoryMetadataCache _mdCache;
+
+ private Map<String,ArtifactListProcessor> _processors;
+
+ private boolean _initialized = false;
+ //----------------------------------------------------------------------------------------------------------------------------
+ public VirtualRepositoryReader(
+ LocalRepository localRepository
+ , List<RemoteRepository> remoteRepositories
+ , DependencyProcessor processor
+ , RepositoryMetadataCache mdCache
+ )
+ 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 );
+
+ this._mdCache = mdCache;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ public VirtualRepositoryReader( List<Repository> repositories, DependencyProcessor processor, RepositoryMetadataCache mdCache )
+ throws RepositoryException
+ {
+ if( processor == null )
+ throw new RepositoryException( "null metadata processor" );
+ this._processor = processor;
+
+ if( repositories != null && repositories.size() > 0 )
+ this._repositories.addAll( repositories );
+
+ this._mdCache = mdCache;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ 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 setProcessors( Map<String, ArtifactListProcessor> processors )
+ {
+ _processors = processors;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ 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();
+ }
+
+ // the rest
+ for( Repository r : _repositories )
+ {
+ if( r.isLocal() )
+ continue;
+
+ _repositoryReaders[ i++ ] = r.getReader(_processor);
+ }
+ _initialized = true;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ /**
+ *
+ *
+ * @param query
+ * @param reader
+ * @param res
+ * @return
+ */
+ private List<ArtifactBasicMetadata> applyScanPolicy(
+ List<ArtifactBasicMetadata> query
+ , RepositoryReader reader
+ , AbstractRepOpResult res
+ )
+ {
+ // TODO 2008-08-26 og: implement real policy
+ return query;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ public ArtifactBasicResults readVersions( List<ArtifactBasicMetadata> query )
+ throws IllegalArgumentException, RepositoryException
+ {
+ if( query == null )
+ throw new IllegalArgumentException("null bmd supplied");
+
+ init();
+
+ ArtifactBasicResults res = null;
+ ArtifactListProcessor tp = _processors == null ? null : _processors.get( ArtifactListProcessor.FUNCTION_TP );
+
+ for( RepositoryReader rr : _repositoryReaders )
+ {
+ List<ArtifactBasicMetadata> leftOvers = applyScanPolicy( query, rr, res );
+
+ ArtifactBasicResults repoRes = rr.readVersions( leftOvers );
+
+ if( repoRes != null && repoRes.hasResults() )
+ for( ArtifactBasicMetadata key : repoRes.getResults().keySet() )
+ {
+ List<ArtifactBasicMetadata> rorRes = repoRes.getResult(key);
+
+ if( tp != null )
+ {
+ try
+ {
+ tp.configure( key );
+ rorRes = tp.process( rorRes );
+ }
+ catch( ArtifactListProcessorException e )
+ {
+ throw new RepositoryException(e);
+ }
+ }
+
+ if( rorRes == null )
+ continue;
+
+ for( ArtifactBasicMetadata bmd : rorRes )
+ bmd.setTracker( rr );
+
+ if( res == null )
+ res = new ArtifactBasicResults( key, rorRes );
+ else
+ res.add( 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 );
+
+ ArtifactMetadata md = new ArtifactMetadata( bmd );
+ for( RepositoryReader rr : _repositoryReaders )
+ {
+ ArtifactBasicResults res = rr.readDependencies( query );
+
+ if( res != null && res.hasResults( bmd ) )
+ {
+ md.setDependencies( res.getResult( bmd ) );
+ md.setTracker( rr );
+ return md;
+ }
+ }
+
+ return md;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ /* (non-Javadoc)
+ * @see org.apache.maven.mercury.repository.api.MetadataReader#readMetadata(org.apache.maven.mercury.ArtifactBasicMetadata)
+ */
+ public byte[] readMetadata( ArtifactBasicMetadata bmd )
+ throws MetadataReaderException
+ {
+ 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 MetadataReaderException
+ {
+ if( bmd == null )
+ throw new IllegalArgumentException("null bmd supplied");
+
+ try
+ {
+ init();
+ }
+ catch( RepositoryException e )
+ {
+ throw new MetadataReaderException(e);
+ }
+
+ byte [] res = null;
+
+ for( RepositoryReader rr : _repositoryReaders )
+ {
+ res = rr.readRawData( bmd, classifier, type );
+ if( res != null )
+ return res;
+ }
+
+ return null;
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
+ //----------------------------------------------------------------------------------------------------------------------------
+}
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
------------------------------------------------------------------------------
svn:mergeinfo =