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