View Javadoc

1   package com.terradue.jcatalogue.client.download;
2   
3   import java.io.File;
4   import java.net.URI;
5   
6   import lombok.AccessLevel;
7   import lombok.Data;
8   import lombok.Getter;
9   
10  import org.slf4j.Logger;
11  import org.slf4j.LoggerFactory;
12  
13  import com.terradue.jcatalogue.client.HttpMethod;
14  import com.terradue.jcatalogue.client.internal.ahc.HttpInvoker;
15  
16  @Data
17  @Protocol({ "http", "https" })
18  public final class HttpDownloader
19      implements Downloader
20  {
21  
22      private final Logger logger = LoggerFactory.getLogger( getClass() );
23  
24      @Getter( AccessLevel.NONE )
25      private final HttpInvoker httpInvoker;
26  
27      @Override
28      public <T> T download( File targetDir, URI fileUri, DownloadHandler<T> handler )
29      {
30          String fileName = fileUri.getPath().substring( fileUri.getPath().lastIndexOf( '/' ) + 1 );
31  
32          File targetFile = new File( targetDir, fileName );
33  
34          if ( logger.isInfoEnabled() )
35          {
36              logger.info( "Downloading {} to {}...", fileUri, targetDir );
37          }
38  
39          try
40          {
41              return httpInvoker.invoke( HttpMethod.GET, fileUri, new HttpDownloadHandler<T>( targetFile, handler ) );
42          }
43          catch ( Exception e )
44          {
45              handler.onError( e );
46              return null;
47          }
48      }
49  
50  }