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() ).setDataBuffer( data );
95              listener.transferProgressed( eventBuilder.build() );
96          }
97      }
98  
99      public void transferCorrupted( Exception exception )
100         throws TransferCancelledException
101     {
102         if ( listener != null )
103         {
104             eventBuilder.resetType( EventType.CORRUPTED ).setException( exception );
105             listener.transferCorrupted( eventBuilder.build() );
106         }
107     }
108 
109     public void transferFailed( Exception exception, int classification )
110     {
111         if ( listener != null )
112         {
113             eventBuilder.resetType( EventType.FAILED ).setException( exception );
114             listener.transferFailed( eventBuilder.build() );
115         }
116     }
117 
118     public void transferSucceeded()
119     {
120         if ( listener != null )
121         {
122             eventBuilder.resetType( EventType.SUCCEEDED );
123             listener.transferSucceeded( eventBuilder.build() );
124         }
125     }
126 
127     public Map<String, Object> getChecksums()
128     {
129         if ( checksumCalculator == null )
130         {
131             return Collections.emptyMap();
132         }
133         return checksumCalculator.get();
134     }
135 
136     public void setChecksumCalculator( ChecksumCalculator checksumCalculator )
137     {
138         this.checksumCalculator = checksumCalculator;
139     }
140 
141 }