You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/02/28 20:51:37 UTC
svn commit: r381764 - in /maven/shared/trunk/maven-shared-io: ./
src/main/java/org/apache/maven/shared/io/ src/main/resources/
src/main/resources/META-INF/ src/main/resources/META-INF/plexus/
Author: jdcasey
Date: Tue Feb 28 11:51:36 2006
New Revision: 381764
URL: http://svn.apache.org/viewcvs?rev=381764&view=rev
Log:
Adding download manager that uses wagons to download arbitrary URLs, and removing the dependency on maven-shared-monitor until we can find a good logging impl.
Added:
maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java (with props)
maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java (with props)
maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java (with props)
maven/shared/trunk/maven-shared-io/src/main/resources/
maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/
maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/
maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml (with props)
Modified:
maven/shared/trunk/maven-shared-io/pom.xml
maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/Locator.java
Modified: maven/shared/trunk/maven-shared-io/pom.xml
URL: http://svn.apache.org/viewcvs/maven/shared/trunk/maven-shared-io/pom.xml?rev=381764&r1=381763&r2=381764&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/pom.xml (original)
+++ maven/shared/trunk/maven-shared-io/pom.xml Tue Feb 28 11:51:36 2006
@@ -7,7 +7,7 @@
<parent>
<groupId>org.apache.maven.shared</groupId>
<artifactId>shared-components-parent</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>1</version>
</parent>
<artifactId>maven-shared-io</artifactId>
@@ -25,14 +25,14 @@
<dependencies>
<dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.0.4</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.shared</groupId>
- <artifactId>maven-shared-monitor</artifactId>
- <version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
Added: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java
URL: http://svn.apache.org/viewcvs/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java?rev=381764&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java (added)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java Tue Feb 28 11:51:36 2006
@@ -0,0 +1,133 @@
+package org.apache.maven.shared.io;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.repository.Repository;
+
+public class DefaultDownloadManager implements DownloadManager
+{
+
+ private WagonManager wagonManager;
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.shared.io.DownloadManager#download(java.lang.String)
+ */
+ public File download( String url ) throws DownloadFailedException
+ {
+ return download( url, Collections.EMPTY_LIST );
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.shared.io.DownloadManager#download(java.lang.String, java.util.List)
+ */
+ public File download( String url, List transferListeners ) throws DownloadFailedException
+ {
+ URL sourceUrl;
+ try
+ {
+ sourceUrl = new URL( url );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new DownloadFailedException( url, "Download failed due to invalid URL. Reason: " + e.getMessage(), e );
+ }
+
+ Wagon wagon = null;
+
+ try
+ {
+ // Retrieve the correct Wagon instance used to download the remote archive
+ wagon = wagonManager.getWagon( sourceUrl.getProtocol() );
+
+ // create the landing file in /tmp for the downloaded source archive
+ File downloaded = File.createTempFile( "source-archive-", null );
+ downloaded.deleteOnExit();
+
+ // split the download URL into base URL and remote path for connecting, then retrieving.
+ String remotePath = sourceUrl.getPath();
+ String baseUrl = url.substring( 0, url.length() - remotePath.length() );
+
+ for ( Iterator it = transferListeners.iterator(); it.hasNext(); )
+ {
+ TransferListener listener = (TransferListener) it.next();
+ wagon.addTransferListener( listener );
+ }
+
+ // connect to the remote site, and retrieve the archive. Note the separate methods in which
+ // base URL and remote path are used.
+ Repository repo = new Repository( sourceUrl.getHost(), baseUrl );
+
+ wagon.connect( repo, wagonManager.getAuthenticationInfo( repo.getId() ), wagonManager.getProxy( sourceUrl
+ .getProtocol() ) );
+
+ wagon.get( remotePath, downloaded );
+
+ return downloaded;
+ }
+ catch ( UnsupportedProtocolException e )
+ {
+ throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+ }
+ catch ( IOException e )
+ {
+ throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+ }
+ catch ( TransferFailedException e )
+ {
+ throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+ }
+ catch ( AuthorizationException e )
+ {
+ throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+ }
+ catch ( ConnectionException e )
+ {
+ throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+ }
+ catch ( AuthenticationException e )
+ {
+ throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+ }
+ finally
+ {
+ // ensure the Wagon instance is closed out properly.
+ if ( wagon != null )
+ {
+ try
+ {
+ wagon.disconnect();
+ }
+ catch ( ConnectionException e )
+ {
+// getLog().debug( "Failed to disconnect wagon for: " + url, e );
+ }
+
+ for ( Iterator it = transferListeners.iterator(); it.hasNext(); )
+ {
+ TransferListener listener = (TransferListener) it.next();
+ wagon.removeTransferListener( listener );
+ }
+ }
+ }
+ }
+
+}
Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java
URL: http://svn.apache.org/viewcvs/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java?rev=381764&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java (added)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java Tue Feb 28 11:51:36 2006
@@ -0,0 +1,28 @@
+package org.apache.maven.shared.io;
+
+public class DownloadFailedException
+ extends Exception
+{
+
+ private static final long serialVersionUID = 1L;
+
+ private String url;
+
+ public DownloadFailedException( String url, String message, Throwable cause )
+ {
+ super( message, cause );
+ this.url = url;
+ }
+
+ public DownloadFailedException( String url, String message )
+ {
+ super( message );
+ this.url = url;
+ }
+
+ public String getUrl()
+ {
+ return url;
+ }
+
+}
Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java
URL: http://svn.apache.org/viewcvs/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java?rev=381764&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java (added)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java Tue Feb 28 11:51:36 2006
@@ -0,0 +1,15 @@
+package org.apache.maven.shared.io;
+
+import java.io.File;
+import java.util.List;
+
+public interface DownloadManager
+{
+
+ File download( String url )
+ throws DownloadFailedException;
+
+ File download( String url, List transferListeners )
+ throws DownloadFailedException;
+
+}
\ No newline at end of file
Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/Locator.java
URL: http://svn.apache.org/viewcvs/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/Locator.java?rev=381764&r1=381763&r2=381764&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/Locator.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/Locator.java Tue Feb 28 11:51:36 2006
@@ -16,8 +16,6 @@
* limitations under the License.
*/
-import org.apache.maven.shared.monitor.BasicMonitor;
-import org.apache.maven.shared.monitor.Monitor;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.StringUtils;
@@ -34,30 +32,13 @@
*/
public class Locator
{
- private Monitor monitor;
-
/**
* Create a Locator object.
*
* @param logger the logger object to log with.
*/
- public Locator( Monitor logger )
+ public Locator()
{
- this.monitor = logger;
- }
-
- /**
- * Obtain a Log object.
- *
- * @return the Log object.
- */
- private Monitor getLog()
- {
- if ( this.monitor == null )
- {
- this.monitor = new BasicMonitor( System.out );
- }
- return this.monitor;
}
/**
@@ -79,7 +60,6 @@
public File resolveLocation( String location, String localfile )
throws IOException
{
- getLog().debug( "resolveLocation(" + location + ", " + localfile + ")" );
if ( StringUtils.isEmpty( location ) )
{
return null;
@@ -92,34 +72,28 @@
{
// Found a URL
URL url = new URL( location );
- getLog().debug( "Potential URL: " + url.toExternalForm() );
FileUtils.copyURLToFile( url, retFile );
}
else
{
- getLog().debug( "Location is not a URL." );
// Attempt a File.
File fileLocation = new File( location );
if ( fileLocation.exists() )
{
// Found a File.
- getLog().debug( "Potential File: " + fileLocation.getAbsolutePath() );
FileUtils.copyFile( fileLocation, retFile );
}
else
{
- getLog().debug( "Location is not a File." );
// Attempt a Resource.
URL url = this.getClass().getClassLoader().getResource( location );
if ( url != null )
{
// Found a Resource.
- getLog().debug( "Potential Resource: " + url.toExternalForm() );
FileUtils.copyURLToFile( url, retFile );
}
else
{
- getLog().debug( "Location is not a Resource." );
throw new IOException( "Unable to find location '" + location + "' as URL, File or Resource." );
}
}
Added: maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml?rev=381764&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml (added)
+++ maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml Tue Feb 28 11:51:36 2006
@@ -0,0 +1,14 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.shared.io.DownloadManager</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.shared.io.DefaultDownloadManager</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.manager.WagonManager</role>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set>
\ No newline at end of file
Propchange: maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Re: svn commit: r381764 - in /maven/shared/trunk/maven-shared-io:
./ src/main/java/org/apache/maven/shared/io/ src/main/resources/ src/main/resources/META-INF/
src/main/resources/META-INF/plexus/
Posted by John Casey <jd...@yahoo.com>.
In the long term, I'd agree, provided WagonManager also landed there.
It's important that this utility have the ability to lookup
authentication info on-demand for a URL, IMO.
-john
Brett Porter wrote:
> Maybe this should go into Wagon itself?
>
> jdcasey@apache.org wrote:
>> Author: jdcasey
>> Date: Tue Feb 28 11:51:36 2006
>> New Revision: 381764
>>
>> URL: http://svn.apache.org/viewcvs?rev=381764&view=rev
>> Log:
>> Adding download manager that uses wagons to download arbitrary URLs, and removing the dependency on maven-shared-monitor until we can find a good logging impl.
>>
>> Added:
>> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java (with props)
>> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java (with props)
>> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java (with props)
>> maven/shared/trunk/maven-shared-io/src/main/resources/
>> maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/
>> maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/
>> maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml (with props)
>> Modified:
>> maven/shared/trunk/maven-shared-io/pom.xml
>> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/Locator.java
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org
Re: svn commit: r381764 - in /maven/shared/trunk/maven-shared-io:
./ src/main/java/org/apache/maven/shared/io/ src/main/resources/ src/main/resources/META-INF/
src/main/resources/META-INF/plexus/
Posted by Brett Porter <br...@apache.org>.
Maybe this should go into Wagon itself?
jdcasey@apache.org wrote:
> Author: jdcasey
> Date: Tue Feb 28 11:51:36 2006
> New Revision: 381764
>
> URL: http://svn.apache.org/viewcvs?rev=381764&view=rev
> Log:
> Adding download manager that uses wagons to download arbitrary URLs, and removing the dependency on maven-shared-monitor until we can find a good logging impl.
>
> Added:
> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DefaultDownloadManager.java (with props)
> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadFailedException.java (with props)
> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/DownloadManager.java (with props)
> maven/shared/trunk/maven-shared-io/src/main/resources/
> maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/
> maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/
> maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml (with props)
> Modified:
> maven/shared/trunk/maven-shared-io/pom.xml
> maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/Locator.java
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org