From 4179c288a66ae51395cca2c59e11e0195b732282 Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Fri, 28 May 2010 13:41:32 +0000 Subject: [PATCH] LMS-1503 Client can now transmit a new data set request to the server. SVN: 16189 --- .../dss/client/api/cli/CommandPut.java | 58 ++++++++++++++----- .../dss/client/api/v1/IDssComponent.java | 11 ++-- .../dss/client/api/v1/impl/DssComponent.java | 17 ++++-- .../server/api/v1/DssServiceRpcGeneric.java | 15 +++-- .../shared/api/v1/IDssServiceRpcGeneric.java | 6 +- .../generic/shared/api/v1/NewDataSetDTO.java | 28 +++------ 6 files changed, 84 insertions(+), 51 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/cli/CommandPut.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/cli/CommandPut.java index 632fe501d63..0f97b94a6f9 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/cli/CommandPut.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/cli/CommandPut.java @@ -17,9 +17,10 @@ package ch.systemsx.cisd.openbis.dss.client.api.cli; import java.io.File; -import java.io.InputStream; +import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; +import java.util.List; import ch.systemsx.cisd.args4j.CmdLineParser; import ch.systemsx.cisd.args4j.ExampleMode; @@ -27,7 +28,8 @@ import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.io.ConcatenatedFileInputStream; import ch.systemsx.cisd.openbis.dss.client.api.v1.IDssComponent; -import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssBuilder; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; /** @@ -66,35 +68,62 @@ class CommandPut extends AbstractCommand { private final CommandPutArguments arguments; - private final IDssServiceRpcGeneric dssService; + private final IDssComponent component; - CommandPutExecutor(IDssServiceRpcGeneric dssService, CommandPutArguments arguments) + CommandPutExecutor(IDssComponent dssService, CommandPutArguments arguments) { this.arguments = arguments; - this.dssService = dssService; + this.component = dssService; } int execute() { - NewDataSetDTO newDataSet = getNewDataSet(); - dssService.putDataSet("", newDataSet); + try + { + NewDataSetDTO newDataSet = getNewDataSet(); + if (newDataSet.getFileInfos().isEmpty()) + { + System.err.println("Data set file does not exist"); + return -1; + } + ConcatenatedFileInputStream fileInputStream = + new ConcatenatedFileInputStream(true, getFilesForFileInfos(newDataSet + .getFileInfos())); + component.putDataSet(newDataSet, fileInputStream); + } catch (IOException e) + { + e.printStackTrace(); + return -1; + } return 0; } - private NewDataSetDTO getNewDataSet() + private NewDataSetDTO getNewDataSet() throws IOException { String storageProcessName = arguments.getStorageProcess(); String filePath = arguments.getFilePath(); - InputStream fileInputStream = - new ConcatenatedFileInputStream(true, getFilesFromPath(filePath)); - return new NewDataSetDTO(storageProcessName, filePath, fileInputStream); + ArrayList<FileInfoDssDTO> fileInfos = getFileInfosForPath(filePath); + return new NewDataSetDTO(storageProcessName, fileInfos); } - private ArrayList<File> getFilesFromPath(String path) + private ArrayList<FileInfoDssDTO> getFileInfosForPath(String path) throws IOException + { + ArrayList<FileInfoDssDTO> fileInfos = new ArrayList<FileInfoDssDTO>(); + File file = new File(path); + if (false == file.exists()) + { + return fileInfos; + } + FileInfoDssBuilder builder = new FileInfoDssBuilder(path, path); + builder.appendFileInfosForFile(file, fileInfos, true); + return fileInfos; + } + + private ArrayList<File> getFilesForFileInfos(List<FileInfoDssDTO> fileInfos) { ArrayList<File> files = new ArrayList<File>(); - + return files; } } @@ -126,8 +155,7 @@ class CommandPut extends AbstractCommand } IDssComponent component = login(arguments); - IDssServiceRpcGeneric dssService = component.getDefaultDssService(); - return new CommandPutExecutor(dssService, arguments).execute(); + return new CommandPutExecutor(component, arguments).execute(); } public String getName() diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/IDssComponent.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/IDssComponent.java index 00645ff158e..4e05e441129 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/IDssComponent.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/IDssComponent.java @@ -18,7 +18,8 @@ package ch.systemsx.cisd.openbis.dss.client.api.v1; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.InvalidSessionException; -import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric; +import ch.systemsx.cisd.common.io.ConcatenatedFileInputStream; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; /** * A component that manages a connection to openBIS and 1 or more data store servers. @@ -65,14 +66,16 @@ public interface IDssComponent EnvironmentFailureException; /** - * Get a proxy to the default DSS server for the openBIS AS. + * Upload a new data set to the DSS. * + * @param newDataset The new data set that should be registered + * @param inputStream An input stream on the file or folder to register. * @throws IllegalStateException Thrown if the user has not yet been authenticated. * @throws EnvironmentFailureException Thrown in cases where it is not possible to connect to * the server. */ - public IDssServiceRpcGeneric getDefaultDssService() throws IllegalStateException, - EnvironmentFailureException; + public void putDataSet(NewDataSetDTO newDataset, ConcatenatedFileInputStream inputStream) + throws IllegalStateException, EnvironmentFailureException; /** * Logs the current user out. diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponent.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponent.java index 76ed7de5587..39e7c04d26d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponent.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponent.java @@ -28,10 +28,12 @@ import ch.systemsx.cisd.common.api.RpcServiceInterfaceVersionDTO; import ch.systemsx.cisd.common.exceptions.AuthorizationFailureException; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.InvalidSessionException; +import ch.systemsx.cisd.common.io.ConcatenatedFileInputStream; import ch.systemsx.cisd.openbis.dss.client.api.v1.IDataSetDss; import ch.systemsx.cisd.openbis.dss.client.api.v1.IDssComponent; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; import ch.systemsx.cisd.openbis.generic.shared.IETLLIMSService; import ch.systemsx.cisd.openbis.generic.shared.OpenBisServiceFactory; import ch.systemsx.cisd.openbis.generic.shared.ResourceNames; @@ -178,10 +180,10 @@ public class DssComponent implements IDssComponent state = new AuthenticatedState(openBisService, dssServiceFactory, state.getSessionToken()); } - public IDssServiceRpcGeneric getDefaultDssService() throws IllegalStateException, - EnvironmentFailureException + public void putDataSet(NewDataSetDTO newDataset, ConcatenatedFileInputStream inputStream) + throws IllegalStateException, EnvironmentFailureException { - return state.getDefaultDssService(); + state.putDataSet(newDataset, inputStream); } } @@ -212,7 +214,8 @@ abstract class AbstractDssComponentState implements IDssComponent throw new IllegalStateException("Please log in"); } - public IDssServiceRpcGeneric getDefaultDssService() throws IllegalStateException + public void putDataSet(NewDataSetDTO newDataset, ConcatenatedFileInputStream inputStream) + throws IllegalStateException, EnvironmentFailureException { throw new IllegalStateException("Please log in"); } @@ -340,10 +343,12 @@ class AuthenticatedState extends AbstractDssComponentState } @Override - public IDssServiceRpcGeneric getDefaultDssService() + public void putDataSet(NewDataSetDTO newDataset, ConcatenatedFileInputStream inputStream) + throws IllegalStateException, EnvironmentFailureException { String url = service.getDefaultDataStoreBaseURL(sessionToken); - return getDssServiceForUrl(url); + IDssServiceRpcGeneric dssService = getDssServiceForUrl(url); + dssService.putDataSet(sessionToken, newDataset, inputStream); } /** diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java index fe3aab7cca6..f0f0df34b7c 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java @@ -87,10 +87,17 @@ public class DssServiceRpcGeneric extends AbstractDssServiceRpc implements IDssS } } - public void putDataSet(String sessionToken, NewDataSetDTO newDataSet) + public void putDataSet(String sessionToken, NewDataSetDTO newDataSet, InputStream inputStream) throws IOExceptionUnchecked, IllegalArgumentException { - System.out.println("Put " + newDataSet); + System.out.println("put " + newDataSet); + try + { + inputStream.close(); + } catch (IOException ex) + { + + } } public int getMajorVersion() @@ -129,8 +136,8 @@ public class DssServiceRpcGeneric extends AbstractDssServiceRpc implements IDssS .getPath()); } - public FileInfoDssDTO[] listFilesForDataSet(String sessionToken, - DataSetFileDTO fileOrFolder) throws IOExceptionUnchecked, IllegalArgumentException + public FileInfoDssDTO[] listFilesForDataSet(String sessionToken, DataSetFileDTO fileOrFolder) + throws IOExceptionUnchecked, IllegalArgumentException { return this.listFilesForDataSet(sessionToken, fileOrFolder.getDataSetCode(), fileOrFolder .getPath(), fileOrFolder.isRecursive()); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/IDssServiceRpcGeneric.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/IDssServiceRpcGeneric.java index 7dcfc8eb76d..8f2e1c9bc10 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/IDssServiceRpcGeneric.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/IDssServiceRpcGeneric.java @@ -82,9 +82,11 @@ public interface IDssServiceRpcGeneric extends IRpcService * * @param sessionToken The session token * @param newDataset The new data set that should be registered + * @param inputStream An input stream on the file or folder to register * @throws IOExceptionUnchecked Thrown if an IOException occurs when listing the files * @throws IllegalArgumentException Thrown if the dataSetCode or startPath are not valid */ - public void putDataSet(String sessionToken, NewDataSetDTO newDataset) - throws IOExceptionUnchecked, IllegalArgumentException; + public void putDataSet(String sessionToken, NewDataSetDTO newDataset, + InputStream inputStream) throws IOExceptionUnchecked, + IllegalArgumentException; } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java index bfead09d00f..1bcdb9ca3ac 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTO.java @@ -16,14 +16,12 @@ package ch.systemsx.cisd.openbis.dss.generic.shared.api.v1; -import java.io.InputStream; import java.io.Serializable; +import java.util.List; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; -import ch.systemsx.cisd.common.io.ConcatenatedFileInputStream; - /** * Represents a new data set that the DSS should register. * <p> @@ -38,22 +36,17 @@ public class NewDataSetDTO implements Serializable private final String storageProcessName; - private final String fileName; - - private final InputStream inputStream; + private final List<FileInfoDssDTO> fileInfos; /** * Constructor * * @param storageProcessName The storage process that should handle this data set - * @param inputStream An input stream on the file or folder to register. If a folder is to be - * registered, the input stream must be a {@link ConcatenatedFileInputStream}. */ - public NewDataSetDTO(String storageProcessName, String fileName, InputStream inputStream) + public NewDataSetDTO(String storageProcessName, List<FileInfoDssDTO> fileInfos) { this.storageProcessName = storageProcessName; - this.fileName = fileName; - this.inputStream = inputStream; + this.fileInfos = fileInfos; } public String getStorageProcessName() @@ -61,22 +54,17 @@ public class NewDataSetDTO implements Serializable return storageProcessName; } - public String getFileName() - { - return fileName; - } - - public InputStream getInputStream() + public List<FileInfoDssDTO> getFileInfos() { - return inputStream; + return fileInfos; } @Override public String toString() { ToStringBuilder sb = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE); - sb.append("storageProcess", getStorageProcessName()); - sb.append("fileName", getFileName()); + sb.append(getStorageProcessName()); + sb.append(getFileInfos()); return sb.toString(); } } -- GitLab