View Javadoc

1   package org.sonatype.aether.connector.wagon;
2   
3   /*******************************************************************************
4    * Copyright (c) 2010-2011 Sonatype, Inc.
5    * All rights reserved. This program and the accompanying materials
6    * are made available under the terms of the Eclipse Public License v1.0
7    * which accompanies this distribution, and is available at
8    *   http://www.eclipse.org/legal/epl-v10.html
9    *******************************************************************************/
10  
11  import java.io.File;
12  
13  import org.apache.maven.wagon.events.TransferEvent;
14  import org.apache.maven.wagon.observers.AbstractTransferListener;
15  import org.sonatype.aether.RequestTrace;
16  import org.sonatype.aether.transfer.TransferCancelledException;
17  import org.sonatype.aether.transfer.TransferEvent.EventType;
18  import org.sonatype.aether.transfer.TransferEvent.RequestType;
19  import org.sonatype.aether.transfer.TransferListener;
20  import org.sonatype.aether.util.listener.DefaultTransferEvent;
21  import org.sonatype.aether.util.listener.DefaultTransferResource;
22  
23  /**
24   * An adapter to transform transfer events from Wagon into events for the repository system.
25   * 
26   * @author Benjamin Bentmann
27   */
28  class WagonTransferListenerAdapter
29      extends AbstractTransferListener
30  {
31  
32      private final DefaultTransferResource resource;
33  
34      private final TransferListener delegate;
35  
36      private long transferredBytes;
37  
38      public WagonTransferListenerAdapter( TransferListener delegate, String repositoryUrl, String resourceName,
39                                           File file, RequestTrace trace )
40      {
41          this.delegate = delegate;
42          resource = new DefaultTransferResource( repositoryUrl, resourceName, file, trace );
43      }
44  
45      @Override
46      public void transferStarted( TransferEvent event )
47      {
48          transferredBytes = 0;
49          resource.setContentLength( event.getResource().getContentLength() );
50          try
51          {
52              delegate.transferStarted( wrap( event, EventType.STARTED ) );
53          }
54          catch ( TransferCancelledException e )
55          {
56              /*
57               * NOTE: Wagon transfers are not freely abortable. In particular, aborting from
58               * AbstractWagon.fire(Get|Put)Started() would result in unclosed streams so we avoid this case.
59               */
60          }
61      }
62  
63      @Override
64      public void transferProgress( TransferEvent event, byte[] buffer, int length )
65      {
66          transferredBytes += length;
67          try
68          {
69              delegate.transferProgressed( wrap( event, EventType.PROGRESSED ).setDataBuffer( buffer, 0, length ) );
70          }
71          catch ( TransferCancelledException e )
72          {
73              throw new WagonCancelledException( e );
74          }
75      }
76  
77      private DefaultTransferEvent wrap( TransferEvent event, EventType type )
78      {
79          DefaultTransferEvent e = newEvent();
80          e.setRequestType( event.getRequestType() == TransferEvent.REQUEST_PUT ? RequestType.PUT : RequestType.GET );
81          e.setType( type );
82          return e;
83      }
84  
85      public DefaultTransferEvent newEvent()
86      {
87          DefaultTransferEvent e = new DefaultTransferEvent();
88          e.setResource( resource );
89          e.setTransferredBytes( transferredBytes );
90          return e;
91      }
92  
93  }