diff --git a/microservice-server/build.gradle b/microservice-server/build.gradle index 31097d3b24565f8e6900b88d4099481782a3e39d..102904d066390e9b8f32243d7a0bcaf451b2426d 100644 --- a/microservice-server/build.gradle +++ b/microservice-server/build.gradle @@ -6,6 +6,7 @@ task wrapper(type: Wrapper) { } repositories { + mavenCentral() ivy { ivyPattern "http://svnsis.ethz.ch/repos/cisd/ivy-repository/trunk/[organisation]/[module]/[revision]/ivy.xml" artifactPattern "http://svnsis.ethz.ch/repos/cisd/ivy-repository/trunk/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]" @@ -24,7 +25,7 @@ dependencies { } -mainClassName = "ch.ethz.sis.microservices.server.startup.Main" +mainClassName = "ch.ethz.sis.microservices.download.server.startup.Main" distZip { into(project.name) { diff --git a/microservice-server/conf/config.json b/microservice-server/conf/config.json index 07d1a974a84c6faaa91d1079cf2c445bcb87055d..44f4444e74b4c2bac44e55f10ee11c2c28a26f4f 100644 --- a/microservice-server/conf/config.json +++ b/microservice-server/conf/config.json @@ -2,7 +2,7 @@ "port" : 8080, "services" : [ { - "className" : "ch.ethz.sis.microservices.server.services.store.FileInfoHandler", + "className" : "ch.ethz.sis.microservices.download.server.services.store.FileInfoHandler", "url" : "/file-information", "parameters" : { "openbis-url" : "http://localhost:8888/openbis/openbis/rmi-application-server-v3", @@ -13,7 +13,7 @@ } }, { - "className" : "ch.ethz.sis.microservices.server.services.store.DownloadHandler", + "className" : "ch.ethz.sis.microservices.download.server.services.store.DownloadHandler", "url" : "/download", "parameters" : { "openbis-url" : "http://localhost:8888/openbis/openbis/rmi-application-server-v3", diff --git a/microservice-server/config.json b/microservice-server/config.json new file mode 100644 index 0000000000000000000000000000000000000000..44f4444e74b4c2bac44e55f10ee11c2c28a26f4f --- /dev/null +++ b/microservice-server/config.json @@ -0,0 +1,27 @@ +{ + "port" : 8080, + "services" : [ + { + "className" : "ch.ethz.sis.microservices.download.server.services.store.FileInfoHandler", + "url" : "/file-information", + "parameters" : { + "openbis-url" : "http://localhost:8888/openbis/openbis/rmi-application-server-v3", + "datastore-url" : "http://localhost:8889/datastore_server/rmi-data-store-server-v3", + "services-timeout" : "10000", + "allowedExternalDMSCode" : "ADMIN-BS-MBPR28.D.ETHZ.CH-E96954A7", + "allowedContentCopyPath" : "/Users/localadmin/obis_data/" + } + }, + { + "className" : "ch.ethz.sis.microservices.download.server.services.store.DownloadHandler", + "url" : "/download", + "parameters" : { + "openbis-url" : "http://localhost:8888/openbis/openbis/rmi-application-server-v3", + "datastore-url" : "http://localhost:8889/datastore_server/rmi-data-store-server-v3", + "services-timeout" : "10000", + "allowedExternalDMSCode" : "ADMIN-BS-MBPR28.D.ETHZ.CH-E96954A7", + "allowedContentCopyPath" : "/Users/localadmin/obis_data/" + } + } + ] +} \ No newline at end of file diff --git a/microservice-server/gradle/wrapper/gradle-wrapper.properties b/microservice-server/gradle/wrapper/gradle-wrapper.properties index 2df108562a21e0116bc037aeae24a5aa9efda179..3bde4b663e7fae0d3df1cddeb38898f41709b1b6 100644 --- a/microservice-server/gradle/wrapper/gradle-wrapper.properties +++ b/microservice-server/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://svnsis.ethz.ch/repos/cisd/ivy-repository/trunk/gradle/distribution/4.5/gradle-4.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.5-bin.zip diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/.DS_Store b/microservice-server/src/main/java/ch/ethz/sis/microservices/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 Binary files a/microservice-server/src/main/java/ch/ethz/sis/microservices/.DS_Store and /dev/null differ diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/api/configuration/Config.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/api/configuration/Config.java similarity index 72% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/api/configuration/Config.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/api/configuration/Config.java index a5dc538fdb3793dbd92d564c08ad6d1139866306..0dbc2068f6c266d2447a75759f34d3b6ae2474c3 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/api/configuration/Config.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/api/configuration/Config.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.api.configuration; +package ch.ethz.sis.microservices.download.api.configuration; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/api/configuration/ServiceConfig.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/api/configuration/ServiceConfig.java similarity index 79% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/api/configuration/ServiceConfig.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/api/configuration/ServiceConfig.java index bd173c2835c751dc172251c5cd53acf755fdcffa..cf7545ef5b7d8c5695e759713540128a9594f8f0 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/api/configuration/ServiceConfig.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/api/configuration/ServiceConfig.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.api.configuration; +package ch.ethz.sis.microservices.download.api.configuration; import java.util.HashMap; diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/json/JSONObjectMapper.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/json/JSONObjectMapper.java similarity index 78% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/json/JSONObjectMapper.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/json/JSONObjectMapper.java index 83eaf3e9cfc209bc08441425b413f1c12bc06bcb..20682273fb35b6c20af158709af45e33a26c2fa3 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/json/JSONObjectMapper.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/json/JSONObjectMapper.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.json; +package ch.ethz.sis.microservices.download.server.json; import java.io.FileInputStream; diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/json/jackson/JacksonObjectMapper.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/json/jackson/JacksonObjectMapper.java similarity index 89% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/json/jackson/JacksonObjectMapper.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/json/jackson/JacksonObjectMapper.java index 3b94a6fbf26f6b7bafdfe06e1e77c77bd1790ffb..8821bac0747eb6906efc3d293bdc00f34ea9188b 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/json/jackson/JacksonObjectMapper.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/json/jackson/JacksonObjectMapper.java @@ -1,11 +1,11 @@ -package ch.ethz.sis.microservices.server.json.jackson; +package ch.ethz.sis.microservices.download.server.json.jackson; import java.io.FileInputStream; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import ch.ethz.sis.microservices.server.json.JSONObjectMapper; +import ch.ethz.sis.microservices.download.server.json.JSONObjectMapper; public class JacksonObjectMapper implements JSONObjectMapper { diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogFactory.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogFactory.java similarity index 55% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogFactory.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogFactory.java index b0695fc665686a64a43ba125408d60c4cc2f3d4b..c2ae5ee24a75a41c271589318f9241da7226c09f 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogFactory.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogFactory.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.logging; +package ch.ethz.sis.microservices.download.server.logging; public interface LogFactory { <T> Logger getLogger(Class<T> clazz); diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogFactoryFactory.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogFactoryFactory.java similarity index 76% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogFactoryFactory.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogFactoryFactory.java index 43eae4473b942ed66dbe2c884d250e3edc74b9e3..23d94da82515f78529f6afe33eac5b91c8a601d9 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogFactoryFactory.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogFactoryFactory.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.logging; +package ch.ethz.sis.microservices.download.server.logging; public class LogFactoryFactory { public LogFactory create(String logFactoryClass) throws Exception { diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogManager.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogManager.java similarity index 89% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogManager.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogManager.java index 1f96db4a711e0450512bbbe76b98bb2a9cdade6f..c1ef440056774de5e635f925496a3a289c8256c2 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/LogManager.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/LogManager.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.logging; +package ch.ethz.sis.microservices.download.server.logging; public class LogManager { private static LogFactory factory; diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/Logger.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/Logger.java similarity index 82% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/Logger.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/Logger.java index 93c296a11e88a6e4e7d37997dea222be5d7e3497..3e9c2742a4181728b33893860ac1a663d906baca 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/Logger.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/Logger.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.logging; +package ch.ethz.sis.microservices.download.server.logging; public interface Logger { diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/log4j/Log4J2LogFactory.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/log4j/Log4J2LogFactory.java similarity index 54% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/log4j/Log4J2LogFactory.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/log4j/Log4J2LogFactory.java index 5d43e3a32a26a0b509485254e442419f18e905dd..27cd6b6881f8f8127156313ca79664531a6f9054 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/log4j/Log4J2LogFactory.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/log4j/Log4J2LogFactory.java @@ -1,9 +1,9 @@ -package ch.ethz.sis.microservices.server.logging.log4j; +package ch.ethz.sis.microservices.download.server.logging.log4j; import org.apache.logging.log4j.LogManager; -import ch.ethz.sis.microservices.server.logging.LogFactory; -import ch.ethz.sis.microservices.server.logging.Logger; +import ch.ethz.sis.microservices.download.server.logging.LogFactory; +import ch.ethz.sis.microservices.download.server.logging.Logger; public class Log4J2LogFactory implements LogFactory { diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/log4j/Log4JLogger.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/log4j/Log4JLogger.java similarity index 92% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/log4j/Log4JLogger.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/log4j/Log4JLogger.java index 39a9eace264006cbd8af6203879baf3b578d1422..a605ec7a512362de61bf63422d483003001049a7 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/logging/log4j/Log4JLogger.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/logging/log4j/Log4JLogger.java @@ -1,11 +1,11 @@ -package ch.ethz.sis.microservices.server.logging.log4j; +package ch.ethz.sis.microservices.download.server.logging.log4j; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.spi.AbstractLogger; import org.apache.logging.log4j.spi.ExtendedLoggerWrapper; -class Log4JLogger extends ExtendedLoggerWrapper implements ch.ethz.sis.microservices.server.logging.Logger +class Log4JLogger extends ExtendedLoggerWrapper implements ch.ethz.sis.microservices.download.server.logging.Logger { private final String FQCN; diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/Service.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/Service.java similarity index 71% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/Service.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/Service.java index c38c32983ef25ec8eb04e017d72548724fe02605..0e9f65b8ab904497953450e778fd6f8961302684 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/Service.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/Service.java @@ -1,8 +1,8 @@ -package ch.ethz.sis.microservices.server.services; +package ch.ethz.sis.microservices.download.server.services; import javax.servlet.http.HttpServlet; -import ch.ethz.sis.microservices.api.configuration.ServiceConfig; +import ch.ethz.sis.microservices.download.api.configuration.ServiceConfig; public abstract class Service extends HttpServlet { diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/AbstractFileServiceHandler.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/AbstractFileServiceHandler.java similarity index 71% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/AbstractFileServiceHandler.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/AbstractFileServiceHandler.java index 7c28850e592c061eb3fbff48f534c4adebf2eb81..9f10304c1def85fb15b6e92f77eab0bf097561d3 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/AbstractFileServiceHandler.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/AbstractFileServiceHandler.java @@ -1,24 +1,21 @@ -package ch.ethz.sis.microservices.server.services.store; +package ch.ethz.sis.microservices.download.server.services.store; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; -import java.util.Deque; -import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedDeque; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import ch.ethz.sis.microservices.server.logging.LogManager; -import ch.ethz.sis.microservices.server.logging.Logger; -import ch.ethz.sis.microservices.server.services.Service; +import ch.ethz.sis.microservices.download.server.logging.LogManager; +import ch.ethz.sis.microservices.download.server.logging.Logger; +import ch.ethz.sis.microservices.download.server.services.Service; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.ContentCopy; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetchOptions; @@ -29,7 +26,6 @@ import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.DataSetFile; import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.fetchoptions.DataSetFileFetchOptions; import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.search.DataSetFileSearchCriteria; import ch.systemsx.cisd.common.spring.HttpInvokerUtils; -import lombok.Value; public abstract class AbstractFileServiceHandler extends Service { @@ -70,10 +66,10 @@ public abstract class AbstractFileServiceHandler extends Service Path pathToFile = getPathToFile(contentCopyPath, datasetPathToFile); if (isFileAccessible) { - success(pathToFile, response); + success(pathToFile, request, response); } else { - failure(pathToFile, response); + failure(pathToFile, request, response); } } @@ -85,9 +81,9 @@ public abstract class AbstractFileServiceHandler extends Service doAction(request, response); } - protected abstract void success(Path pathToFile, HttpServletResponse response) throws ServletException, IOException; + protected abstract void success(Path pathToFile, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; - protected abstract void failure(Path pathToFile, HttpServletResponse response) throws ServletException, IOException; + protected abstract void failure(Path pathToFile, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; private DataSet getDataset(String openbisURL, int openbisTimeout, String sessionToken, String datasetPermId, String externalDMSCode, String contentCopyPath) @@ -110,68 +106,17 @@ public abstract class AbstractFileServiceHandler extends Service } return null; } - - /* - * Less recently used cache - * Keeps maxSize items - */ - @Value - private static class LRUCache<KEY, VALUE> { - - int maxSize; - Map<KEY, VALUE> cacheByKey = new ConcurrentHashMap<>(); - Deque<KEY> cachePriority = new ConcurrentLinkedDeque<>(); - - public LRUCache(int maxSize) { - this.maxSize = maxSize; - } - - public void add(KEY key, VALUE value) { - // Remove if existing - if(cacheByKey.containsKey(key)) { - cacheByKey.remove(key); - cachePriority.remove(key); - } - - // Add again - cacheByKey.put(key, value); - cachePriority.addFirst(key); - - // Remove oldest if the list grow too much - if(cachePriority.size() > maxSize) { - cacheByKey.remove(cachePriority.removeLast()); - } - } - - public VALUE get(KEY key) { - // Refresh Prio - if(cacheByKey.containsKey(key)) { - cachePriority.remove(key); - cachePriority.addFirst(key); - } - - return cacheByKey.get(key); - } - - } - - private static LRUCache<String, List<DataSetFile>> cache = new LRUCache<>(1000); private DataSetFile getDatasetFile(String datastoreURL, int datastoreTimeout, String sessionToken, String datasetPermId, String datasetPathToFile) { - List<DataSetFile> files = cache.get(datasetPermId); - - if(files == null) { - IDataStoreServerApi v3Dss = HttpInvokerUtils.createServiceStub(IDataStoreServerApi.class, datastoreURL, datastoreTimeout); - DataSetFileSearchCriteria searchCriteria = new DataSetFileSearchCriteria(); - searchCriteria.withDataSet().withCode().thatEquals(datasetPermId); - DataSetFileFetchOptions fetchOptions = new DataSetFileFetchOptions(); - files = v3Dss.searchFiles(sessionToken, searchCriteria, fetchOptions).getObjects(); - cache.add(datasetPermId, files); - } - - for (DataSetFile file : files) + IDataStoreServerApi v3Dss = HttpInvokerUtils.createServiceStub(IDataStoreServerApi.class, datastoreURL, datastoreTimeout); + + DataSetFileSearchCriteria searchCriteria = new DataSetFileSearchCriteria(); + searchCriteria.withDataSet().withCode().thatEquals(datasetPermId); + DataSetFileFetchOptions fetchOptions = new DataSetFileFetchOptions(); + SearchResult<DataSetFile> files = v3Dss.searchFiles(sessionToken, searchCriteria, fetchOptions); + for (DataSetFile file : files.getObjects()) { if (file.getPath().equals(datasetPathToFile)) { diff --git a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/AbstractFileServiceTest.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/AbstractFileServiceTest.java similarity index 66% rename from microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/AbstractFileServiceTest.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/AbstractFileServiceTest.java index 4dcf5b8da81804b0506750573a26174e18c9f899..c7b0801bda745bd4fe586b099796343e1b58db73 100644 --- a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/AbstractFileServiceTest.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/AbstractFileServiceTest.java @@ -1,11 +1,11 @@ -package ch.ethz.sis.microservices.server.services.store; +package ch.ethz.sis.microservices.download.server.services.store; import java.util.HashMap; import java.util.Map; -import ch.ethz.sis.microservices.server.logging.LogManager; -import ch.ethz.sis.microservices.server.logging.log4j.Log4J2LogFactory; -import ch.ethz.sis.microservices.util.HttpClient; +import ch.ethz.sis.microservices.download.server.logging.LogManager; +import ch.ethz.sis.microservices.download.server.logging.log4j.Log4J2LogFactory; +import ch.ethz.sis.microservices.download.server.startup.HttpClient; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; import ch.systemsx.cisd.common.spring.HttpInvokerUtils; @@ -17,13 +17,13 @@ public class AbstractFileServiceTest LogManager.setLogFactory(new Log4J2LogFactory()); } - public static void test(String openbisURL, String serviceURL, String user, String pass) throws Exception + public static void test(String openbisURL, String serviceURL, String user, String pass, Long offset) throws Exception { // Service String externalDMSCode = "ADMIN-BS-MBPR28.D.ETHZ.CH-E96954A7"; - String contentCopyPath = "/Users/localadmin/obis_data/data"; - String datasetPermId = "20180131090547942-3"; - String datasetPathToFile = "file"; + String contentCopyPath = "/Users/localadmin/obis_data/data1"; + String datasetPermId = "20180523115921026-50"; + String datasetPathToFile = "openBIS-installation-standard-technologies-SNAPSHOT-r1526484921.tar.gz"; // Obtain session token from openBIS int timeout = 10000; @@ -36,11 +36,15 @@ public class AbstractFileServiceTest parameters.put("externalDMSCode", externalDMSCode); parameters.put("contentCopyPath", contentCopyPath); parameters.put("datasetPathToFile", datasetPathToFile); + if(offset != null) { + parameters.put("offset", offset.toString()); + } + long start = System.currentTimeMillis(); byte[] response = HttpClient.doGet(serviceURL, parameters); long end = System.currentTimeMillis(); - System.out.println(new String(response)); + System.out.println("Response Size: " + response.length); System.out.println("Time: " + (end - start)); } } diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandler.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..756ac3e5ac20b7317d30fadc1b150dbf1898f2a9 --- /dev/null +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandler.java @@ -0,0 +1,61 @@ +package ch.ethz.sis.microservices.download.server.services.store; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import ch.ethz.sis.microservices.download.server.logging.LogManager; +import ch.ethz.sis.microservices.download.server.logging.Logger; + +public class DownloadHandler extends AbstractFileServiceHandler +{ + private static Logger logger = LogManager.getLogger(DownloadHandler.class); + + @Override + protected void success(Path pathToFile, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + // Request parameters + String offsetP = request.getParameter("offset"); + long offset = 0; + if(offsetP != null) { + offset = Long.parseLong(offsetP); + } + + long size = Files.size(pathToFile) - offset; + if(size < 0) { + throw new IllegalArgumentException("offset to read starts beyond end of file"); + } + + // Response + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment; filename=" + pathToFile.getFileName().toString()); + response.setHeader("Content-Length", Long.toString(Files.size(pathToFile))); + + InputStream is = Files.newInputStream(pathToFile); + is.skip(offset); + copy(is, response.getOutputStream(), size); + + response.setStatus(HttpServletResponse.SC_OK); + } + + private static final int BUFFER_SIZE = 1024; + private static void copy(InputStream source, OutputStream destination, long sourceSize) throws IOException { + byte[] buf = new byte[BUFFER_SIZE]; + int readed; + while ((readed = source.read(buf)) > 0) { + destination.write(buf, 0, readed); + } + } + + @Override + protected void failure(Path pathToFile, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + } +} \ No newline at end of file diff --git a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/DownloadHandlerTest.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandlerTest.java similarity index 72% rename from microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/DownloadHandlerTest.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandlerTest.java index 0fd062dafd96a73b6f9a09ceb28a8c4f79892d0b..6cb1d6c796d8a3c872d52cb19c084a7eba98dc75 100644 --- a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/DownloadHandlerTest.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandlerTest.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.services.store; +package ch.ethz.sis.microservices.download.server.services.store; public class DownloadHandlerTest { @@ -9,6 +9,7 @@ public class DownloadHandlerTest "http://localhost:8888/openbis/openbis/rmi-application-server-v3", "http://localhost:8080/download", "admin", - "admin"); + "admin", + null); } } diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandlerWithOffsetTest.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandlerWithOffsetTest.java new file mode 100644 index 0000000000000000000000000000000000000000..12db6ca136e281325565e4d6c13449e13bbcfdf4 --- /dev/null +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/DownloadHandlerWithOffsetTest.java @@ -0,0 +1,15 @@ +package ch.ethz.sis.microservices.download.server.services.store; + +public class DownloadHandlerWithOffsetTest +{ + + public static void main(String[] args) throws Exception + { + AbstractFileServiceTest.test( + "http://localhost:8888/openbis/openbis/rmi-application-server-v3", + "http://localhost:8080/download", + "admin", + "admin", + 430129557L); + } +} diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/FileInfoHandler.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/FileInfoHandler.java similarity index 66% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/FileInfoHandler.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/FileInfoHandler.java index 016494ca535ea065e5d3ea3b4c9f74a3844ba927..51b4af38fad8fc2a328d0b3abaeacf0cdada68ba 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/FileInfoHandler.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/FileInfoHandler.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.services.store; +package ch.ethz.sis.microservices.download.server.services.store; import java.io.IOException; import java.nio.file.Path; @@ -6,11 +6,12 @@ import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import ch.ethz.sis.microservices.server.json.jackson.JacksonObjectMapper; -import ch.ethz.sis.microservices.server.logging.LogManager; -import ch.ethz.sis.microservices.server.logging.Logger; +import ch.ethz.sis.microservices.download.server.json.jackson.JacksonObjectMapper; +import ch.ethz.sis.microservices.download.server.logging.LogManager; +import ch.ethz.sis.microservices.download.server.logging.Logger; public class FileInfoHandler extends AbstractFileServiceHandler { @@ -35,13 +36,13 @@ public class FileInfoHandler extends AbstractFileServiceHandler } @Override - protected void success(Path pathToFile, HttpServletResponse response) throws ServletException, IOException + protected void success(Path pathToFile, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { writeOutput(response, HttpServletResponse.SC_OK, true); } @Override - protected void failure(Path pathToFile, HttpServletResponse response) throws ServletException, IOException + protected void failure(Path pathToFile, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { writeOutput(response, HttpServletResponse.SC_OK, false); } diff --git a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/FileInfoHandlerTest.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/FileInfoHandlerTest.java similarity index 68% rename from microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/FileInfoHandlerTest.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/FileInfoHandlerTest.java index 0c74198e2930172936b659c7449889469a84d40e..7b3c8c839f2d716ae23a2a67a200585d64666a3c 100644 --- a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/FileInfoHandlerTest.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/services/store/FileInfoHandlerTest.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.server.services.store; +package ch.ethz.sis.microservices.download.server.services.store; public class FileInfoHandlerTest { @@ -7,7 +7,8 @@ public class FileInfoHandlerTest AbstractFileServiceTest.test( "http://localhost:8888/openbis/openbis/rmi-application-server-v3", "http://localhost:8080/file-information", - "juanf", - "123"); + "admin", + "admin", + null); } } diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/util/HttpClient.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/HttpClient.java similarity index 97% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/util/HttpClient.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/HttpClient.java index 5e1ef57a354b9fb46c915d2173fdeeccab87ac1b..f4a35f881bfa766deb036c80d6c268cd3598d63b 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/util/HttpClient.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/HttpClient.java @@ -1,4 +1,4 @@ -package ch.ethz.sis.microservices.util; +package ch.ethz.sis.microservices.download.server.startup; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/Main.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..544ba43ad40ca287ae4d3d38e42ea3c7358937c7 --- /dev/null +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/Main.java @@ -0,0 +1,40 @@ +package ch.ethz.sis.microservices.download.server.startup; + +import java.io.File; +import java.io.FileInputStream; + +import ch.ethz.sis.microservices.download.api.configuration.Config; +import ch.ethz.sis.microservices.download.server.json.jackson.JacksonObjectMapper; +import ch.ethz.sis.microservices.download.server.logging.LogManager; +import ch.ethz.sis.microservices.download.server.logging.Logger; +import ch.ethz.sis.microservices.download.server.logging.log4j.Log4J2LogFactory; + +public class Main +{ + static + { + // Configuring Logging + LogManager.setLogFactory(new Log4J2LogFactory()); + } + + private static Logger logger = LogManager.getLogger(Main.class); + + public static void main(String[] args) throws Exception + { + logger.info("Current Workspace: " + (new File("").getAbsolutePath())); + + File configFile; + if (args.length < 1) + { + configFile = new File("config.json"); + logger.info("No arguments given, starting with default config file: " + (configFile.getAbsolutePath())); + } else + { + configFile = new File(args[0]); + } + + Config config = JacksonObjectMapper.getInstance().readValue(new FileInputStream(configFile), Config.class); + ServerLauncher servicesStarter = new ServerLauncher(config); + servicesStarter.getServer().join(); + } +} diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/startup/ServerLauncher.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/ServerLauncher.java similarity index 75% rename from microservice-server/src/main/java/ch/ethz/sis/microservices/server/startup/ServerLauncher.java rename to microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/ServerLauncher.java index e1196a9e23a6b2d6d4bf9034a6e8b47c532dc81e..6f44aa5a3303cda90b082ed5f33ace45698b065f 100644 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/startup/ServerLauncher.java +++ b/microservice-server/src/main/java/ch/ethz/sis/microservices/download/server/startup/ServerLauncher.java @@ -1,14 +1,14 @@ -package ch.ethz.sis.microservices.server.startup; +package ch.ethz.sis.microservices.download.server.startup; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.servlet.ServletHolder; -import ch.ethz.sis.microservices.api.configuration.Config; -import ch.ethz.sis.microservices.api.configuration.ServiceConfig; -import ch.ethz.sis.microservices.server.logging.LogManager; -import ch.ethz.sis.microservices.server.logging.Logger; -import ch.ethz.sis.microservices.server.services.Service; +import ch.ethz.sis.microservices.download.api.configuration.Config; +import ch.ethz.sis.microservices.download.api.configuration.ServiceConfig; +import ch.ethz.sis.microservices.download.server.logging.LogManager; +import ch.ethz.sis.microservices.download.server.logging.Logger; +import ch.ethz.sis.microservices.download.server.services.Service; public class ServerLauncher { diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/.DS_Store b/microservice-server/src/main/java/ch/ethz/sis/microservices/server/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 Binary files a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/.DS_Store and /dev/null differ diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/DownloadHandler.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/DownloadHandler.java deleted file mode 100644 index 3395c0d1e8398ef7b990f2bc9c8816e3833cbc29..0000000000000000000000000000000000000000 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/services/store/DownloadHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -package ch.ethz.sis.microservices.server.services.store; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletResponse; - -import ch.ethz.sis.microservices.server.logging.LogManager; -import ch.ethz.sis.microservices.server.logging.Logger; - -public class DownloadHandler extends AbstractFileServiceHandler -{ - private static Logger logger = LogManager.getLogger(DownloadHandler.class); - - @Override - protected void success(Path pathToFile, HttpServletResponse response) throws ServletException, IOException - { - response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition", "attachment; filename=" + pathToFile.getFileName().toString()); - response.setHeader("Content-Length", Long.toString(Files.size(pathToFile))); - Files.copy(pathToFile, response.getOutputStream()); - response.setStatus(HttpServletResponse.SC_OK); - } - - @Override - protected void failure(Path pathToFile, HttpServletResponse response) throws ServletException, IOException - { - response.setStatus(HttpServletResponse.SC_NOT_FOUND); - } -} \ No newline at end of file diff --git a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/startup/Main.java b/microservice-server/src/main/java/ch/ethz/sis/microservices/server/startup/Main.java deleted file mode 100644 index 9194cdb64d5ec35d4edf8ef7bcc627e9d4593468..0000000000000000000000000000000000000000 --- a/microservice-server/src/main/java/ch/ethz/sis/microservices/server/startup/Main.java +++ /dev/null @@ -1,47 +0,0 @@ -package ch.ethz.sis.microservices.server.startup; - -import java.io.File; -import java.io.FileInputStream; - -import ch.ethz.sis.microservices.api.configuration.Config; -import ch.ethz.sis.microservices.server.json.jackson.JacksonObjectMapper; -import ch.ethz.sis.microservices.server.logging.LogManager; -import ch.ethz.sis.microservices.server.logging.Logger; -import ch.ethz.sis.microservices.server.logging.log4j.Log4J2LogFactory; - -public class Main -{ - static - { - // Configuring Logging - LogManager.setLogFactory(new Log4J2LogFactory()); - } - - private static Logger logger = LogManager.getLogger(Main.class); - - public static void main(String[] args) throws Exception - { - logger.info("Current Workspace: " + (new File("").getAbsolutePath())); - - File configFile; - if (args.length < 1) - { - configFile = new File("./conf/config.json"); - if(configFile.exists()) { - logger.info("No arguments given, starting with default config file: " + (configFile.getAbsolutePath())); - } else { - configFile = new File("./config.json"); - if(configFile.exists()) { - logger.info("No arguments given, starting with default config file: " + (configFile.getAbsolutePath())); - } - } - } else - { - configFile = new File(args[0]); - } - - Config config = JacksonObjectMapper.getInstance().readValue(new FileInputStream(configFile), Config.class); - ServerLauncher servicesStarter = new ServerLauncher(config); - servicesStarter.getServer().join(); - } -} diff --git a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/.DS_Store b/microservice-server/src/test/java/ch/ethz/sis/microservices/server/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 Binary files a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/.DS_Store and /dev/null differ diff --git a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/.DS_Store b/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 Binary files a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/.DS_Store and /dev/null differ diff --git a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/.DS_Store b/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/.DS_Store deleted file mode 100644 index ead2009953af184cbc64f6aa27ab9ecfdc3e0470..0000000000000000000000000000000000000000 Binary files a/microservice-server/src/test/java/ch/ethz/sis/microservices/server/services/store/.DS_Store and /dev/null differ