001 package org.apache.maven.repository.legacy;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import java.util.IdentityHashMap;
023 import java.util.Map;
024
025 import org.apache.maven.repository.ArtifactTransferEvent;
026 import org.apache.maven.repository.ArtifactTransferListener;
027 import org.apache.maven.repository.ArtifactTransferResource;
028 import org.apache.maven.wagon.events.TransferEvent;
029 import org.apache.maven.wagon.events.TransferListener;
030 import org.apache.maven.wagon.repository.Repository;
031 import org.apache.maven.wagon.resource.Resource;
032
033 public class TransferListenerAdapter
034 implements TransferListener
035 {
036
037 private final ArtifactTransferListener listener;
038
039 private final Map<Resource, ArtifactTransferResource> artifacts;
040
041 private final Map<Resource, Long> transfers;
042
043 public static TransferListener newAdapter( ArtifactTransferListener listener )
044 {
045 if ( listener == null )
046 {
047 return null;
048 }
049 else
050 {
051 return new TransferListenerAdapter( listener );
052 }
053 }
054
055 private TransferListenerAdapter( ArtifactTransferListener listener )
056 {
057 this.listener = listener;
058 this.artifacts = new IdentityHashMap<Resource, ArtifactTransferResource>();
059 this.transfers = new IdentityHashMap<Resource, Long>();
060 }
061
062 public void debug( String message )
063 {
064 }
065
066 public void transferCompleted( TransferEvent transferEvent )
067 {
068 ArtifactTransferEvent event = wrap( transferEvent );
069
070 Long transferred = null;
071 synchronized ( transfers )
072 {
073 transferred = transfers.remove( transferEvent.getResource() );
074 }
075 if ( transferred != null )
076 {
077 event.setTransferredBytes( transferred.longValue() );
078 }
079
080 synchronized ( artifacts )
081 {
082 artifacts.remove( transferEvent.getResource() );
083 }
084
085 listener.transferCompleted( event );
086 }
087
088 public void transferError( TransferEvent transferEvent )
089 {
090 synchronized ( transfers )
091 {
092 transfers.remove( transferEvent.getResource() );
093 }
094 synchronized ( artifacts )
095 {
096 artifacts.remove( transferEvent.getResource() );
097 }
098 }
099
100 public void transferInitiated( TransferEvent transferEvent )
101 {
102 listener.transferInitiated( wrap( transferEvent ) );
103 }
104
105 public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
106 {
107 Long transferred;
108 synchronized ( transfers )
109 {
110 transferred = transfers.get( transferEvent.getResource() );
111 if ( transferred == null )
112 {
113 transferred = Long.valueOf( length );
114 }
115 else
116 {
117 transferred = Long.valueOf( transferred.longValue() + length );
118 }
119 transfers.put( transferEvent.getResource(), transferred );
120 }
121
122 ArtifactTransferEvent event = wrap( transferEvent );
123 event.setDataBuffer( buffer );
124 event.setDataOffset( 0 );
125 event.setDataLength( length );
126 event.setTransferredBytes( transferred.longValue() );
127
128 listener.transferProgress( event );
129 }
130
131 public void transferStarted( TransferEvent transferEvent )
132 {
133 listener.transferStarted( wrap( transferEvent ) );
134 }
135
136 private ArtifactTransferEvent wrap( TransferEvent event )
137 {
138 if ( event == null )
139 {
140 return null;
141 }
142 else
143 {
144 String wagon = event.getWagon().getClass().getName();
145
146 ArtifactTransferResource artifact = wrap( event.getWagon().getRepository(), event.getResource() );
147
148 ArtifactTransferEvent evt;
149 if ( event.getException() != null )
150 {
151 evt = new ArtifactTransferEvent( wagon, event.getException(), event.getRequestType(), artifact );
152 }
153 else
154 {
155 evt = new ArtifactTransferEvent( wagon, event.getEventType(), event.getRequestType(), artifact );
156 }
157
158 evt.setLocalFile( event.getLocalFile() );
159
160 return evt;
161 }
162 }
163
164 private ArtifactTransferResource wrap( Repository repository, Resource resource )
165 {
166 if ( resource == null )
167 {
168 return null;
169 }
170 else
171 {
172 synchronized ( artifacts )
173 {
174 ArtifactTransferResource artifact = artifacts.get( resource );
175
176 if ( artifact == null )
177 {
178 artifact = new MavenArtifact( repository.getUrl(), resource );
179 artifacts.put( resource, artifact );
180 }
181
182 return artifact;
183 }
184 }
185 }
186
187 }