diff --git a/pom.xml b/pom.xml index 9fbdbb0..de41280 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,13 @@ 2.18 - + + + ch.qos.logback + logback-classic + 1.0.13 + test + diff --git a/src/main/java/org/gcube/data/transfer/library/DataTransferClient.java b/src/main/java/org/gcube/data/transfer/library/DataTransferClient.java index 23cf3ed..8a19f80 100644 --- a/src/main/java/org/gcube/data/transfer/library/DataTransferClient.java +++ b/src/main/java/org/gcube/data/transfer/library/DataTransferClient.java @@ -1,8 +1,78 @@ package org.gcube.data.transfer.library; +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; + +import lombok.Synchronized; +import lombok.extern.slf4j.Slf4j; + +import org.gcube.data.transfer.library.faults.FailedTransferException; +import org.gcube.data.transfer.library.faults.HostingNodeNotFoundException; +import org.gcube.data.transfer.library.faults.InitializationException; +import org.gcube.data.transfer.library.faults.InvalidSourceException; +import org.gcube.data.transfer.library.faults.ServiceNotFoundException; +import org.gcube.data.transfer.library.faults.SourceNotSetException; +import org.gcube.data.transfer.library.faults.UnreachableNodeException; +import org.gcube.data.transfer.library.transferers.Transferer; +import org.gcube.data.transfer.library.transferers.TransfererBuilder; + +@Slf4j public class DataTransferClient { + + private Transferer transferer=null; + private DataTransferClient(Transferer transferer) { + this.transferer=transferer; + } + public static DataTransferClient getInstanceByEndpoint(String endpoint) throws UnreachableNodeException, ServiceNotFoundException{ + log.debug("Getting transferer for endpoint : "+endpoint); + return new DataTransferClient(TransfererBuilder.getTransfererByHost(endpoint)); + } + public static DataTransferClient getInstanceByNodeId(String id) throws HostingNodeNotFoundException, UnreachableNodeException, ServiceNotFoundException{ + log.debug("Getting transferer for nodeId : "+id); + return new DataTransferClient(TransfererBuilder.getTransfererByhostingNodeId(id)); + } + + @Synchronized("transferer") + public TransferResult localFile(String path) throws InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + if(transferer==null) throw new RuntimeException("Transferer not set, please set destination before trying to transfer"); + log.debug("Sending local file {} to {}",path,transferer.getDestinationCapabilities().getHostName()); + transferer.localFile(path); + return transferer.transfer(); + } + + @Synchronized("transferer") + public TransferResult localFile(File file) throws InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + if(transferer==null) throw new RuntimeException("Transferer not set, please set destination before trying to transfer"); + log.debug("Sending local file {} to {}",file.getAbsolutePath(),transferer.getDestinationCapabilities().getHostName()); + transferer.localFile(file); + return transferer.transfer(); + } + + @Synchronized("transferer") + public TransferResult httpSource(String url) throws MalformedURLException, InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + if(transferer==null) throw new RuntimeException("Transferer not set, please set destination before trying to transfer"); + log.debug("Passed url string : "+url); + return this.httpSource(new URL(url)); + } + + @Synchronized("transferer") + public TransferResult httpSource(URL url) throws InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + if(transferer==null) throw new RuntimeException("Transferer not set, please set destination before trying to transfer"); + log.debug("Sending from url {} to {}",url,transferer.getDestinationCapabilities().getHostName()); + transferer.fromURL(url); + return transferer.transfer(); + } + + @Synchronized("transferer") + public TransferResult storageId(String id) throws InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + if(transferer==null) throw new RuntimeException("Transferer not set, please set destination before trying to transfer"); + log.debug("Sending from storage id {} to {}",id,transferer.getDestinationCapabilities().getHostName()); + transferer.storageFileId(id); + return transferer.transfer(); + } } diff --git a/src/main/java/org/gcube/data/transfer/library/transferers/HTTPTransferer.java b/src/main/java/org/gcube/data/transfer/library/transferers/HTTPTransferer.java index 04e7e7a..8de6247 100644 --- a/src/main/java/org/gcube/data/transfer/library/transferers/HTTPTransferer.java +++ b/src/main/java/org/gcube/data/transfer/library/transferers/HTTPTransferer.java @@ -27,6 +27,8 @@ public class HTTPTransferer extends Transferer { private URL link; + private String toDeleteStorageId=null; + @Override protected TransferRequest prepareRequest()throws InitializationException { return new TransferRequest("", new HttpDownloadSettings(link, HttpDownloadOptions.DEFAULT)); @@ -35,8 +37,9 @@ public class HTTPTransferer extends Transferer { private URL getHttpLink() throws RemoteBackendException, FileNotFoundException, InvalidSourceException, MalformedURLException{ if(source instanceof LocalSource){ - return new URL(StorageUtils.putOntoStorage(((LocalSource)source).getTheSource())); - }else if (source instanceof StorageSource){ + toDeleteStorageId=StorageUtils.putOntoStorage(((LocalSource)source).getTheSource()); + return new URL(StorageUtils.getUrlById(toDeleteStorageId)); + }else if (source instanceof StorageSource){ return new URL(StorageUtils.getUrlById(((StorageSource)source).getTheSource())); }else if (source instanceof URLSource){ return ((URLSource)source).getTheSource(); @@ -59,4 +62,10 @@ public class HTTPTransferer extends Transferer { throw new InitializationException(e); } } + + @Override + protected void clean() { + // TODO Auto-generated method stub + super.clean(); + } } diff --git a/src/main/java/org/gcube/data/transfer/library/transferers/Transferer.java b/src/main/java/org/gcube/data/transfer/library/transferers/Transferer.java index 8a53687..15c7644 100644 --- a/src/main/java/org/gcube/data/transfer/library/transferers/Transferer.java +++ b/src/main/java/org/gcube/data/transfer/library/transferers/Transferer.java @@ -108,4 +108,8 @@ public abstract class Transferer { } + public TransferCapabilities getDestinationCapabilities(){ + return targetCapabilities; + } + } diff --git a/src/main/java/org/gcube/data/transfer/library/utils/StorageUtils.java b/src/main/java/org/gcube/data/transfer/library/utils/StorageUtils.java index 53fdc6a..6aefb3d 100644 --- a/src/main/java/org/gcube/data/transfer/library/utils/StorageUtils.java +++ b/src/main/java/org/gcube/data/transfer/library/utils/StorageUtils.java @@ -21,13 +21,11 @@ public class StorageUtils { } - //return public link + //return Id public static final String putOntoStorage(File source) throws RemoteBackendException, FileNotFoundException{ IClient client=getClient(); log.debug("Uploading local file "+source.getAbsolutePath()); - String id=client.put(true).LFile(new FileInputStream(source)).RFile(Utils.getUniqueString()); - log.debug("Id is "+id); - return client.getUrl().RFile(id); + return client.put(true).LFile(new FileInputStream(source)).RFile(Utils.getUniqueString()); } public static final boolean checkStorageId(String id){ @@ -39,4 +37,9 @@ public class StorageUtils { log.debug("Id is "+id); return client.getUrl().RFile(id); } + + public static final void removeById(String id){ + IClient client=getClient(); + client.remove().RFile(id); + } } diff --git a/src/test/java/org/gcube/data/transfer/library/TransfererTest.java b/src/test/java/org/gcube/data/transfer/library/TransfererTest.java index c8ddc4d..42b4628 100644 --- a/src/test/java/org/gcube/data/transfer/library/TransfererTest.java +++ b/src/test/java/org/gcube/data/transfer/library/TransfererTest.java @@ -1,25 +1,47 @@ package org.gcube.data.transfer.library; +import java.net.MalformedURLException; + import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.data.transfer.library.client.Client; -import org.gcube.data.transfer.library.transferers.TransfererBuilder; -import org.junit.Before; +import org.gcube.data.transfer.library.faults.FailedTransferException; +import org.gcube.data.transfer.library.faults.InitializationException; +import org.gcube.data.transfer.library.faults.InvalidSourceException; +import org.gcube.data.transfer.library.faults.ServiceNotFoundException; +import org.gcube.data.transfer.library.faults.SourceNotSetException; +import org.gcube.data.transfer.library.faults.UnreachableNodeException; +import org.junit.BeforeClass; import org.junit.Test; public class TransfererTest { - String hostname="http://pc-fabio.isti.cnr.it:8080"; - String scope="/gcube/devNext"; + static String hostname="http://pc-fabio.isti.cnr.it:8080"; + static String scope="/gcube/devNext"; + static DataTransferClient client; - - @Before - public void init(){ - ScopeProvider.instance.set(scope); + @BeforeClass + public static void init() throws UnreachableNodeException, ServiceNotFoundException{ + ScopeProvider.instance.set(scope); + client=DataTransferClient.getInstanceByEndpoint(hostname); } @Test - public void single(){ - TransfererBuilder. + public void localFile() throws InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + String localFile="/home/fabio/Downloads/Puntata 3.mp3"; + System.out.println(client.localFile(localFile)); + } + + + @Test + public void httpUrl() throws MalformedURLException, InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + String link="https://www.dropbox.com/s/giqsbgmlkk9zklc/COMA%20-%20Last%20Aim.mp3?dl=0"; + System.out.println(client.httpSource(link)); + } + + + @Test + public void storage() throws InvalidSourceException, SourceNotSetException, FailedTransferException, InitializationException{ + String toUpload="/home/fabio/Downloads/Incantesimi3_5.doc"; + System.out.println(client.storageId(toUpload)); } }