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 =