diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetExecutor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetExecutor.java index 9759da99dd5da65495c6f3027b31fca87a71951e..8ca00943510e01c3d2801b1bb9fa3fec08161551 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetExecutor.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetExecutor.java @@ -162,11 +162,12 @@ class PutDataSetExecutor implements IDataSetHandlerRpc /** * Run the put command; does *not* close the input stream — clients of the executor are expected to close the input stream when appropriate. * + * @param noOwnerAllowed <code>true</code> if missing data set owner is allowed. This is the case for custom import. * @throws IOException */ - public List<DataSetInformation> execute() throws UserFailureException, IOException + public List<DataSetInformation> execute(boolean noOwnerAllowed) throws UserFailureException, IOException { - PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet); + PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet, noOwnerAllowed); writeDataSetToTempDirectory(); overrideOrNull = null; @@ -186,7 +187,7 @@ class PutDataSetExecutor implements IDataSetHandlerRpc */ public List<DataSetInformation> executeWithoutWriting() throws UserFailureException { - PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet); + PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet, false); overrideOrNull = null; 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 af25b6b502ff2d3ee584282326d81e6eb03f3565..c5e75e0e6f6faa4670e4ed8c85c0d3236573f544 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 @@ -156,13 +156,13 @@ public class PutDataSetService new PutDataSetExecutor(this, ((PutDataSetServerPluginHolder) registrator).getPlugin(), sessionToken, createNewDataSetDTO(customImportFile), - getAsInputStream(customImportFile)).execute(); + getAsInputStream(customImportFile)).execute(true); } else { infos = new PutDataSetTopLevelDataSetHandler(this, registrator, sessionToken, createNewDataSetDTO(customImportFile), - getAsInputStream(customImportFile)).execute(); + getAsInputStream(customImportFile)).execute(true); } StringBuilder sb = new StringBuilder(); for (DataSetInformation info : infos) @@ -220,12 +220,12 @@ public class PutDataSetService infos = new PutDataSetExecutor(this, ((PutDataSetServerPluginHolder) registrator).getPlugin(), - sessionToken, newDataSet, inputStream).execute(); + sessionToken, newDataSet, inputStream).execute(false); } else { infos = new PutDataSetTopLevelDataSetHandler(this, registrator, sessionToken, - newDataSet, inputStream).execute(); + newDataSet, inputStream).execute(false); } StringBuilder sb = new StringBuilder(); for (DataSetInformation info : infos) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java index 74c7015ad95f6cc0693e0f3be5fe401e5115f4fb..abc85f9fb6e4117f3b628b2b39a1652661c390ef 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java @@ -173,11 +173,12 @@ class PutDataSetTopLevelDataSetHandler /** * Run the put command; does *not* close the input stream — clients of the executor are expected to close the input stream when appropriate. * + * @param noOwnerAllowed <code>true</code> if missing data set owner is allowed. This is the case for custom import. * @throws IOException */ - public List<DataSetInformation> execute() throws UserFailureException, IOException + public List<DataSetInformation> execute(boolean noOwnerAllowed) throws UserFailureException, IOException { - PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet); + PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet, noOwnerAllowed); writeDataSetToTempDirectory(); @@ -198,7 +199,7 @@ class PutDataSetTopLevelDataSetHandler */ public List<DataSetInformation> executeWithoutWriting() throws UserFailureException { - PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet); + PutDataSetUtil.checkAccess(sessionToken, getOpenBisService(), newDataSet, false); // Register the data set try diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetUtil.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetUtil.java index 558dd67e92a14b134fc1f39be4e98785c4f674da..e4e52ccca45e18ba1379d49a48f5cc6d6c53d2b4 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetUtil.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetUtil.java @@ -27,7 +27,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO.DataSetO public class PutDataSetUtil { - public static void checkAccess(String sessionToken, IEncapsulatedOpenBISService service, NewDataSetDTO newDataSet) + public static void checkAccess(String sessionToken, IEncapsulatedOpenBISService service, NewDataSetDTO newDataSet, boolean noOwnerAllowed) { if (newDataSet == null) { @@ -38,6 +38,10 @@ public class PutDataSetUtil if (owner == null) { + if (noOwnerAllowed) + { + return; + } throw new UserFailureException("Owner of a new data set cannot be null"); } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandlerTest.java index 6966523d5fb0f3ce87d9ebc6ab8c94a0504309d1..e833e853cf1d803d5fb74d716e40581cbcc64e1c 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandlerTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandlerTest.java @@ -182,7 +182,7 @@ public class PutDataSetTopLevelDataSetHandlerTest extends AbstractFileSystemTest new PutDataSetTopLevelDataSetHandler(putDataSetService, registrator, SESSION_TOKEN, newDataSet, inputStream); - handler.execute(); + handler.execute(false); assertEquals("MY-TYPE", dataSetInfoMatcher.recordedObject().getDataSetType().getCode()); List<NewProperty> dataSetProperties = @@ -230,7 +230,7 @@ public class PutDataSetTopLevelDataSetHandlerTest extends AbstractFileSystemTest new PutDataSetTopLevelDataSetHandler(putDataSetService, registrator, SESSION_TOKEN, newDataSet, inputStream); - handler.execute(); + handler.execute(false); assertEquals(null, dataSetInfoMatcher.recordedObject().getDataSetType()); assertEquals(0, dataSetInfoMatcher.recordedObject().getDataSetProperties().size());