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