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