More artifact listener muck

git-svn-id: https://svn.apache.org/repos/asf/geronimo/gshell/trunk@721603 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java b/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java
index 4d0d845..01069a2 100644
--- a/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java
+++ b/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java
@@ -214,9 +214,11 @@
             builder.setClassLoader(getClass().getClassLoader());
             builder.setIo(io);
 
-            // Configure the download monitor
-            ArtifactResolver artifactResolver = builder.getContainer().getBean(ArtifactResolver.class);
-            artifactResolver.setTransferListener(new ProgressSpinnerMonitor(io));
+            if (!io.isQuiet() && !io.isSilent()) {
+                // Configure the download monitor
+                ArtifactResolver artifactResolver = builder.getContainer().getBean(ArtifactResolver.class);
+                artifactResolver.setTransferListener(new ProgressSpinnerMonitor(io));
+            }
 
             // --help and --version need access to the application's information, so we have to handle these options late
             if (help|version) {
diff --git a/gshell-support/gshell-artifact-maven/src/main/java/org/apache/geronimo/gshell/artifact/maven/ArtifactResolverImpl.java b/gshell-support/gshell-artifact-maven/src/main/java/org/apache/geronimo/gshell/artifact/maven/ArtifactResolverImpl.java
index a4b27c0..a237e3f 100644
--- a/gshell-support/gshell-artifact-maven/src/main/java/org/apache/geronimo/gshell/artifact/maven/ArtifactResolverImpl.java
+++ b/gshell-support/gshell-artifact-maven/src/main/java/org/apache/geronimo/gshell/artifact/maven/ArtifactResolverImpl.java
@@ -53,8 +53,32 @@
 
     public void setTransferListener(final TransferListener listener) {
         assert listener != null;
-        
-        // TODO: Hookup adapter to wagon manager
+
+        artifactManager.setDownloadMonitor(new org.apache.maven.wagon.events.TransferListener() {
+            public void transferInitiated(final org.apache.maven.wagon.events.TransferEvent transferEvent) {
+                // ignore
+            }
+
+            public void transferStarted(final org.apache.maven.wagon.events.TransferEvent transferEvent) {
+                // TODO:
+            }
+
+            public void transferProgress(final org.apache.maven.wagon.events.TransferEvent transferEvent, final byte[] buffer, final int length) {
+                // TODO:
+            }
+
+            public void transferCompleted(final org.apache.maven.wagon.events.TransferEvent transferEvent) {
+                // TODO:
+            }
+
+            public void transferError(final org.apache.maven.wagon.events.TransferEvent transferEvent) {
+                // TODO:
+            }
+
+            public void debug(final String message) {
+                log.trace(message);
+            }
+        });
     }
 
     public Result resolve(final Request request) throws Failure {
diff --git a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferEvent.java b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferEvent.java
index addd7aa..d6bce53 100644
--- a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferEvent.java
+++ b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferEvent.java
@@ -19,6 +19,8 @@
 
 package org.apache.geronimo.gshell.artifact.transfer;
 
+import java.net.URL;
+
 /**
  * Artifact transfer event.
  *
@@ -26,5 +28,23 @@
  */
 public interface TransferEvent
 {
-    // ???
+    enum Type {
+        UPLOAD, DOWNLOAD
+    }
+
+    Type getType();
+
+    URL getUrl();
+
+    /**
+     * The maximum length of the content.
+     */
+    long getContentLength();
+
+    /**
+     * The length of bytes received for this event.
+     */
+    long getLength();
+
+    Throwable getCause();
 }
\ No newline at end of file
diff --git a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListener.java b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListener.java
index 76e1b0c..2239bd9 100644
--- a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListener.java
+++ b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListener.java
@@ -26,6 +26,8 @@
  */
 public interface TransferListener
 {
+    int UNKNOWN_LENGTH = -1;
+    
     void transferStarted(TransferEvent event);
 
     void transferProgress(TransferEvent event);
diff --git a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListenerSupport.java b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListenerSupport.java
index 8b52cc7..5b83725 100644
--- a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListenerSupport.java
+++ b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/TransferListenerSupport.java
@@ -45,8 +45,6 @@
     }
 
     public void transferFailed(final TransferEvent event) {
-        log.trace("Transfer error: {}", event);
-
-        log.error("Transfer failure: {}", event);
+        log.trace("Transfer failure: {}", event);
     }
 }
\ No newline at end of file
diff --git a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/monitor/ProgressSpinnerMonitor.java b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/monitor/ProgressSpinnerMonitor.java
index 6a4b08e..dd2cd2d 100644
--- a/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/monitor/ProgressSpinnerMonitor.java
+++ b/gshell-support/gshell-artifact/src/main/java/org/apache/geronimo/gshell/artifact/transfer/monitor/ProgressSpinnerMonitor.java
@@ -21,8 +21,10 @@
 
 import org.apache.geronimo.gshell.io.IO;
 import org.apache.geronimo.gshell.artifact.transfer.TransferListenerSupport;
+import org.apache.geronimo.gshell.artifact.transfer.TransferEvent;
 
 import java.io.IOException;
+import java.net.URL;
 
 /**
  * A download monitor providing a simple spinning progress interface.
@@ -61,39 +63,28 @@
         }
     }
 
-    //
-    // TODO: May actually want to use a little timmer thread to make this spin more often for better user feedback
-    //       that we are still working, then use the event to update the message.  Or really, put the timer in
-    //       the spinner impl, and then just update the status message
-    //
-
-    /*
     public void transferStarted(final TransferEvent event) {
         assert event != null;
 
-        super.transferStarted(event);
-
         complete = 0;
 
         spinner.reset();
 
-        String type = event.getRequestType() == REQUEST_PUT ? "Uploading" : "Downloading";
-        String url = event.getWagon().getRepository().getUrl();
+        String type = event.getType() == TransferEvent.Type.UPLOAD ? "Uploading" : "Downloading";
+        URL url = event.getUrl();
 
-        String message = type + ": " + url + "/" + event.getResource().getName();
+        String message = type + ": " + url;
 
         log.debug(message);
 
         println(message);
     }
 
-    public void transferProgress(final TransferEvent event, final byte[] buffer, final int length) {
+    public void transferProgress(final TransferEvent event) {
         assert event != null;
 
-        super.transferProgress(event, buffer, length);
-
-        long total = event.getResource().getContentLength();
-        complete += length;
+        long total = event.getContentLength();
+        complete += event.getLength();
 
         String message;
 
@@ -114,12 +105,11 @@
 
         super.transferCompleted(event);
 
-        long length = event.getResource().getContentLength();
-        String type = event.getRequestType() == REQUEST_PUT ? "Uploaded" : "Downloaded";
+        long length = event.getLength();
+        String type = event.getType() == TransferEvent.Type.UPLOAD ? "Uploaded" : "Downloaded";
         String bytes = length >= 1024 ? ( length / 1024 ) + "K" : length + "b";
 
         // pad at end just incase, should really blank the reset of the line
         print(type + " " + bytes + "          ");
     }
-    */
 }
\ No newline at end of file