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"