From 1bceb7cf50103158c30c16e3245cdcf72679f492 Mon Sep 17 00:00:00 2001
From: juanf <juanf@ethz.ch>
Date: Fri, 12 Aug 2022 12:56:42 +0200
Subject: [PATCH] SSDM-12864 : Updated parents/children delete behaviour

---
 .../importer/helper/SampleImportHelper.java   | 82 ++++++++++++-------
 1 file changed, 52 insertions(+), 30 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleImportHelper.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleImportHelper.java
index 79b7bfac070..98b3e989752 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleImportHelper.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleImportHelper.java
@@ -276,53 +276,75 @@ public class SampleImportHelper extends BasicImportHelper
 
         // Start - Special case -> Remove parents / children & Special case -> Sample Variables
         Sample originSample = delayedExecutor.getSample(sampleId, fetchOptions);
-        Set<SampleIdentifier> parentIds = new HashSet<>();
-        if (parents != null && !parents.isEmpty())
+
+        if (parents == null || parents.isEmpty())
         {
-            for (String parent : parents.split("\n"))
+            // Skip empty values to avoid deleting by mistake
+        } else
+        {
+            Set<SampleIdentifier> parentIds = new HashSet<>();
+            if (parents.equals("--DELETE--") || parents.equals("__DELETE__"))
             {
-                if (parent.startsWith(VARIABLE_PREFIX))
-                {
-                    update.getParentIds().add(new IdentifierVariable(parent));
-                } else
+                // Delete missing = all
+            } else // Delete missing
+            {
+                for (String parent : parents.split("\n"))
                 {
-                    SampleIdentifier parentId = new SampleIdentifier(parent);
-                    update.getParentIds().add(parentId);
-                    parentIds.add(parentId);
+                    if (parent.startsWith(VARIABLE_PREFIX))
+                    {
+                        update.getParentIds().add(new IdentifierVariable(parent));
+                    } else
+                    {
+                        SampleIdentifier parentId = new SampleIdentifier(parent);
+                        update.getParentIds().add(parentId);
+                        parentIds.add(parentId);
+                    }
                 }
             }
-        }
-        for (Sample parent : originSample.getParents())
-        {
-            if (!parentIds.contains(parent.getIdentifier()))
+
+            for (Sample parent : originSample.getParents())
             {
-                update.getParentIds().remove(parent.getIdentifier());
+                if (!parentIds.contains(parent.getIdentifier()))
+                {
+                    update.getParentIds().remove(parent.getIdentifier());
+                }
             }
         }
 
-        Set<SampleIdentifier> childrenIds = new HashSet<>();
-        if (children != null && !children.isEmpty())
+        if (children == null || children.isEmpty())
         {
-            for (String child : children.split("\n"))
+            // Skip empty values to avoid deleting by mistake
+        } else
+        {
+            Set<SampleIdentifier> childrenIds = new HashSet<>();
+            if (children.equals("--DELETE--") || children.equals("__DELETE__"))
             {
-                if (child.startsWith(VARIABLE_PREFIX))
-                {
-                    update.getChildIds().add(new IdentifierVariable(child));
-                } else
+                // Delete missing = all
+            } else // Delete missing
+            {
+                for (String child : children.split("\n"))
                 {
-                    SampleIdentifier childId = new SampleIdentifier(child);
-                    update.getChildIds().add(childId);
-                    childrenIds.add(childId);
+                    if (child.startsWith(VARIABLE_PREFIX))
+                    {
+                        update.getChildIds().add(new IdentifierVariable(child));
+                    } else
+                    {
+                        SampleIdentifier childId = new SampleIdentifier(child);
+                        update.getChildIds().add(childId);
+                        childrenIds.add(childId);
+                    }
                 }
             }
-        }
-        for (Sample child : originSample.getChildren())
-        {
-            if (!childrenIds.contains(child.getIdentifier()))
+
+            for (Sample child : originSample.getChildren())
             {
-                update.getChildIds().remove(child.getIdentifier());
+                if (!childrenIds.contains(child.getIdentifier()))
+                {
+                    update.getChildIds().remove(child.getIdentifier());
+                }
             }
         }
+
         // End - Special case -> Remove parents / children & Special case -> Sample Variables
 
         for (String key : header.keySet())
-- 
GitLab