You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2008/05/27 07:58:34 UTC

svn commit: r660398 - in /maven/sandbox/trunk/mercury/src: main/java/org/apache/maven/mercury/metadata/ main/java/org/apache/maven/mercury/retrieve/ main/java/org/apache/maven/mercury/spi/http/client/retrieve/ test/java/org/apache/maven/mercury/metadat...

Author: jvanzyl
Date: Mon May 26 22:58:23 2008
New Revision: 660398

URL: http://svn.apache.org/viewvc?rev=660398&view=rev
Log: (empty)

Added:
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java   (with props)
Modified:
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/DefaultMetadataResolver.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolution.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataSource.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/DefaultArtifactRetriever.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/ResolutionResult.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetrievalResponse.java
    maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
    maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/DefaultMetadataResolver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/DefaultMetadataResolver.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/DefaultMetadataResolver.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/DefaultMetadataResolver.java Mon May 26 22:58:23 2008
@@ -62,7 +62,8 @@
 
             ResolutionResult result = retriever.retrieve( request );
 
-            // Here we just need to deal with basic retrieval problems.
+            // We need a mode that will find all the errors so that we can see where metadata cannot be retrieved.
+            
             if ( result.hasExceptions() )
             {
                 pomArtifact.setResolved( false );

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolution.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolution.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolution.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataResolution.java Mon May 26 22:58:23 2008
@@ -2,12 +2,12 @@
 
 import java.util.Collection;
 
+import org.apache.maven.mercury.repository.RemoteRepository;
 import org.apache.maven.mercury.repository.Repository;
 
-/**
+/*
  * 
  * @author Jason van Zyl
- *  
  */
 public class MetadataResolution
 {
@@ -15,40 +15,36 @@
     private ArtifactMetadata artifactMetadata;
 
     /** repositories, added by this POM  */
-    private Collection<Repository> metadataRepositories;
-    //-------------------------------------------------------------------
+    private Collection<RemoteRepository> metadataRepositories;
+
     public MetadataResolution( ArtifactMetadata artifactMetadata )
     {
         this.artifactMetadata = artifactMetadata;
     }
-    //-------------------------------------------------------------------
-    public MetadataResolution( ArtifactMetadata artifactMetadata,
-    		Collection<Repository> metadataRepositories )
+
+    public MetadataResolution( ArtifactMetadata artifactMetadata, Collection<RemoteRepository> metadataRepositories )
+    {
+        this( artifactMetadata );
+        this.metadataRepositories = metadataRepositories;
+    }
+
+    public Collection<RemoteRepository> getMetadataRepositories()
+    {
+        return metadataRepositories;
+    }
+
+    public void setMetadataRepositories( Collection<RemoteRepository> metadataRepositories )
     {
-    	this( artifactMetadata );
         this.metadataRepositories = metadataRepositories;
     }
-    //-------------------------------------------------------------------
-	public Collection<Repository> getMetadataRepositories()
-	{
-		return metadataRepositories;
-	}
-
-	public void setMetadataRepositories(
-			Collection<Repository> metadataRepositories)
-	{
-		this.metadataRepositories = metadataRepositories;
-	}
-    //-------------------------------------------------------------------
-	public ArtifactMetadata getArtifactMetadata()
-	{
-		return artifactMetadata;
-	}
-
-	public void setArtifactMetadata(ArtifactMetadata artifactMetadata)
-	{
-		this.artifactMetadata = artifactMetadata;
-	}
-    //-------------------------------------------------------------------
-    //-------------------------------------------------------------------
+
+    public ArtifactMetadata getArtifactMetadata()
+    {
+        return artifactMetadata;
+    }
+
+    public void setArtifactMetadata( ArtifactMetadata artifactMetadata )
+    {
+        this.artifactMetadata = artifactMetadata;
+    }
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataSource.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataSource.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataSource.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataSource.java Mon May 26 22:58:23 2008
@@ -19,12 +19,10 @@
  * under the License.
  */
 
-import java.util.List;
 import java.util.Set;
 
 import org.apache.maven.mercury.repository.LocalRepository;
 import org.apache.maven.mercury.repository.RemoteRepository;
-import org.apache.maven.mercury.repository.Repository;
 
 /**
  * Provides some metadata operations, like querying the remote repository for a list of versions available for an
@@ -37,7 +35,17 @@
 {
     String ROLE = MetadataSource.class.getName();
 
-    MetadataResolution retrieve( ArtifactMetadata artifact,
+    /**
+     * You would only ever need the remote repositories if the representation you were parsing contained repositories that
+     * you wanted added to the search list of remote repositories.
+     * 
+     * @param metadata
+     * @param localRepository
+     * @param remoteRepositories
+     * @return
+     * @throws MetadataRetrievalException
+     */
+    MetadataResolution retrieve( ArtifactMetadata metadata,
                                  LocalRepository localRepository,
                                  Set<RemoteRepository> remoteRepositories )
         throws MetadataRetrievalException;

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/DefaultArtifactRetriever.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/DefaultArtifactRetriever.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/DefaultArtifactRetriever.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/DefaultArtifactRetriever.java Mon May 26 22:58:23 2008
@@ -1,29 +1,23 @@
 package org.apache.maven.mercury.retrieve;
 
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
  */
 
 import java.io.File;
 
 import org.apache.maven.mercury.repository.RemoteRepository;
-import org.apache.maven.mercury.repository.layout.DefaultRepositoryLayout;
-import org.apache.maven.mercury.repository.layout.RepositoryLayout;
 import org.apache.maven.mercury.spi.http.client.Binding;
 import org.apache.maven.mercury.spi.http.client.MercuryException;
 import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetrievalRequest;
@@ -31,21 +25,20 @@
 import org.apache.maven.mercury.spi.http.client.retrieve.RetrievalResponse;
 import org.apache.maven.mercury.spi.http.client.retrieve.Retriever;
 
-/**
+/*
  * @author Jason van Zyl
+ * 
  * @plexus.component
  */
 public class DefaultArtifactRetriever
     implements ArtifactRetriever
 {
-    RepositoryLayout layout = new DefaultRepositoryLayout();
-
     public ResolutionResult retrieve( ResolutionRequest request )
     {
         ResolutionResult result = new ResolutionResult();
-        
+
         Retriever retriever;
-                
+
         try
         {
             retriever = new DefaultRetriever();
@@ -53,28 +46,42 @@
         catch ( MercuryException e )
         {
             result.addException( e );
-            
+
             return result;
-        }                            
-        
+        }
+
         for ( RemoteRepository remoteRepository : request.getRemoteRepostories() )
         {
-            DefaultRetrievalRequest rr = new DefaultRetrievalRequest();                
-            String remoteUrl = remoteRepository.getUrl() + "/" + layout.pathOf( request.getArtifact() );            
-            File localFile = new File( request.getLocalRepository().getDirectory(), layout.pathOf( request.getArtifact() ) );            
+            DefaultRetrievalRequest rr = new DefaultRetrievalRequest();
+            String remoteUrl = remoteRepository.getUrl() + "/" + remoteRepository.pathOf( request.getArtifact() );
+            File localFile = new File( request.getLocalRepository().getDirectory(), request.getLocalRepository().pathOf( request.getArtifact() ) );
             Binding binding = new Binding( remoteUrl, localFile, true );
             rr.addBinding( binding );
             RetrievalResponse response = retriever.retrieve( rr );
-            
+
             // Not found versus an error. We need to know for each repository exactly what happened.
-            
+
             if ( !response.hasExceptions() )
             {
-                // What do I want to send back to make the graph trackable
+                // Specify the repository where the artifact was actually found.
+                result.setRemoteRepository( remoteRepository );
+
+                // Would be also good to collect some metrics about how long it took to retrieve.
+                // result.setRetrievalTime( response.getRetrievalTime() );    
+
                 return result;
-            }            
+            }
+            else
+            {
+                for( Exception exception: response.getExceptions() )
+                {                    
+                    System.out.println(exception);
+                }
+            }
+                        
+            // We have to know when we didn't get anything.
         }
-                
+        
         return result;
     }
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/ResolutionResult.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/ResolutionResult.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/ResolutionResult.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/retrieve/ResolutionResult.java Mon May 26 22:58:23 2008
@@ -39,6 +39,8 @@
 
     private List<Exception> exceptions;
 
+    private RemoteRepository remoteRepository;
+    
     public Artifact getArtifact()
     {
         return artifact;
@@ -83,4 +85,17 @@
     {
         return exceptions != null;
     }
+    
+    // The repository where we found the artifact. We are going to need some additional information here to support
+    // information provided by repository managers.
+    
+    public RemoteRepository getRemoteRepository()
+    {
+        return remoteRepository;
+    }
+
+    public void setRemoteRepository( RemoteRepository remoteRepository )
+    {
+        this.remoteRepository = remoteRepository;
+    }    
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetrievalResponse.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetrievalResponse.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetrievalResponse.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetrievalResponse.java Mon May 26 22:58:23 2008
@@ -50,7 +50,7 @@
     
     public boolean hasExceptions()
     {
-        return _exceptions != null;
+        return _exceptions.size() > 0;
     }
 
 }

Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java Mon May 26 22:58:23 2008
@@ -67,7 +67,6 @@
 
     public abstract void onError( MercuryException exception );
 
-
     /**
      * Constructor
      *
@@ -85,8 +84,15 @@
         _validators = validators;
         _checksumUrl = _binding.getRemoteUrl() + __DIGEST_SUFFIX;
         _tempFile = new File( _binding.getLocalFile().getParentFile(),
-            __PREFIX + _binding.getLocalFile().getName() + __TEMP_SUFFIX );
+            __PREFIX + _binding.getLocalFile().getName() + __TEMP_SUFFIX );        
         _tempFile.deleteOnExit();
+        
+        // Create the directory if it doesn't exist
+        if ( !_tempFile.getParentFile().exists() )
+        {
+            _tempFile.getParentFile().mkdirs();
+        }
+        
         if ( _tempFile.exists() )
         {
             onError( new MercuryException( binding, "File exists " + _tempFile.getAbsolutePath() ) );

Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java?rev=660398&r1=660397&r2=660398&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/MetadataResolverTest.java Mon May 26 22:58:23 2008
@@ -10,45 +10,48 @@
 import org.apache.maven.mercury.repository.DefaultRemoteRepository;
 import org.apache.maven.mercury.repository.LocalRepository;
 import org.apache.maven.mercury.repository.RemoteRepository;
-import org.apache.maven.mercury.repository.layout.DefaultRepositoryLayout;
 import org.apache.maven.mercury.repository.layout.RepositoryLayout;
 import org.apache.maven.mercury.retrieve.DefaultArtifactRetriever;
-import org.apache.maven.mercury.spi.http.server.SimpleTestServer;
+import org.apache.maven.mercury.spi.http.server.HttpTestServer;
 
 public class MetadataResolverTest
     extends TestCase
 {
     protected File localRepositoryDirectory;
-
     protected String remoteRepository;
-
-    protected SimpleTestServer server;
-
+    protected HttpTestServer server;
     protected File workDirectory;
-
-    protected String localPathFragment;
-
     protected String remotePathFragment;
-
     protected String remoteRepositoryHostUrl;
-
+    protected File webserverResourceDirectory;
+    protected File basedir;
+    
     protected void setUp()
         throws Exception
     {
         if ( System.getProperty( "basedir" ) != null )
         {
-            workDirectory = new File( System.getProperty( "basedir" ), "target" );
+            basedir = new File( System.getProperty( "basedir" ) );
+
         }
         else
         {
-            workDirectory = new File( "", "target" );
+            basedir = new File( "" );
         }
 
+        workDirectory = new File( System.getProperty( "basedir" ), "target" );
+        webserverResourceDirectory = new File( basedir, "src/test/resources/repo" );        
         localRepositoryDirectory = new File( workDirectory, "repository" );
-        localPathFragment = "/repo/";
         remotePathFragment = "/repo";
-        remoteRepositoryHostUrl = "http://localhost" + remotePathFragment;
-        server = new SimpleTestServer( localPathFragment, remotePathFragment );
+        server = new HttpTestServer( webserverResourceDirectory, remotePathFragment );
+        server.start();      
+        remoteRepositoryHostUrl = "http://localhost:" + server.getPort() + remotePathFragment;
+    }
+
+    protected void tearDown()
+        throws Exception
+    {
+       server.stop();
     }
 
     public void testMetadataResolver()
@@ -59,8 +62,9 @@
         // maven
         // ivy
         // obr
+        
         MetadataSource source = new SimpleSource();
-        RepositoryLayout layout = new DefaultRepositoryLayout();
+        RepositoryLayout layout = new SimpleLayout();
 
         MetadataResolver metadataResolver = new DefaultMetadataResolver( new DefaultArtifactRetriever(), source );
         ArtifactMetadata metadata = new ArtifactMetadata( "a", "a", "1.0", "foo" );
@@ -70,9 +74,10 @@
 
         MetadataResolutionRequest request = new MetadataResolutionRequest().setQuery( metadata ).setLocalRepository( localRepository ).addRemoteRepository( remoteRepository );
 
-        // Do we do this in memory, in which case the layout?
-
+        // Resolving transitively or not
         MetadataResolutionResult result = metadataResolver.resolve( request );
+        
+        assertNotNull( result.getTree() );
     }
 
     class SimpleSource
@@ -81,7 +86,8 @@
         public MetadataResolution retrieve( ArtifactMetadata artifact, LocalRepository localRepository, Set<RemoteRepository> remoteRepositories )
             throws MetadataRetrievalException
         {
-            // TODO Auto-generated method stub
+            //TODO: This assumes that we have already pulled it down
+
             return null;
         }
 

Added: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java?rev=660398&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java (added)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java Mon May 26 22:58:23 2008
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.mercury.spi.http.server;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.OutputStream;
+import java.net.URL;
+
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.handler.DefaultHandler;
+import org.mortbay.jetty.handler.HandlerCollection;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.util.IO;
+
+public class HttpTestServer
+    extends Server
+{
+    public HttpTestServer( File base, String remotePathFragment )
+        throws Exception
+    {
+        super( 0 );
+
+        System.out.println( base );
+        
+        if ( !base.exists() )
+        {
+            throw new IllegalArgumentException( "Specified base directory does not exist: " + base.getCanonicalPath() );
+        }
+        
+        HandlerCollection handlers = new HandlerCollection();
+        setHandler( handlers );
+
+        Context context = new Context( handlers, remotePathFragment );
+        handlers.addHandler( new DefaultHandler() );
+
+        context.addServlet( DefaultServlet.class, "/" );               
+        context.setResourceBase( base.getCanonicalPath() );
+    }
+
+    public int getPort()
+    {
+        return getConnectors()[0].getLocalPort();
+    }
+}

Propchange: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"