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 ) {}
+ }
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ //---------------------------------------------------------------------------------------------------------------
+}