]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.aether/src/main/java/org/argeo/slc/aether/ConsoleTransferListener.java
Upport authentication to remote repository
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.aether / src / main / java / org / argeo / slc / aether / ConsoleTransferListener.java
1 package org.argeo.slc.aether;
2
3 import java.io.PrintStream;
4 import java.text.DecimalFormat;
5 import java.text.DecimalFormatSymbols;
6 import java.util.Locale;
7 import java.util.Map;
8 import java.util.concurrent.ConcurrentHashMap;
9
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;
15
16 public class ConsoleTransferListener extends AbstractTransferListener {
17 private final static Log log = LogFactory
18 .getLog(ConsoleTransferListener.class);
19
20 private PrintStream out;
21
22 private Map<TransferResource, Long> downloads = new ConcurrentHashMap<TransferResource, Long>();
23
24 private int lastLength;
25
26 public ConsoleTransferListener(PrintStream out) {
27 this.out = (out != null) ? out : System.out;
28 }
29
30 @Override
31 public void transferInitiated(TransferEvent event) {
32 String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading"
33 : "Downloading";
34
35 if (log.isDebugEnabled())
36 log.debug(message + ": " + event.getResource().getRepositoryUrl()
37 + event.getResource().getResourceName());
38 }
39
40 @Override
41 public void transferProgressed(TransferEvent event) {
42 TransferResource resource = event.getResource();
43 downloads.put(resource, Long.valueOf(event.getTransferredBytes()));
44
45 StringBuilder buffer = new StringBuilder(64);
46
47 for (Map.Entry<TransferResource, Long> entry : downloads.entrySet()) {
48 long total = entry.getKey().getContentLength();
49 long complete = entry.getValue().longValue();
50
51 buffer.append(getStatus(complete, total)).append(" ");
52 }
53
54 int pad = lastLength - buffer.length();
55 lastLength = buffer.length();
56 pad(buffer, pad);
57 buffer.append('\r');
58
59 out.print(buffer);
60 }
61
62 private String getStatus(long complete, long total) {
63 if (total >= 1024) {
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 ";
69 } else {
70 return complete + " B ";
71 }
72 }
73
74 private void pad(StringBuilder buffer, int spaces) {
75 String block = " ";
76 while (spaces > 0) {
77 int n = Math.min(spaces, block.length());
78 buffer.append(block, 0, n);
79 spaces -= n;
80 }
81 }
82
83 @Override
84 public void transferSucceeded(TransferEvent event) {
85 transferCompleted(event);
86
87 TransferResource resource = event.getResource();
88 long contentLength = event.getTransferredBytes();
89 if (contentLength >= 0) {
90 String type = (event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded"
91 : "Downloaded");
92 String len = contentLength >= 1024 ? toKB(contentLength) + " KB"
93 : contentLength + " B";
94
95 String throughput = "";
96 long duration = System.currentTimeMillis()
97 - resource.getTransferStartTime();
98 if (duration > 0) {
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";
104 }
105
106 out.println(type + ": " + resource.getRepositoryUrl()
107 + resource.getResourceName() + " (" + len + throughput
108 + ")");
109 }
110 }
111
112 @Override
113 public void transferFailed(TransferEvent event) {
114 transferCompleted(event);
115
116 log.error(event.getException().getMessage()
117 + (event.getException().getCause() != null ? " : "
118 + event.getException().getCause().getMessage() : ""));
119 // event.getException().printStackTrace( out );
120 }
121
122 private void transferCompleted(TransferEvent event) {
123 downloads.remove(event.getResource());
124
125 StringBuilder buffer = new StringBuilder(64);
126 pad(buffer, lastLength);
127 buffer.append('\r');
128 out.print(buffer);
129 }
130
131 public void transferCorrupted(TransferEvent event) {
132 event.getException().printStackTrace(out);
133 }
134
135 protected long toKB(long bytes) {
136 return (bytes + 1023) / 1024;
137 }
138
139 }