1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.repository.legacy;
20
21 import java.util.IdentityHashMap;
22 import java.util.Map;
23
24 import org.apache.maven.repository.ArtifactTransferEvent;
25 import org.apache.maven.repository.ArtifactTransferListener;
26 import org.apache.maven.repository.ArtifactTransferResource;
27 import org.apache.maven.wagon.events.TransferEvent;
28 import org.apache.maven.wagon.events.TransferListener;
29 import org.apache.maven.wagon.repository.Repository;
30 import org.apache.maven.wagon.resource.Resource;
31
32
33
34
35 public class TransferListenerAdapter implements TransferListener {
36
37 private final ArtifactTransferListener listener;
38
39 private final Map<Resource, ArtifactTransferResource> artifacts;
40
41 private final Map<Resource, Long> transfers;
42
43 public static TransferListener newAdapter(ArtifactTransferListener listener) {
44 if (listener == null) {
45 return null;
46 } else {
47 return new TransferListenerAdapter(listener);
48 }
49 }
50
51 private TransferListenerAdapter(ArtifactTransferListener listener) {
52 this.listener = listener;
53 this.artifacts = new IdentityHashMap<>();
54 this.transfers = new IdentityHashMap<>();
55 }
56
57 public void debug(String message) {}
58
59 public void transferCompleted(TransferEvent transferEvent) {
60 ArtifactTransferEvent event = wrap(transferEvent);
61
62 Long transferred;
63 synchronized (transfers) {
64 transferred = transfers.remove(transferEvent.getResource());
65 }
66 if (transferred != null) {
67 event.setTransferredBytes(transferred);
68 }
69
70 synchronized (artifacts) {
71 artifacts.remove(transferEvent.getResource());
72 }
73
74 listener.transferCompleted(event);
75 }
76
77 public void transferError(TransferEvent transferEvent) {
78 synchronized (transfers) {
79 transfers.remove(transferEvent.getResource());
80 }
81 synchronized (artifacts) {
82 artifacts.remove(transferEvent.getResource());
83 }
84 }
85
86 public void transferInitiated(TransferEvent transferEvent) {
87 listener.transferInitiated(wrap(transferEvent));
88 }
89
90 public void transferProgress(TransferEvent transferEvent, byte[] buffer, int length) {
91 Long transferred;
92 synchronized (transfers) {
93 transferred = transfers.get(transferEvent.getResource());
94 if (transferred == null) {
95 transferred = (long) length;
96 } else {
97 transferred = transferred + length;
98 }
99 transfers.put(transferEvent.getResource(), transferred);
100 }
101
102 ArtifactTransferEvent event = wrap(transferEvent);
103 event.setDataBuffer(buffer);
104 event.setDataOffset(0);
105 event.setDataLength(length);
106 event.setTransferredBytes(transferred);
107
108 listener.transferProgress(event);
109 }
110
111 public void transferStarted(TransferEvent transferEvent) {
112 listener.transferStarted(wrap(transferEvent));
113 }
114
115 private ArtifactTransferEvent wrap(TransferEvent event) {
116 if (event == null) {
117 return null;
118 } else {
119 String wagon = event.getWagon().getClass().getName();
120
121 ArtifactTransferResource artifact = wrap(event.getWagon().getRepository(), event.getResource());
122
123 ArtifactTransferEvent evt;
124 if (event.getException() != null) {
125 evt = new ArtifactTransferEvent(wagon, event.getException(), event.getRequestType(), artifact);
126 } else {
127 evt = new ArtifactTransferEvent(wagon, event.getEventType(), event.getRequestType(), artifact);
128 }
129
130 evt.setLocalFile(event.getLocalFile());
131
132 return evt;
133 }
134 }
135
136 private ArtifactTransferResource wrap(Repository repository, Resource resource) {
137 if (resource == null) {
138 return null;
139 } else {
140 synchronized (artifacts) {
141 ArtifactTransferResource artifact = artifacts.get(resource);
142
143 if (artifact == null) {
144 artifact = new MavenArtifact(repository.getUrl(), resource);
145 artifacts.put(resource, artifact);
146 }
147
148 return artifact;
149 }
150 }
151 }
152 }