diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java index 63cbb08359312d96bcef199e58dfe42b0f3469de..1e730d4174db32402779f74d49ea14fe2af4bb14 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java @@ -114,18 +114,7 @@ public class UpdateDataSetLinkedDataExecutor implements IUpdateDataSetLinkedData } } - outer: for (IContentCopyId iid : update.getContentCopies().getRemoved()) - { - ContentCopyPermId id = (ContentCopyPermId) iid; - for (ContentCopyPE cc : entity.getContentCopies()) - { - if (id.getPermId().equals(cc.getId().toString())) - { - continue outer; - } - throw new UserFailureException("Trying to remove non-existing content copy " + id.getPermId()); - } - } + assertAllRemovalsExists(entity, update); entity.getContentCopies().removeAll(remove); for (ContentCopyPE cc : remove) @@ -136,4 +125,20 @@ public class UpdateDataSetLinkedDataExecutor implements IUpdateDataSetLinkedData addContentCopiesToLinkedDataExecutor.add(context, entity, update.getContentCopies().getAdded()); } } + + private void assertAllRemovalsExists(LinkDataPE entity, LinkedDataUpdate update) + { + outer: for (IContentCopyId iid : update.getContentCopies().getRemoved()) + { + ContentCopyPermId id = (ContentCopyPermId) iid; + for (ContentCopyPE cc : entity.getContentCopies()) + { + if (id.getPermId().equals(cc.getId().toString())) + { + continue outer; + } + } + throw new UserFailureException("Trying to remove non-existing content copy " + id.getPermId()); + } + } } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java index 6cd79744a9aaf99d0ca2c58a57dfd71c259e0504..327ff29a16e46c75639e923285ba91fcf3263d1a 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java @@ -384,6 +384,7 @@ public abstract class AbstractLinkDataSetTest extends AbstractExternalDmsTest { ExternalDmsAddressType.FILE_SYSTEM, null, null, null }, { ExternalDmsAddressType.FILE_SYSTEM, "code", null, null }, + { ExternalDmsAddressType.FILE_SYSTEM, "code", "/path", null }, { ExternalDmsAddressType.FILE_SYSTEM, "code", "/path", "hash" }, { ExternalDmsAddressType.FILE_SYSTEM, "code", null, "hash" }, { ExternalDmsAddressType.FILE_SYSTEM, null, null, "hash" } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java index cd3c94fd967b3c17cdf8d1f17f97956a01742386..1e87cfe0915dac14f5f975232a6e760f58d703c8 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java @@ -127,6 +127,19 @@ public class UpdateLinkDataSetTest extends AbstractLinkDataSetTest ContentCopyPermId ccid = new ContentCopyPermId(uuid()); update(dataset(id).without(ccid)); } + + @Test + void removeAllCopies() + { + ExternalDmsPermId dms = create(externalDms()); + DataSetPermId id = create(linkDataSet().with(copyAt(dms)).with(copyAt(dms))); + + List<ContentCopy> contentCopies = get(id).getLinkedData().getContentCopies(); + update(dataset(id).without(contentCopies.get(0).getId(), contentCopies.get(1).getId())); + + DataSet dataset = get(id); + assertThat(dataset.getLinkedData().getContentCopies().size(), is(0)); + } @Test void legacyExternalCodeCanBeSetOnSingleCopyOpenBISDms()