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/28 23:34:52 UTC

svn commit: r680513 - in /maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote: ./ m2/ m2/RemoteRepositoryReaderM2.java

Author: ogusakov
Date: Mon Jul 28 14:34:52 2008
New Revision: 680513

URL: http://svn.apache.org/viewvc?rev=680513&view=rev
Log:
split repository readers into appropriate packages to later move out into projects

Added:
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote/
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote/m2/
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java

Added: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=680513&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (added)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Mon Jul 28 14:34:52 2008
@@ -0,0 +1,211 @@
+package org.apache.maven.mercury.repository.remote.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.ArtifactBasicMetadata;
+import org.apache.maven.mercury.ArtifactMetadata;
+import org.apache.maven.mercury.DefaultArtifact;
+import org.apache.maven.mercury.metadata.version.VersionException;
+import org.apache.maven.mercury.metadata.version.VersionRange;
+import org.apache.maven.mercury.repository.LocalRepository;
+import org.apache.maven.mercury.repository.MetadataProcessingException;
+import org.apache.maven.mercury.repository.MetadataProcessor;
+import org.apache.maven.mercury.repository.MetadataReader;
+import org.apache.maven.mercury.repository.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.mortbay.log.Log;
+
+public class RemoteRepositoryReaderM2
+implements RepositoryReader, MetadataReader
+{
+  private static final org.slf4j.Logger _log = org.slf4j.LoggerFactory.getLogger( RemoteRepositoryReaderM2.class ); 
+  //---------------------------------------------------------------------------------------------------------------
+  LocalRepository _repo;
+  File _repoDir;
+  
+  MetadataProcessor _mdProcessor;
+  //---------------------------------------------------------------------------------------------------------------
+  public RemoteRepositoryReaderM2( 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 void setMetadataProcessor( MetadataProcessor mdProcessor )
+  {
+    this._mdProcessor = mdProcessor;
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  public byte[] readMetadata( ArtifactBasicMetadata bmd )
+  throws MetadataProcessingException
+  {
+    String bmdPath = bmd.getGroupId().replace( '.', '/' )+"/"+bmd.getArtifactId()+"/"+bmd.getVersion();
+    
+    File pomFile = new File( _repoDir, bmdPath+"/"+bmd.getBaseName()+".pom" );
+    
+    if( ! pomFile.exists() )
+      return null;
+    
+    FileInputStream fis = null;
+    
+    try
+    {
+      fis = new FileInputStream( pomFile );
+      int len = (int)pomFile.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 ) {}
+    }
+  }
+  //---------------------------------------------------------------------------------------------------------------
+  //---------------------------------------------------------------------------------------------------------------
+}