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 2009/01/08 03:31:13 UTC
svn commit: r732592 [2/2] - in /maven/mercury/trunk:
mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/
mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/
mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/re...
Modified: 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=732592&r1=732591&r2=732592&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java Wed Jan 7 18:31:13 2009
@@ -61,721 +61,761 @@
import org.codehaus.plexus.lang.Language;
/**
- * 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
+ * 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, EventGenerator
+ implements MetadataReader, EventGenerator
{
- public static final String EVENT_READ_ARTIFACTS = "read.artifacts";
- public static final String EVENT_READ_ARTIFACTS_FROM_REPO = "read.artifacts.from.repo";
- public static final String EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED = "read.artifacts.from.repo.qualified";
- public static final String EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED = "read.artifacts.from.repo.unqualified";
-
- public static final String EVENT_READ_VERSIONS = "read.versions";
- public static final String EVENT_READ_VERSIONS_FROM_REPO = "read.versions.from.repo";
-
- public static final String EVENT_READ_DEPENDENCIES = "read.dependencies";
- public static final String EVENT_READ_DEPENDENCIES_FROM_REPO = "read.dependencies.from.repo";
-
- public static final String EVENT_READ_RAW = "vr.read.raw";
- public static final String EVENT_READ_RAW_FROM_REPO = "read.raw.from.repo";
-
- /** file system cache subfolder */
- public static final String METADATA_CACHE_DIR = ".cache";
-
- /** minimum # of queue elements to consider parallelization */
- private static int MIN_PARALLEL = 5;
-
- private static final Language _lang = new DefaultLanguage( VirtualRepositoryReader.class );
- private static final IMercuryLogger _log = MercuryLoggerManager.getLogger( VirtualRepositoryReader.class );
-
- //----------------------------------------------------------------------------------------------------------------------------
- private List<Repository> _repositories = new ArrayList<Repository>(8);
-
- private RepositoryReader[] _repositoryReaders;
-
- private LocalRepository _localRepository;
-
- private RepositoryWriter _localRepositoryWriter;
-
- RepositoryMetadataCache _mdCache;
-
- private Map<String,ArtifactListProcessor> _processors;
-
- private boolean _initialized = false;
-
- private EventManager _eventManager;
- //----------------------------------------------------------------------------------------------------------------------------
- public VirtualRepositoryReader( Collection<Repository> repositories )
- throws RepositoryException
- {
- if( ! Util.isEmpty( repositories ) )
- this._repositories.addAll( repositories );
- }
- //----------------------------------------------------------------------------------------------------------------------------
- private VirtualRepositoryReader(
- LocalRepository localRepository
- , Collection<RemoteRepository> remoteRepositories
- )
- throws RepositoryException
- {
- if( _localRepository == null )
- throw new RepositoryException( "null local repo" );
-
- this._localRepository = localRepository;
-
- this._repositories.add( localRepository );
-
- if( remoteRepositories != null && remoteRepositories.size() > 0 )
- this._repositories.addAll( remoteRepositories );
- }
- //----------------------------------------------------------------------------------------------------------------------------
- private VirtualRepositoryReader( Repository... repositories )
- throws RepositoryException
- {
- if( repositories != null && repositories.length > 0 )
- for( Repository r : repositories )
- this._repositories.add( r );
- }
- //----------------------------------------------------------------------------------------------------------------------------
- public static final RepositoryMetadataCache getCache( File localRepositoryRoot )
- throws IOException
- {
- // TODO: 2008-10-13 og: man - I miss plexus! Badly want an IOC container. This
- // should be configured, not hardcoded
- return MetadataCacheFs.getCache( new File(localRepositoryRoot, METADATA_CACHE_DIR) );
- }
- //----------------------------------------------------------------------------------------------------------------------------
- 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;
- }
- //----------------------------------------------------------------------------------------------------------------------------
- /**
- * very important call - makes VRR sort out all the information it collected so far
- */
- public void init()
- throws RepositoryException
- {
- if( _initialized )
- return;
-
- _repositoryReaders = new RepositoryReader[ _repositories.size() ];
-
- // move local repo's upfront - they are faster!
- int i = 0;
- for( Repository r : _repositories )
- {
- if( ! r.isLocal() || ! r.isReadable() )
- continue;
-
- RepositoryReader rr = r.getReader();
-
- rr.setMetadataReader( this );
-
- _repositoryReaders[ i++ ] = rr;
-
- if( r.isWriteable() )
- {
- // we select the first writable repo in the list
- if( _localRepository != null )
- continue;
-
- _localRepository = (LocalRepository)r.getReader().getRepository();
- _localRepositoryWriter = _localRepository.getWriter();
-
- if( _mdCache == null )
- {
- try
- {
- _mdCache = getCache( _localRepository.getDirectory() );
-
- if( _eventManager != null )
- _mdCache.setEventManager( _eventManager );
- }
- catch( IOException e )
- {
- throw new RepositoryException( e.getMessage() );
- }
- }
- }
- }
-
- // remote ones
- for( Repository r : _repositories )
- {
- if( r.isLocal() || ! r.isReadable() )
- continue;
-
- RepositoryReader rr = r.getReader();
-
- if( _mdCache != null )
- rr.setMetadataCache( _mdCache );
-
- rr.setMetadataReader( this );
-
- _repositoryReaders[ i++ ] = rr;
- }
- _initialized = true;
- }
- //----------------------------------------------------------------------------------------------------------------------------
- public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
- throws IllegalArgumentException, RepositoryException
- {
- if( query == null )
- throw new IllegalArgumentException("null bmd supplied");
-
- init();
-
- GenericEvent event = null;
-
- try
- {
-
- if( _eventManager != null )
- event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_VERSIONS );
-
- ArtifactBasicResults res = null;
- ArtifactListProcessor tp = _processors == null ? null : _processors.get( ArtifactListProcessor.FUNCTION_TP );
-
- GenericEvent eventRead = null;
-
- List<ArtifactBasicMetadata> qList = new ArrayList<ArtifactBasicMetadata>( query.size() );
- qList.addAll( query );
-
- for( RepositoryReader rr : _repositoryReaders )
- try
- {
- // all found
- if( qList.isEmpty() )
- break;
-
- if( _eventManager!= null )
- eventRead = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_VERSIONS_FROM_REPO, rr.getRepository().getId() );
-
- ArtifactBasicResults repoRes = rr.readVersions( qList );
-
- 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( Util.isEmpty( rorRes ) )
- {
- eventRead.setResult( "none found" );
- continue;
- }
-
- for( ArtifactBasicMetadata bmd : rorRes )
- bmd.setTracker( rr );
-
- if( res == null )
- res = new ArtifactBasicResults( key, rorRes );
- else
- res.add( key, rorRes );
-
- String keyVersion = key.getVersion();
- VersionRange keyVersionRange = null;
- try
+ public static final String EVENT_READ_ARTIFACTS = "read.artifacts";
+
+ public static final String EVENT_READ_ARTIFACTS_FROM_REPO = "read.artifacts.from.repo";
+
+ public static final String EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED = "read.artifacts.from.repo.qualified";
+
+ public static final String EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED = "read.artifacts.from.repo.unqualified";
+
+ public static final String EVENT_READ_VERSIONS = "read.versions";
+
+ public static final String EVENT_READ_VERSIONS_FROM_REPO = "read.versions.from.repo";
+
+ public static final String EVENT_READ_DEPENDENCIES = "read.dependencies";
+
+ public static final String EVENT_READ_DEPENDENCIES_FROM_REPO = "read.dependencies.from.repo";
+
+ public static final String EVENT_READ_RAW = "vr.read.raw";
+
+ public static final String EVENT_READ_RAW_FROM_REPO = "read.raw.from.repo";
+
+ /** file system cache subfolder */
+ public static final String METADATA_CACHE_DIR = ".cache";
+
+ /** minimum # of queue elements to consider parallelization */
+ private static int MIN_PARALLEL = 5;
+
+ private static final Language _lang = new DefaultLanguage( VirtualRepositoryReader.class );
+
+ private static final IMercuryLogger _log = MercuryLoggerManager.getLogger( VirtualRepositoryReader.class );
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ private List<Repository> _repositories = new ArrayList<Repository>( 8 );
+
+ private RepositoryReader[] _repositoryReaders;
+
+ private LocalRepository _localRepository;
+
+ private RepositoryWriter _localRepositoryWriter;
+
+ RepositoryMetadataCache _mdCache;
+
+ private Map<String, ArtifactListProcessor> _processors;
+
+ private boolean _initialized = false;
+
+ private EventManager _eventManager;
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public VirtualRepositoryReader( Collection<Repository> repositories )
+ throws RepositoryException
+ {
+ if ( !Util.isEmpty( repositories ) )
+ this._repositories.addAll( repositories );
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public VirtualRepositoryReader( LocalRepository localRepository, Collection<RemoteRepository> remoteRepositories )
+ throws RepositoryException
+ {
+ if ( _localRepository == null )
+ throw new RepositoryException( "null local repo" );
+
+ this._localRepository = localRepository;
+
+ this._repositories.add( localRepository );
+
+ if ( remoteRepositories != null && remoteRepositories.size() > 0 )
+ this._repositories.addAll( remoteRepositories );
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public VirtualRepositoryReader( Repository... repositories )
+ throws RepositoryException
+ {
+ if ( repositories != null && repositories.length > 0 )
+ for ( Repository r : repositories )
+ this._repositories.add( r );
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public static final RepositoryMetadataCache getCache( File localRepositoryRoot )
+ throws IOException
+ {
+ // TODO: 2008-10-13 og: man - I miss plexus! Badly want an IOC container. This
+ // should be configured, not hardcoded
+ return MetadataCacheFs.getCache( new File( localRepositoryRoot, METADATA_CACHE_DIR ) );
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ 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;
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ /**
+ * very important call - makes VRR sort out all the information it collected so far
+ */
+ public void init()
+ throws RepositoryException
+ {
+ if ( _initialized )
+ return;
+
+ _repositoryReaders = new RepositoryReader[_repositories.size()];
+
+ // move local repo's upfront - they are faster!
+ int i = 0;
+ for ( Repository r : _repositories )
+ {
+ if ( !r.isLocal() || !r.isReadable() )
+ continue;
+
+ RepositoryReader rr = r.getReader();
+
+ rr.setMetadataReader( this );
+
+ _repositoryReaders[i++] = rr;
+
+ if ( r.isWriteable() )
{
- keyVersionRange = VersionRangeFactory.create( key.getVersion() );
+ // we select the first writable repo in the list
+ if ( _localRepository != null )
+ continue;
+
+ _localRepository = (LocalRepository) r.getReader().getRepository();
+ _localRepositoryWriter = _localRepository.getWriter();
+
+ if ( _mdCache == null )
+ {
+ try
+ {
+ _mdCache = getCache( _localRepository.getDirectory() );
+
+ if ( _eventManager != null )
+ _mdCache.setEventManager( _eventManager );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryException( e.getMessage() );
+ }
+ }
}
- catch( VersionException e )
+ }
+
+ // remote ones
+ for ( Repository r : _repositories )
+ {
+ if ( r.isLocal() || !r.isReadable() )
+ continue;
+
+ RepositoryReader rr = r.getReader();
+
+ if ( _mdCache != null )
+ rr.setMetadataCache( _mdCache );
+
+ rr.setMetadataReader( this );
+
+ _repositoryReaders[i++] = rr;
+ }
+ _initialized = true;
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
+ throws IllegalArgumentException, RepositoryException
+ {
+ if ( query == null )
+ throw new IllegalArgumentException( "null bmd supplied" );
+
+ init();
+
+ GenericEvent event = null;
+
+ try
+ {
+
+ if ( _eventManager != null )
+ event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_VERSIONS );
+
+ ArtifactBasicResults res = null;
+ ArtifactListProcessor tp = _processors == null ? null : _processors.get( ArtifactListProcessor.FUNCTION_TP );
+
+ GenericEvent eventRead = null;
+
+ List<ArtifactBasicMetadata> qList = new ArrayList<ArtifactBasicMetadata>( query.size() );
+ qList.addAll( query );
+
+ for ( RepositoryReader rr : _repositoryReaders )
+ try
+ {
+ // all found
+ if ( qList.isEmpty() )
+ break;
+
+ if ( _eventManager != null )
+ eventRead =
+ new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_VERSIONS_FROM_REPO,
+ rr.getRepository().getId() );
+
+ ArtifactBasicResults repoRes = rr.readVersions( qList );
+
+ if( repoRes != null && repoRes.hasExceptions() )
+ {
+ if( _log.isWarnEnabled() )
+ _log.warn( repoRes.getExceptions().toString() );
+ }
+
+ 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 ( Util.isEmpty( rorRes ) )
+ {
+ eventRead.setResult( "none found" );
+ continue;
+ }
+
+ for ( ArtifactBasicMetadata bmd : rorRes )
+ bmd.setTracker( rr );
+
+ if ( res == null )
+ res = new ArtifactBasicResults( key, rorRes );
+ else
+ res.add( key, rorRes );
+
+ String keyVersion = key.getVersion();
+ VersionRange keyVersionRange = null;
+ try
+ {
+ keyVersionRange = VersionRangeFactory.create( key.getVersion() );
+ }
+ catch ( VersionException e )
+ {
+ throw new RepositoryException( _lang.getMessage( "query.element.bad.version",
+ key.toString(), e.getMessage() ) );
+ }
+
+ if ( keyVersionRange.isSingleton() )
+ {
+ Quality keyQuality = new Quality( keyVersion );
+ if ( keyQuality.compareTo( Quality.RELEASE_QUALITY ) == 0 )
+ // fixed release is found - no more scanning
+ qList.remove( key );
+ }
+ }
+ }
+
+ if ( _eventManager != null )
+ eventRead.setResult( "repo done" );
+ }
+ finally
+ {
+ if ( _eventManager != null )
+ {
+ eventRead.stop();
+ _eventManager.fireEvent( eventRead );
+ }
+ }
+
+ return res;
+ }
+ finally
+ {
+ if ( _eventManager != null )
{
- throw new RepositoryException( _lang.getMessage( "query.element.bad.version", key.toString(), e.getMessage() ) );
+ event.stop();
+ _eventManager.fireEvent( event );
}
-
- if( keyVersionRange.isSingleton() )
- {
- Quality keyQuality = new Quality(keyVersion);
- if( keyQuality.compareTo( Quality.RELEASE_QUALITY ) == 0 )
- // fixed release is found - no more scanning
- qList.remove( key );
- }
- }
- }
-
- if( _eventManager!= null )
- eventRead.setResult( "repo done" );
- }
- finally
- {
- if( _eventManager != null )
- {
- eventRead.stop();
- _eventManager.fireEvent( eventRead );
- }
- }
-
- return res;
- }
- finally
- {
- if( _eventManager != null )
- {
- event.stop();
- _eventManager.fireEvent( event );
- }
- }
- }
- //----------------------------------------------------------------------------------------------------------------------------
- public ArtifactMetadata readDependencies( ArtifactBasicMetadata bmd )
- throws IllegalArgumentException, RepositoryException
- {
- if( bmd == null )
- throw new IllegalArgumentException("null bmd supplied");
-
- GenericEvent event = null;
-
- try
- {
-
- if( _eventManager != null )
- event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_DEPENDENCIES, bmd.toString() );
-
- init();
-
- List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>(1);
- query.add( bmd );
-
- ArtifactMetadata md = new ArtifactMetadata( bmd );
-
- RepositoryReader [] repos = _repositoryReaders;
-
- Object tracker = bmd.getTracker();
-
- // do we know where this metadata came from ?
- if( tracker != null && RepositoryReader.class.isAssignableFrom( tracker.getClass() ) )
- {
- repos = new RepositoryReader [] { (RepositoryReader)tracker };
- }
-
- GenericEvent eventRead = null;
-
- for( RepositoryReader rr : repos )
- try
- {
-
- if( _eventManager != null )
- eventRead = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_DEPENDENCIES_FROM_REPO, rr.getRepository().getId() );
-
- ArtifactBasicResults res = rr.readDependencies( query );
-
- if( res != null && res.hasResults( bmd ) )
- {
- md.setDependencies( res.getResult( bmd ) );
- md.setTracker( rr );
-
- if( _eventManager != null )
- eventRead.setInfo( eventRead.getInfo()+", found: "+md.getDependencies() );
-
- return md;
- }
- }
- finally
- {
- if( _eventManager != null )
- {
- eventRead.stop();
- _eventManager.fireEvent( eventRead );
- }
- }
-
- if( _eventManager != null )
- event.setResult( "not found" );
-
- return md;
- }
- finally
- {
- if( _eventManager != null )
- {
- event.stop();
- _eventManager.fireEvent( event );
- }
- }
- }
- //----------------------------------------------------------------------------------------------------------------------------
- /**
- * split query into repository buckets
- */
- private Map< RepositoryReader, List<ArtifactBasicMetadata> > sortByRepo( Collection<? extends ArtifactBasicMetadata> query )
- {
- HashMap< RepositoryReader, List<ArtifactBasicMetadata> > res = null;
-
- List<ArtifactBasicMetadata> rejects = null;
-
- for( ArtifactBasicMetadata bmd : query )
- {
- Object tracker = bmd.getTracker();
-
- // do we know where this metadata came from ?
- if( tracker != null && RepositoryReader.class.isAssignableFrom( tracker.getClass() ) )
- {
- RepositoryReader rr = (RepositoryReader)tracker;
-
- if( res == null )
- {
- res = new HashMap< RepositoryReader, List<ArtifactBasicMetadata> >();
- }
-
- List<ArtifactBasicMetadata> rl = res.get( rr );
-
- if( rl == null )
- {
- rl = new ArrayList<ArtifactBasicMetadata>();
- res.put( rr, rl );
- }
-
- rl.add( bmd );
-
- }
- else
- {
- if( rejects == null )
- rejects = new ArrayList<ArtifactBasicMetadata>();
-
- rejects.add( bmd );
- }
- }
-
- if( rejects != null )
- {
- if( res == null )
- res = new HashMap< RepositoryReader, List<ArtifactBasicMetadata> >();
-
- res.put( RepositoryReader.NULL_READER, rejects );
- }
-
- return res;
- }
- //----------------------------------------------------------------------------------------------------------------------------
- public ArtifactResults readArtifacts( Collection<? extends ArtifactBasicMetadata> query )
- throws RepositoryException
- {
- GenericEvent event = null;
-
- try
- {
- ArtifactResults res = null;
-
- if( _eventManager != null )
- event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_ARTIFACTS, "" );
-
- if( Util.isEmpty( query ) )
- return res;
-
- Map< RepositoryReader, List<ArtifactBasicMetadata> > buckets = sortByRepo( query );
-
- List<ArtifactBasicMetadata> rejects = buckets == null ? null : buckets.get( RepositoryReader.NULL_READER );
-
- if( buckets == null )
- throw new RepositoryException( _lang.getMessage( "internal.error.sorting.query", query.toString() ) );
-
- init();
-
- // first read repository-qualified Artifacts
- for( RepositoryReader rr : buckets.keySet() )
- {
- if( RepositoryReader.NULL_READER.equals( rr ) )
- continue;
-
- String repoId = rr.getRepository().getId();
-
- GenericEvent eventRead = null;
-
+ }
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public ArtifactMetadata readDependencies( ArtifactBasicMetadata bmd )
+ throws IllegalArgumentException, RepositoryException
+ {
+ if ( bmd == null )
+ throw new IllegalArgumentException( "null bmd supplied" );
+
+ GenericEvent event = null;
+
try
{
- if( _eventManager != null )
- eventRead = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED, repoId );
-
- List<ArtifactBasicMetadata> rrQuery = buckets.get( rr );
-
- ArtifactResults rrRes = rr.readArtifacts( rrQuery );
-
- if( rrRes.hasExceptions() )
- throw new RepositoryException( _lang.getMessage( "error.reading.existing.artifact", rrRes.getExceptions().toString(), rr.getRepository().getId() ) );
-
- if( rrRes.hasResults() )
- for( ArtifactBasicMetadata bm : rrRes.getResults().keySet() )
- {
- List<Artifact> al = rrRes.getResults( bm );
-
- if( res == null )
- res = new ArtifactResults();
-
- res.addAll( bm, al );
-
- // don't write local artifacts back to the same repo
- if( _localRepository != null && repoId.equals( _localRepository.getId() ) )
- continue;
-
- if( _localRepositoryWriter != null )
- _localRepositoryWriter.writeArtifacts( al );
+
+ if ( _eventManager != null )
+ event =
+ new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_DEPENDENCIES, bmd.toString() );
+
+ init();
+
+ List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>( 1 );
+ query.add( bmd );
+
+ ArtifactMetadata md = new ArtifactMetadata( bmd );
+
+ RepositoryReader[] repos = _repositoryReaders;
+
+ Object tracker = bmd.getTracker();
+
+ // do we know where this metadata came from ?
+ if ( tracker != null && RepositoryReader.class.isAssignableFrom( tracker.getClass() ) )
+ {
+ repos = new RepositoryReader[] { (RepositoryReader) tracker };
}
+
+ GenericEvent eventRead = null;
+
+ for ( RepositoryReader rr : repos )
+ try
+ {
+
+ if ( _eventManager != null )
+ eventRead =
+ new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_DEPENDENCIES_FROM_REPO,
+ rr.getRepository().getId() );
+
+ ArtifactBasicResults res = rr.readDependencies( query );
+
+ if ( res != null && res.hasResults( bmd ) )
+ {
+ md.setDependencies( res.getResult( bmd ) );
+ md.setTracker( rr );
+
+ if ( _eventManager != null )
+ eventRead.setInfo( eventRead.getInfo() + ", found: " + md.getDependencies() );
+
+ return md;
+ }
+ }
+ finally
+ {
+ if ( _eventManager != null )
+ {
+ eventRead.stop();
+ _eventManager.fireEvent( eventRead );
+ }
+ }
+
+ if ( _eventManager != null )
+ event.setResult( "not found" );
+
+ return md;
}
finally
{
- if( _eventManager != null )
- {
- eventRead.stop();
- _eventManager.fireEvent( eventRead );
- }
- }
- }
-
- // then search all repos for unqualified Artifacts
- if( !Util.isEmpty( rejects ) )
- {
- for( RepositoryReader rr : _repositoryReaders )
- {
- if( rejects.isEmpty() )
- break;
-
- String repoId = rr.getRepository().getId();
-
- GenericEvent eventRead = null;
-
- try
- {
- if( _eventManager != null )
- eventRead = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED, repoId );
-
- ArtifactResults rrRes = rr.readArtifacts( rejects );
-
- if( rrRes.hasResults() )
- for( ArtifactBasicMetadata bm : rrRes.getResults().keySet() )
- {
- List<Artifact> al = rrRes.getResults( bm );
-
- if( res == null )
- res = new ArtifactResults();
-
- res.addAll( bm, al );
-
- rejects.remove( bm );
-
- // don't write local artifacts back to the same repo
- if( _localRepository != null && repoId.equals( _localRepository.getId() ) )
- continue;
-
- if( _localRepositoryWriter != null )
- _localRepositoryWriter.writeArtifacts( al );
-
- }
- }
- finally
- {
- if( _eventManager != null )
- {
- eventRead.stop();
- _eventManager.fireEvent( eventRead );
- }
- }
- }
- }
-
- return res;
- }
- finally
- {
- if( _eventManager != null )
- {
- event.stop();
- _eventManager.fireEvent( event );
- }
- }
- }
- //----------------------------------------------------------------------------------------------------------------------------
- // MetadataReader implementation
- //----------------------------------------------------------------------------------------------------------------------------
- public byte[] readMetadata( ArtifactBasicMetadata bmd )
- throws MetadataReaderException
- {
- if( _log.isDebugEnabled() )
- _log.debug( "Asking for pom: "+bmd);
-
- return readRawData( bmd, "", "pom" );
- }
- //----------------------------------------------------------------------------------------------------------------------------
- // MetadataReader implementation
- //----------------------------------------------------------------------------------------------------------------------------
- public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
- throws MetadataReaderException
- {
-
- GenericEvent event = null;
- String eventTag = null;
-
- if( _log.isDebugEnabled() )
- _log.debug( "request for "+bmd+", classifier="+classifier+", type="+type );
-
- if( bmd == null )
- throw new IllegalArgumentException("null bmd supplied");
-
- try
- {
- if( _eventManager!= null )
- {
- eventTag = bmd.toString()
- + (Util.isEmpty( classifier )?"":", classifier="+classifier)
- + (Util.isEmpty( type )?"":", type="+type)
- ;
- event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_RAW, eventTag );
- }
-
- ArtifactBasicMetadata bmdQuery = bmd;
-
- try
- {
- init();
- }
- catch( RepositoryException e )
- {
- throw new MetadataReaderException(e);
- }
-
- byte [] res = null;
- Quality vq = new Quality( bmd.getVersion() );
-
- if( _log.isDebugEnabled() )
- _log.debug( "quality calculated as "+vq.getQuality() == null ? "null" :vq.getQuality().name() );
-
- if( Quality.SNAPSHOT_QUALITY.equals( vq ) )
- {
- List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>(1);
- query.add( bmd );
-
- try
+ if ( _eventManager != null )
+ {
+ event.stop();
+ _eventManager.fireEvent( event );
+ }
+ }
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ /**
+ * split query into repository buckets
+ */
+ private Map<RepositoryReader, List<ArtifactBasicMetadata>> sortByRepo( Collection<? extends ArtifactBasicMetadata> query )
+ {
+ HashMap<RepositoryReader, List<ArtifactBasicMetadata>> res = null;
+
+ List<ArtifactBasicMetadata> rejects = null;
+
+ for ( ArtifactBasicMetadata bmd : query )
+ {
+ Object tracker = bmd.getTracker();
+
+ // do we know where this metadata came from ?
+ if ( tracker != null && RepositoryReader.class.isAssignableFrom( tracker.getClass() ) )
+ {
+ RepositoryReader rr = (RepositoryReader) tracker;
+
+ if ( res == null )
+ {
+ res = new HashMap<RepositoryReader, List<ArtifactBasicMetadata>>();
+ }
+
+ List<ArtifactBasicMetadata> rl = res.get( rr );
+
+ if ( rl == null )
+ {
+ rl = new ArrayList<ArtifactBasicMetadata>();
+ res.put( rr, rl );
+ }
+
+ rl.add( bmd );
+
+ }
+ else
+ {
+ if ( rejects == null )
+ rejects = new ArrayList<ArtifactBasicMetadata>();
+
+ rejects.add( bmd );
+ }
+ }
+
+ if ( rejects != null )
{
- ArtifactBasicResults vRes = readVersions( query );
- if( Util.isEmpty( vRes ) )
- {
- if( _log.isDebugEnabled() )
- _log.debug( "no snapshots found - throw exception" );
-
- throw new MetadataReaderException( _lang.getMessage( "no.snapshots", bmd.toString(), classifier, type ) );
- }
-
-
- if( vRes.hasResults( bmd ) )
- {
- List<ArtifactBasicMetadata> versions = vRes.getResult( bmd );
-
- TreeSet<ArtifactBasicMetadata> snapshots = new TreeSet<ArtifactBasicMetadata>( new MetadataVersionComparator() );
- snapshots.addAll( versions );
-
- bmdQuery = snapshots.last();
- }
- else
- {
- if( _log.isDebugEnabled() )
- _log.debug( "no snapshots found - throw exception" );
-
- throw new MetadataReaderException( _lang.getMessage( "no.snapshots", bmd.toString(), classifier, type ) );
- }
- }
- catch( Exception e )
- {
- throw new MetadataReaderException(e);
- }
- }
-
- for( RepositoryReader rr : _repositoryReaders )
- {
- GenericEvent eventRead = null;
-
+ if ( res == null )
+ res = new HashMap<RepositoryReader, List<ArtifactBasicMetadata>>();
+
+ res.put( RepositoryReader.NULL_READER, rejects );
+ }
+
+ return res;
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public ArtifactResults readArtifacts( Collection<? extends ArtifactBasicMetadata> query )
+ throws RepositoryException
+ {
+ GenericEvent event = null;
+
try
{
- if( _eventManager != null )
- eventRead = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_RAW_FROM_REPO, rr.getRepository().getId()+": "+eventTag );
-
- res = rr.readRawData( bmdQuery, classifier, type );
- if( res != null )
- {
- if( _log.isDebugEnabled() )
- _log.debug( bmdQuery+" found in "+rr.getRepository().getServer() );
-
- if( _eventManager != null )
- eventRead.setInfo( eventRead.getInfo() );
-
+ ArtifactResults res = null;
+
+ if ( _eventManager != null )
+ event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_ARTIFACTS, "" );
+
+ if ( Util.isEmpty( query ) )
+ return res;
+
+ Map<RepositoryReader, List<ArtifactBasicMetadata>> buckets = sortByRepo( query );
+
+ List<ArtifactBasicMetadata> rejects = buckets == null ? null : buckets.get( RepositoryReader.NULL_READER );
+
+ if ( buckets == null )
+ throw new RepositoryException( _lang.getMessage( "internal.error.sorting.query", query.toString() ) );
+
+ init();
+
+ res = new ArtifactResults();
+
+ // first read repository-qualified Artifacts
+ for ( RepositoryReader rr : buckets.keySet() )
+ {
+ if ( RepositoryReader.NULL_READER.equals( rr ) )
+ continue;
+
+ String repoId = rr.getRepository().getId();
+
+ GenericEvent eventRead = null;
+
+ try
+ {
+ if ( _eventManager != null )
+ eventRead =
+ new GenericEvent( EventTypeEnum.virtualRepositoryReader,
+ EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED, repoId );
+
+ List<ArtifactBasicMetadata> rrQuery = buckets.get( rr );
+
+ ArtifactResults rrRes = rr.readArtifacts( rrQuery );
+
+ if ( rrRes.hasExceptions() )
+ throw new RepositoryException( _lang.getMessage( "error.reading.existing.artifact",
+ rrRes.getExceptions().toString(),
+ rr.getRepository().getId() ) );
+
+ if ( rrRes.hasResults() )
+ for ( ArtifactBasicMetadata bm : rrRes.getResults().keySet() )
+ {
+ List<Artifact> al = rrRes.getResults( bm );
+
+ res.addAll( bm, al );
+
+ // don't write local artifacts back to the same repo
+ if ( _localRepository != null && repoId.equals( _localRepository.getId() ) )
+ continue;
+
+ if ( _localRepositoryWriter != null )
+ _localRepositoryWriter.writeArtifacts( al );
+ }
+ }
+ finally
+ {
+ if ( _eventManager != null )
+ {
+ eventRead.stop();
+ _eventManager.fireEvent( eventRead );
+ }
+ }
+ }
+
+ // then search all repos for unqualified Artifacts
+ if ( !Util.isEmpty( rejects ) )
+ {
+ for ( RepositoryReader rr : _repositoryReaders )
+ {
+ if ( rejects.isEmpty() )
+ break;
+
+ String repoId = rr.getRepository().getId();
+
+ GenericEvent eventRead = null;
+
+ try
+ {
+ if ( _eventManager != null )
+ eventRead =
+ new GenericEvent( EventTypeEnum.virtualRepositoryReader,
+ EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED, repoId );
+
+ ArtifactResults rrRes = rr.readArtifacts( rejects );
+
+ if ( rrRes.hasExceptions() )
+ {
+ res.addError( rrRes );
+ }
+ else if ( rrRes.hasResults() )
+ {
+ for ( ArtifactBasicMetadata bm : rrRes.getResults().keySet() )
+ {
+ List<Artifact> al = rrRes.getResults( bm );
+
+ res.addAll( bm, al );
+
+ rejects.remove( bm );
+
+ // don't write local artifacts back to the same repo
+ if ( _localRepository != null && repoId.equals( _localRepository.getId() ) )
+ continue;
+
+ if ( _localRepositoryWriter != null )
+ _localRepositoryWriter.writeArtifacts( al );
+
+ }
+ }
+ }
+ finally
+ {
+ if ( _eventManager != null )
+ {
+ eventRead.stop();
+ _eventManager.fireEvent( eventRead );
+ }
+ }
+ }
+ }
+
return res;
- }
-
- if( _eventManager != null )
- eventRead.setResult( "not found" );
}
finally
{
- if( _eventManager != null )
- {
- eventRead.stop();
- _eventManager.fireEvent( eventRead );
- }
- }
- }
-
- if( _log.isDebugEnabled() )
- _log.debug( "no data found, returning null" );
-
- return null;
- }
- finally
- {
- if( _eventManager != null )
- {
- event.stop();
- _eventManager.fireEvent( event );
- }
- }
- }
- //----------------------------------------------------------------------------------------------------------------------------
- public void register( MercuryEventListener listener )
- {
- if( _eventManager == null )
- _eventManager = new EventManager();
-
- _eventManager.register( listener );
- }
-
- public void setEventManager( EventManager eventManager )
- {
- _eventManager = eventManager;
- }
-
- public void unRegister( MercuryEventListener listener )
- {
- if( _eventManager != null )
- _eventManager.unRegister( listener );
- }
- //----------------------------------------------------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------------------------------------------------
+ if ( _eventManager != null )
+ {
+ event.stop();
+ _eventManager.fireEvent( event );
+ }
+ }
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ // MetadataReader implementation
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public byte[] readMetadata( ArtifactBasicMetadata bmd )
+ throws MetadataReaderException
+ {
+ if ( _log.isDebugEnabled() )
+ _log.debug( "Asking for pom: " + bmd );
+
+ return readRawData( bmd, "", "pom" );
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ // MetadataReader implementation
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+ throws MetadataReaderException
+ {
+
+ GenericEvent event = null;
+ String eventTag = null;
+
+ if ( _log.isDebugEnabled() )
+ _log.debug( "request for " + bmd + ", classifier=" + classifier + ", type=" + type );
+
+ if ( bmd == null )
+ throw new IllegalArgumentException( "null bmd supplied" );
+
+ try
+ {
+ if ( _eventManager != null )
+ {
+ eventTag =
+ bmd.toString() + ( Util.isEmpty( classifier ) ? "" : ", classifier=" + classifier )
+ + ( Util.isEmpty( type ) ? "" : ", type=" + type );
+ event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_RAW, eventTag );
+ }
+
+ ArtifactBasicMetadata bmdQuery = bmd;
+
+ try
+ {
+ init();
+ }
+ catch ( RepositoryException e )
+ {
+ throw new MetadataReaderException( e );
+ }
+
+ byte[] res = null;
+ Quality vq = new Quality( bmd.getVersion() );
+
+ if ( _log.isDebugEnabled() )
+ _log.debug( "quality calculated as " + vq.getQuality() == null ? "null" : vq.getQuality().name() );
+
+ if ( Quality.SNAPSHOT_QUALITY.equals( vq ) )
+ {
+ List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>( 1 );
+ query.add( bmd );
+
+ try
+ {
+ ArtifactBasicResults vRes = readVersions( query );
+ if ( Util.isEmpty( vRes ) )
+ {
+ if ( _log.isDebugEnabled() )
+ _log.debug( "no snapshots found - throw exception" );
+
+ throw new MetadataReaderException( _lang.getMessage( "no.snapshots", bmd.toString(),
+ classifier, type ) );
+ }
+
+ if ( vRes.hasResults( bmd ) )
+ {
+ List<ArtifactBasicMetadata> versions = vRes.getResult( bmd );
+
+ TreeSet<ArtifactBasicMetadata> snapshots =
+ new TreeSet<ArtifactBasicMetadata>( new MetadataVersionComparator() );
+ snapshots.addAll( versions );
+
+ bmdQuery = snapshots.last();
+ }
+ else
+ {
+ if ( _log.isDebugEnabled() )
+ _log.debug( "no snapshots found - throw exception" );
+
+ throw new MetadataReaderException( _lang.getMessage( "no.snapshots", bmd.toString(),
+ classifier, type ) );
+ }
+ }
+ catch ( Exception e )
+ {
+ throw new MetadataReaderException( e );
+ }
+ }
+
+ for ( RepositoryReader rr : _repositoryReaders )
+ {
+ GenericEvent eventRead = null;
+
+ try
+ {
+ if ( _eventManager != null )
+ eventRead =
+ new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_RAW_FROM_REPO,
+ rr.getRepository().getId() + ": " + eventTag );
+
+ res = rr.readRawData( bmdQuery, classifier, type );
+ if ( res != null )
+ {
+ if ( _log.isDebugEnabled() )
+ _log.debug( bmdQuery + " found in " + rr.getRepository().getServer() );
+
+ if ( _eventManager != null )
+ eventRead.setInfo( eventRead.getInfo() );
+
+ return res;
+ }
+
+ if ( _eventManager != null )
+ eventRead.setResult( "not found" );
+ }
+ finally
+ {
+ if ( _eventManager != null )
+ {
+ eventRead.stop();
+ _eventManager.fireEvent( eventRead );
+ }
+ }
+ }
+
+ if ( _log.isDebugEnabled() )
+ _log.debug( "no data found, returning null" );
+
+ return null;
+ }
+ finally
+ {
+ if ( _eventManager != null )
+ {
+ event.stop();
+ _eventManager.fireEvent( event );
+ }
+ }
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------------------
+ public void register( MercuryEventListener listener )
+ {
+ if ( _eventManager == null )
+ _eventManager = new EventManager();
+
+ _eventManager.register( listener );
+ }
+
+ public void setEventManager( EventManager eventManager )
+ {
+ _eventManager = eventManager;
+ }
+
+ public void unRegister( MercuryEventListener listener )
+ {
+ if ( _eventManager != null )
+ _eventManager.unRegister( listener );
+ }
+ // ----------------------------------------------------------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------------------------------------------------------
}
Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java?rev=732592&r1=732591&r2=732592&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java Wed Jan 7 18:31:13 2009
@@ -18,11 +18,13 @@
*/
package org.apache.maven.mercury.util;
+import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -39,6 +41,8 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
@@ -984,6 +988,52 @@
return new FileInputStream( new File(resource) );
}
+ // -----------------------------------------------------
+ public static final void unZip( InputStream zipInputStream, File destDir )
+ throws FileNotFoundException, IOException
+ {
+ ZipInputStream zis = new ZipInputStream( zipInputStream );
+
+ BufferedOutputStream dest = null;
+ ZipEntry entry;
+ while ( ( entry = zis.getNextEntry() ) != null )
+ {
+ File fo = new File( destDir, entry.getName() );
+
+ if( LOG.isDebugEnabled() )
+ LOG.debug( "Extracting: " + fo.getCanonicalPath() );
+
+ int count;
+ byte data[] = new byte[DEFAULT_BUFFER_SIZE];
+
+ // write the files to the disk
+ if ( entry.isDirectory() )
+ {
+ fo.mkdirs();
+ continue;
+ }
+
+ fo.getParentFile().mkdirs();
+
+ FileOutputStream fos = new FileOutputStream( fo );
+
+ dest = new BufferedOutputStream( fos, DEFAULT_BUFFER_SIZE );
+
+ while ( ( count = zis.read( data, 0, DEFAULT_BUFFER_SIZE ) ) != -1 )
+ {
+ dest.write( data, 0, count );
+ }
+
+ dest.flush();
+
+ dest.close();
+ }
+
+ zis.close();
+
+ if( LOG.isDebugEnabled() )
+ LOG.debug( destDir + " - done." );
+ }
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
}
Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java?rev=732592&r1=732591&r2=732592&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java Wed Jan 7 18:31:13 2009
@@ -18,6 +18,7 @@
*/
package org.apache.maven.mercury.util;
+import java.io.File;
import java.util.Collection;
import java.util.Map;
@@ -40,6 +41,11 @@
{
return o == null || o.length() < 1;
}
+
+ public static final boolean isEmpty( File o )
+ {
+ return o == null || !o.exists() || o.length() < 1L;
+ }
public static final boolean isEmpty( Object [] o )
{