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 }