View Javadoc
1   package org.eclipse.aether.connector.basic;
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.nio.ByteBuffer;
23  import java.util.Collections;
24  import java.util.Map;
25  
26  import org.eclipse.aether.spi.connector.Transfer;
27  import org.eclipse.aether.spi.connector.transport.TransportListener;
28  import org.eclipse.aether.transfer.TransferCancelledException;
29  import org.eclipse.aether.transfer.TransferEvent;
30  import org.eclipse.aether.transfer.TransferEvent.EventType;
31  import org.eclipse.aether.transfer.TransferListener;
32  
33  class TransferTransportListener<T extends Transfer>
34      extends TransportListener
35  {
36  
37      private final T transfer;
38  
39      private final TransferListener listener;
40  
41      private final TransferEvent.Builder eventBuilder;
42  
43      private ChecksumCalculator checksumCalculator;
44  
45      protected TransferTransportListener( T transfer, TransferEvent.Builder eventBuilder )
46      {
47          this.transfer = transfer;
48          this.listener = transfer.getListener();
49          this.eventBuilder = eventBuilder;
50      }
51  
52      protected T getTransfer()
53      {
54          return transfer;
55      }
56  
57      public void transferInitiated()
58          throws TransferCancelledException
59      {
60          if ( listener != null )
61          {
62              eventBuilder.resetType( EventType.INITIATED );
63              listener.transferInitiated( eventBuilder.build() );
64          }
65      }
66  
67      @Override
68      public void transportStarted( long dataOffset, long dataLength )
69          throws TransferCancelledException
70      {
71          if ( checksumCalculator != null )
72          {
73              checksumCalculator.init( dataOffset );
74          }
75          if ( listener != null )
76          {
77              eventBuilder.resetType( EventType.STARTED ).setTransferredBytes( dataOffset );
78              TransferEvent event = eventBuilder.build();
79              event.getResource().setContentLength( dataLength ).setResumeOffset( dataOffset );
80              listener.transferStarted( event );
81          }
82      }
83  
84      @Override
85      public void transportProgressed( ByteBuffer data )
86          throws TransferCancelledException
87      {
88          if ( checksumCalculator != null )
89          {
90              checksumCalculator.update( data );
91          }
92          if ( listener != null )
93          {
94              eventBuilder.resetType( EventType.PROGRESSED ).addTransferredBytes( data.remaining() )
95                      .setDataBuffer( data );
96              listener.transferProgressed( eventBuilder.build() );
97          }
98      }
99  
100     public void transferCorrupted( Exception exception )
101         throws TransferCancelledException
102     {
103         if ( listener != null )
104         {
105             eventBuilder.resetType( EventType.CORRUPTED ).setException( exception );
106             listener.transferCorrupted( eventBuilder.build() );
107         }
108     }
109 
110     public void transferFailed( Exception exception, int classification )
111     {
112         if ( listener != null )
113         {
114             eventBuilder.resetType( EventType.FAILED ).setException( exception );
115             listener.transferFailed( eventBuilder.build() );
116         }
117     }
118 
119     public void transferSucceeded()
120     {
121         if ( listener != null )
122         {
123             eventBuilder.resetType( EventType.SUCCEEDED );
124             listener.transferSucceeded( eventBuilder.build() );
125         }
126     }
127 
128     public Map<String, Object> getChecksums()
129     {
130         if ( checksumCalculator == null )
131         {
132             return Collections.emptyMap();
133         }
134         return checksumCalculator.get();
135     }
136 
137     public void setChecksumCalculator( ChecksumCalculator checksumCalculator )
138     {
139         this.checksumCalculator = checksumCalculator;
140     }
141 
142 }