View Javadoc
1   package org.apache.maven.repository.legacy;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * TransferListenerAdapter
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 }