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