diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java index c4f42f17cb6f9f015cda576d2473c54c82210d7c..723e51c55b43945509f79d7d98d67e2f9b44c591 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java @@ -273,6 +273,11 @@ public class PutDataSetService implements IPutDataSetService public List<DataSetInformation> putDataSet(String sessionToken, NewDataSetDTO newDataSet, String uploadId) throws IOExceptionUnchecked, IllegalArgumentException { + if (newDataSet == null) + { + throw new UserFailureException("New data set cannot be null"); + } + if (false == isInitialized) { doInitialization(); @@ -280,37 +285,59 @@ public class PutDataSetService implements IPutDataSetService validateSessionToken(sessionToken); validateUploadId(uploadId); - if (newDataSet == null) + + ServiceProvider.getOpenBISService().checkSession(sessionToken); + + File sessionWorkspaceUploadDir = new File(new File(sessionWorkspace, sessionToken), uploadId); + + List<DataSetInformation> result = null; + if (sessionWorkspaceUploadDir.exists()) { - throw new UserFailureException("New data set cannot be null"); + result = putDataSetFromSessionWorkspaceFileUpload(sessionToken, newDataSet, uploadId); + } else { + result = putDataSetFromStoreShareFileUpload(sessionToken, newDataSet, uploadId); } + return result; + } - ServiceProvider.getOpenBISService().checkSession(sessionToken); + private List<DataSetInformation> putDataSetFromSessionWorkspaceFileUpload(String sessionToken, NewDataSetDTO newDataSet, String uploadId) + throws IOExceptionUnchecked, IllegalArgumentException { + String dataSetType = newDataSet.tryDataSetType(); + ITopLevelDataSetRegistrator registrator = registratorMap.getRegistratorForType(dataSetType); + + File tempIncomingDir = new File(new File(sessionWorkspace, sessionToken), uploadId); + + File[] filesInIncomingDir = tempIncomingDir.listFiles(); + if (filesInIncomingDir.length != 1) { + throw new UserFailureException("Unexpected state, incoming directory should contain just one file or folder but found: " + filesInIncomingDir.length); + } + + if (registrator instanceof PutDataSetServerPluginHolder) + { + return new PutDataSetExecutor(this, ((PutDataSetServerPluginHolder) registrator).getPlugin(), sessionToken, newDataSet, tempIncomingDir, + filesInIncomingDir[0]).executeWithoutWriting(); + } else + { + return new PutDataSetTopLevelDataSetHandler(this, registrator, sessionToken, newDataSet, tempIncomingDir, filesInIncomingDir[0]).executeWithoutWriting(); + } + } + + private List<DataSetInformation> putDataSetFromStoreShareFileUpload(String sessionToken, NewDataSetDTO newDataSet, String uploadId) + throws IOExceptionUnchecked, IllegalArgumentException { String dataSetType = newDataSet.tryDataSetType(); ITopLevelDataSetRegistrator registrator = registratorMap.getRegistratorForType(dataSetType); - // TODO: here look in the session workspace. File sessionUploadDir = new File(getTemporaryIncomingRoot(dataSetType), sessionToken); File uploadIdDir = new File(sessionUploadDir, uploadId); - System.out.println("uploadIdDir = " + uploadIdDir); - File multipleFilesUploadDir = new File(uploadIdDir, MULTIPLE_FILES_UPLOAD_DIR); - System.out.println("multipleFilesUploadDir = " + multipleFilesUploadDir); - - File sessionWorkspaceUploadDir = new File(sessionWorkspace, sessionToken); - System.out.println("multipleFilesUploadDir = " + multipleFilesUploadDir); File[] uploadedFiles = null; File dataSet = null; - if (multipleFilesUploadDir.isDirectory()) + if (multipleFilesUploadDir.exists() && multipleFilesUploadDir.isDirectory()) { uploadedFiles = multipleFilesUploadDir.listFiles(); - } else if (sessionWorkspaceUploadDir.isDirectory()) - { - // TODO: use atomic move in this case. - uploadedFiles = sessionWorkspaceUploadDir.listFiles(); } if (uploadedFiles == null || uploadedFiles.length == 0) diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java index eda8306e40f685d07c8faf30e0f70cf6fc0aaf62..68126e7015efeccb51e97c993302d9d8925cf504 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java @@ -5,6 +5,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentIdentifier; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SampleIdentifier; import ch.ethz.sis.openbis.generic.dssapi.v3.IDataStoreServerApi; import ch.ethz.sis.openbis.generic.dssapi.v3.dto.dataset.create.UploadedDataSetCreation; import ch.systemsx.cisd.common.exceptions.UserFailureException; @@ -95,7 +96,9 @@ public class OpenBISAPI { public String uploadFileWorkspaceDSS(final Path fileOrFolder) { - return uploadFileWorkspaceDSS(fileOrFolder.toFile(), null); + String uploadId = uploadFileWorkspaceDSSEmptyDir(UUID.randomUUID().toString()); + uploadFileWorkspaceDSS(fileOrFolder.toFile(), uploadId); + return uploadId; } //