From 160c14ae7fcd2c5f03908785b1405dbfeea4975e Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Mon, 9 Nov 2015 12:49:55 +0000 Subject: [PATCH] SSDM-2706 : V3 AS API - create data sets (only metadata) - throw an exception when PhysicalData/LinkedData is set for a data set which is not physical/linked + tests SVN: 35012 --- .../dataset/SetDataSetLinkedDataExecutor.java | 22 +++--- .../SetDataSetPhysicalDataExecutor.java | 22 +++--- .../systemtest/api/v3/CreateDataSetTest.java | 72 +++++++++++++++++++ 3 files changed, 98 insertions(+), 18 deletions(-) diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetLinkedDataExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetLinkedDataExecutor.java index 729242e4ec3..7edb5fd7431 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetLinkedDataExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetLinkedDataExecutor.java @@ -44,26 +44,30 @@ public class SetDataSetLinkedDataExecutor implements ISetDataSetLinkedDataExecut for (Map.Entry<DataSetCreation, DataPE> entry : entitiesMap.entrySet()) { DataSetCreation creation = entry.getKey(); + LinkedDataCreation linkedCreation = creation.getLinkedData(); DataPE entity = entry.getValue(); if (entity instanceof LinkDataPE) { - set(context, creation, (LinkDataPE) entity); + if (linkedCreation == null) + { + throw new UserFailureException("Linked data cannot be null for a link data set."); + } + set(context, linkedCreation, (LinkDataPE) entity); + } else + { + if (linkedCreation != null) + { + throw new UserFailureException("Linked data cannot be set for a non-link data set."); + } } } setDataSetExternalDmsExecutor.set(context, entitiesMap); } - private void set(IOperationContext context, DataSetCreation creation, LinkDataPE dataSet) + private void set(IOperationContext context, LinkedDataCreation linkedCreation, LinkDataPE dataSet) { - LinkedDataCreation linkedCreation = creation.getLinkedData(); - - if (linkedCreation == null) - { - throw new UserFailureException("Linked data cannot be null for a link data set."); - } - dataSet.setExternalCode(linkedCreation.getExternalCode()); } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetPhysicalDataExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetPhysicalDataExecutor.java index 9d9abb1e0e0..19e6b0d0707 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetPhysicalDataExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/dataset/SetDataSetPhysicalDataExecutor.java @@ -52,11 +52,22 @@ public class SetDataSetPhysicalDataExecutor implements ISetDataSetPhysicalDataEx for (Map.Entry<DataSetCreation, DataPE> entry : entitiesMap.entrySet()) { DataSetCreation creation = entry.getKey(); + PhysicalDataCreation physicalCreation = creation.getPhysicalData(); DataPE entity = entry.getValue(); if (entity instanceof ExternalDataPE) { - set(context, creation, (ExternalDataPE) entity); + if (physicalCreation == null) + { + throw new UserFailureException("Physical data cannot be null for a physical data set."); + } + set(context, physicalCreation, (ExternalDataPE) entity); + } else + { + if (physicalCreation != null) + { + throw new UserFailureException("Physical data cannot be set for a non-physical data set."); + } } } @@ -65,15 +76,8 @@ public class SetDataSetPhysicalDataExecutor implements ISetDataSetPhysicalDataEx setDataSetLocatorTypeExecutor.set(context, entitiesMap); } - private void set(IOperationContext context, DataSetCreation creation, ExternalDataPE dataSet) + private void set(IOperationContext context, PhysicalDataCreation physicalCreation, ExternalDataPE dataSet) { - PhysicalDataCreation physicalCreation = creation.getPhysicalData(); - - if (physicalCreation == null) - { - throw new UserFailureException("Physical data cannot be null for a physical data set."); - } - dataSet.setShareId(physicalCreation.getShareId()); dataSet.setLocation(physicalCreation.getLocation()); 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 26f6f07fb34..d80a3c1fa3a 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 @@ -952,6 +952,24 @@ public class CreateDataSetTest extends AbstractDataSetTest assertNull(dataSet.getLinkedData()); } + @Test + public void testCreatePhysicalDataSetWithPhysicalDataNotNullAndLinkedDataNotNull() + { + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + + final DataSetCreation creation = physicalDataSetCreation(); + creation.setLinkedData(new LinkedDataCreation()); + + assertUserFailureException(new IDelegatedAction() + { + @Override + public void execute() + { + createDataSet(sessionToken, creation, new DataSetFetchOptions()); + } + }, "Linked data cannot be set for a non-link data set."); + } + @Test public void testCreatePhysicalDataSetWithPhysicalDataNull() { @@ -1388,6 +1406,42 @@ public class CreateDataSetTest extends AbstractDataSetTest assertEquals(dataSet.getContained().iterator().next().getCode(), "20081105092159188-3"); } + @Test + public void testCreateContainerDataSetWithPhysicalDataNotNull() + { + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + + final DataSetCreation creation = containerDataSetCreation(); + creation.setPhysicalData(new PhysicalDataCreation()); + + assertUserFailureException(new IDelegatedAction() + { + @Override + public void execute() + { + createDataSet(sessionToken, creation, new DataSetFetchOptions()); + } + }, "Physical data cannot be set for a non-physical data set."); + } + + @Test + public void testCreateContainerDataSetWithLinkedDataNotNull() + { + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + + final DataSetCreation creation = containerDataSetCreation(); + creation.setLinkedData(new LinkedDataCreation()); + + assertUserFailureException(new IDelegatedAction() + { + @Override + public void execute() + { + createDataSet(sessionToken, creation, new DataSetFetchOptions()); + } + }, "Linked data cannot be set for a non-link data set."); + } + @Test public void testCreateLinkDataSetWithLinkedDataNotNull() { @@ -1421,6 +1475,24 @@ public class CreateDataSetTest extends AbstractDataSetTest assertNull(dataSet.getPhysicalData()); } + @Test + public void testCreateLinkDataSetWithLinkedDataNotNullAndPhyscialDataNotNull() + { + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + + final DataSetCreation creation = linkDataSetCreation(); + creation.setPhysicalData(new PhysicalDataCreation()); + + assertUserFailureException(new IDelegatedAction() + { + @Override + public void execute() + { + createDataSet(sessionToken, creation, new DataSetFetchOptions()); + } + }, "Physical data cannot be set for a non-physical data set."); + } + @Test public void testCreateLinkDataSetWithLinkedDataNull() { -- GitLab