From d21957c044fb85fd3c2bce67cedb13273e9c64fe Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Thu, 5 Nov 2015 10:18:56 +0000 Subject: [PATCH] SSDM-2706 : V3 AS API - create data sets (only metadata) - check that container is actually of container type SVN: 34996 --- .../dataset/SetDataSetContainedExecutor.java | 14 +++- .../dataset/SetDataSetContainerExecutor.java | 6 ++ .../systemtest/api/v3/CreateDataSetTest.java | 77 +++++++++++++++---- .../systemtest/api/v3/MapDataSetTest.java | 4 +- 4 files changed, 84 insertions(+), 17 deletions(-) diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainedExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainedExecutor.java index 145cd88521e..424243e17b6 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainedExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainedExecutor.java @@ -24,6 +24,7 @@ import ch.ethz.sis.openbis.generic.server.api.v3.executor.IOperationContext; import ch.ethz.sis.openbis.generic.server.api.v3.executor.entity.AbstractSetEntityToManyRelationExecutor; import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.DataSetCreation; import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.IDataSetId; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; /** @@ -45,9 +46,18 @@ public class SetDataSetContainedExecutor extends AbstractSetEntityToManyRelation { context.pushContextDescription("set contained for dataset " + container.getCode()); - for (DataPE aContained : contained) + if (false == contained.isEmpty()) { - relationshipService.assignDataSetToContainer(context.getSession(), aContained, container); + if (false == container.isContainer()) + { + throw new UserFailureException("Data set " + container.getCode() + + " is not of a container type therefore cannot have contained data sets."); + } + + for (DataPE aContained : contained) + { + relationshipService.assignDataSetToContainer(context.getSession(), aContained, container); + } } context.popContextDescription(); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainerExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainerExecutor.java index 23e158dd7fd..1faf3cddbc7 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainerExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetContainerExecutor.java @@ -24,6 +24,7 @@ import ch.ethz.sis.openbis.generic.server.api.v3.executor.IOperationContext; import ch.ethz.sis.openbis.generic.server.api.v3.executor.entity.AbstractSetEntityToManyRelationExecutor; import ch.ethz.sis.openbis.generic.shared.api.v3.dto.entity.dataset.DataSetCreation; import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.IDataSetId; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; /** @@ -47,6 +48,11 @@ public class SetDataSetContainerExecutor extends AbstractSetEntityToManyRelation for (DataPE container : containers) { + if (false == container.isContainer()) + { + throw new UserFailureException("Data set " + container.getCode() + + " is not of a container type therefore cannot be set as a container of data set " + contained.getCode() + "."); + } relationshipService.assignDataSetToContainer(context.getSession(), contained, container); } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/CreateDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/CreateDataSetTest.java index 43cde23180a..26f6f07fb34 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/CreateDataSetTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/CreateDataSetTest.java @@ -581,12 +581,32 @@ public class CreateDataSetTest extends AbstractDataSetTest } @Test - public void testCreateWithContainers() + public void testCreateWithContainersThatAreNonContainerDataSets() + { + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + + final DataSetCreation creation = physicalDataSetCreation(); + creation.setContainerIds(Collections.singletonList(new DataSetPermId("20081105092159111-1"))); + + assertUserFailureException(new IDelegatedAction() + { + + @Override + public void execute() + { + v3api.createDataSets(sessionToken, Arrays.asList(creation)); + } + }, "Data set 20081105092159111-1 is not of a container type therefore cannot be set as a container of data set " + + creation.getCode().toUpperCase() + "."); + } + + @Test + public void testCreateWithContainersThatAreContainerDataSets() { String sessionToken = v3api.login(TEST_USER, PASSWORD); DataSetCreation creation = physicalDataSetCreation(); - creation.setContainerIds(Collections.singletonList(new DataSetPermId("20081105092159111-1"))); + creation.setContainerIds(Collections.singletonList(new DataSetPermId("20110509092359990-10"))); DataSetFetchOptions fo = new DataSetFetchOptions(); fo.withContainers(); @@ -594,7 +614,7 @@ public class CreateDataSetTest extends AbstractDataSetTest DataSet dataSet = createDataSet(sessionToken, creation, fo); assertEquals(dataSet.getCode(), creation.getCode().toUpperCase()); - assertDataSetCodes(dataSet.getContainers(), "20081105092159111-1"); + assertDataSetCodes(dataSet.getContainers(), "20110509092359990-10"); } @Test @@ -602,9 +622,9 @@ public class CreateDataSetTest extends AbstractDataSetTest { final String sessionToken = v3api.login(TEST_USER, PASSWORD); - final DataSetCreation creation1 = physicalDataSetCreation(); - final DataSetCreation creation2 = physicalDataSetCreation(); - final DataSetCreation creation3 = physicalDataSetCreation(); + final DataSetCreation creation1 = containerDataSetCreation(); + final DataSetCreation creation2 = containerDataSetCreation(); + final DataSetCreation creation3 = containerDataSetCreation(); creation2.setContainerIds(Collections.singletonList(creation1.getCreationId())); creation3.setContainerIds(Collections.singletonList(creation2.getCreationId())); @@ -625,7 +645,7 @@ public class CreateDataSetTest extends AbstractDataSetTest { final String sessionToken = v3api.loginAs(TEST_USER, PASSWORD, TEST_SPACE_USER); - final IDataSetId containerId = new DataSetPermId("20081105092159111-1"); + final IDataSetId containerId = new DataSetPermId("20110509092359990-10"); final DataSetCreation creation = physicalDataSetCreation(); creation.setExperimentId(new ExperimentIdentifier("/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST")); creation.setContainerIds(Collections.singletonList(containerId)); @@ -641,11 +661,11 @@ public class CreateDataSetTest extends AbstractDataSetTest } @Test - public void testCreateWithContained() + public void testCreateWithContainedForContainerDataSet() { String sessionToken = v3api.login(TEST_USER, PASSWORD); - DataSetCreation creation = physicalDataSetCreation(); + DataSetCreation creation = containerDataSetCreation(); creation.setContainedIds(Collections.singletonList(new DataSetPermId("20081105092159111-1"))); DataSetFetchOptions fo = new DataSetFetchOptions(); @@ -657,14 +677,32 @@ public class CreateDataSetTest extends AbstractDataSetTest assertDataSetCodes(dataSet.getContained(), "20081105092159111-1"); } + @Test + public void testCreateWithContainedForNonContainerDataSet() + { + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + + final DataSetCreation creation = physicalDataSetCreation(); + creation.setContainedIds(Collections.singletonList(new DataSetPermId("20081105092159111-1"))); + + assertUserFailureException(new IDelegatedAction() + { + @Override + public void execute() + { + createDataSet(sessionToken, creation, new DataSetFetchOptions()); + } + }, "Data set " + creation.getCode().toUpperCase() + " is not of a container type therefore cannot have contained data sets."); + } + @Test public void testCreateWithContainedCircularDependency() { final String sessionToken = v3api.login(TEST_USER, PASSWORD); - final DataSetCreation creation1 = physicalDataSetCreation(); - final DataSetCreation creation2 = physicalDataSetCreation(); - final DataSetCreation creation3 = physicalDataSetCreation(); + final DataSetCreation creation1 = containerDataSetCreation(); + final DataSetCreation creation2 = containerDataSetCreation(); + final DataSetCreation creation3 = containerDataSetCreation(); creation2.setContainedIds(Collections.singletonList(creation1.getCreationId())); creation3.setContainedIds(Collections.singletonList(creation2.getCreationId())); @@ -686,7 +724,7 @@ public class CreateDataSetTest extends AbstractDataSetTest final String sessionToken = v3api.loginAs(TEST_USER, PASSWORD, TEST_SPACE_USER); final IDataSetId containedId = new DataSetPermId("20081105092159111-1"); - final DataSetCreation creation = physicalDataSetCreation(); + final DataSetCreation creation = containerDataSetCreation(); creation.setExperimentId(new ExperimentIdentifier("/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST")); creation.setContainedIds(Collections.singletonList(containedId)); @@ -1477,6 +1515,19 @@ public class CreateDataSetTest extends AbstractDataSetTest return creation; } + private DataSetCreation containerDataSetCreation() + { + String code = UUID.randomUUID().toString(); + + DataSetCreation creation = new DataSetCreation(); + creation.setCode(code); + creation.setTypeId(new EntityTypePermId("CONTAINER_TYPE")); + creation.setExperimentId(new ExperimentIdentifier("/CISD/NEMO/EXP1")); + creation.setDataStoreId(new DataStorePermId("STANDARD")); + creation.setCreationId(new CreationId(code)); + return creation; + } + private DataSetCreation linkDataSetCreation() { String code = UUID.randomUUID().toString(); diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java index 9cf0308b323..45961a327e6 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapDataSetTest.java @@ -510,7 +510,7 @@ public class MapDataSetTest extends AbstractDataSetTest } @Test - public void testMapWithExternalDataForPhysicalDataSet() + public void testMapWithPhysicalDataForPhysicalDataSet() { String sessionToken = v3api.login(TEST_USER, PASSWORD); @@ -564,7 +564,7 @@ public class MapDataSetTest extends AbstractDataSetTest } @Test - public void testMapWithExternalDataForContainerDataSet() + public void testMapWithPhysicalDataForContainerDataSet() { String sessionToken = v3api.login(TEST_USER, PASSWORD); -- GitLab