1 package org
.argeo
.slc
.aether
;
3 import java
.io
.PrintStream
;
4 import java
.text
.DecimalFormat
;
5 import java
.text
.DecimalFormatSymbols
;
6 import java
.util
.Locale
;
8 import java
.util
.concurrent
.ConcurrentHashMap
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.sonatype
.aether
.transfer
.AbstractTransferListener
;
13 import org
.sonatype
.aether
.transfer
.TransferEvent
;
14 import org
.sonatype
.aether
.transfer
.TransferResource
;
16 public class ConsoleTransferListener
extends AbstractTransferListener
{
17 private final static Log log
= LogFactory
18 .getLog(ConsoleTransferListener
.class);
20 private PrintStream out
;
22 private Map
<TransferResource
, Long
> downloads
= new ConcurrentHashMap
<TransferResource
, Long
>();
24 private int lastLength
;
26 public ConsoleTransferListener(PrintStream out
) {
27 this.out
= (out
!= null) ? out
: System
.out
;
31 public void transferInitiated(TransferEvent event
) {
32 String message
= event
.getRequestType() == TransferEvent
.RequestType
.PUT ?
"Uploading"
35 if (log
.isDebugEnabled())
36 log
.debug(message
+ ": " + event
.getResource().getRepositoryUrl()
37 + event
.getResource().getResourceName());
41 public void transferProgressed(TransferEvent event
) {
42 TransferResource resource
= event
.getResource();
43 downloads
.put(resource
, Long
.valueOf(event
.getTransferredBytes()));
45 StringBuilder buffer
= new StringBuilder(64);
47 for (Map
.Entry
<TransferResource
, Long
> entry
: downloads
.entrySet()) {
48 long total
= entry
.getKey().getContentLength();
49 long complete
= entry
.getValue().longValue();
51 buffer
.append(getStatus(complete
, total
)).append(" ");
54 int pad
= lastLength
- buffer
.length();
55 lastLength
= buffer
.length();
62 private String
getStatus(long complete
, long total
) {
64 return toKB(complete
) + "/" + toKB(total
) + " KB ";
65 } else if (total
>= 0) {
66 return complete
+ "/" + total
+ " B ";
67 } else if (complete
>= 1024) {
68 return toKB(complete
) + " KB ";
70 return complete
+ " B ";
74 private void pad(StringBuilder buffer
, int spaces
) {
77 int n
= Math
.min(spaces
, block
.length());
78 buffer
.append(block
, 0, n
);
84 public void transferSucceeded(TransferEvent event
) {
85 transferCompleted(event
);
87 TransferResource resource
= event
.getResource();
88 long contentLength
= event
.getTransferredBytes();
89 if (contentLength
>= 0) {
90 String type
= (event
.getRequestType() == TransferEvent
.RequestType
.PUT ?
"Uploaded"
92 String len
= contentLength
>= 1024 ?
toKB(contentLength
) + " KB"
93 : contentLength
+ " B";
95 String throughput
= "";
96 long duration
= System
.currentTimeMillis()
97 - resource
.getTransferStartTime();
99 DecimalFormat format
= new DecimalFormat("0.0",
100 new DecimalFormatSymbols(Locale
.ENGLISH
));
101 double kbPerSec
= (contentLength
/ 1024.0)
102 / (duration
/ 1000.0);
103 throughput
= " at " + format
.format(kbPerSec
) + " KB/sec";
106 out
.println(type
+ ": " + resource
.getRepositoryUrl()
107 + resource
.getResourceName() + " (" + len
+ throughput
113 public void transferFailed(TransferEvent event
) {
114 transferCompleted(event
);
116 log
.error(event
.getException().getMessage()
117 + (event
.getException().getCause() != null ?
" : "
118 + event
.getException().getCause().getMessage() : ""));
119 // event.getException().printStackTrace( out );
122 private void transferCompleted(TransferEvent event
) {
123 downloads
.remove(event
.getResource());
125 StringBuilder buffer
= new StringBuilder(64);
126 pad(buffer
, lastLength
);
131 public void transferCorrupted(TransferEvent event
) {
132 event
.getException().printStackTrace(out
);
135 protected long toKB(long bytes
) {
136 return (bytes
+ 1023) / 1024;