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 }