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 729242e4ec3ac97a768486d9955ab7a482aa9d6f..7edb5fd7431ea45c4933a59f2d20016c9aeaa58d 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 9d9abb1e0e0ee8749c778f296164a6cfde94b5bd..19e6b0d070782a088c3938d5f4dc346f6b55a175 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 26f6f07fb340f7ecb2d62a6f727769dcd157ee33..d80a3c1fa3a5f38fe8e2bb8dd2bb8ec4a7571d03 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() {