From 34ae627b40767a12313a3f1dd3ddaa1d207b5e52 Mon Sep 17 00:00:00 2001
From: felmer <franz-josef.elmer@id.ethz.ch>
Date: Mon, 18 Jun 2018 15:12:50 +0200
Subject: [PATCH] SSDM-6731: fixing bug in batch registration as revealed by
 screening LIBRARY registration for enabled project samples

---
 .../plugin/generic/server/GenericServer.java  | 22 +++++++++++++++++++
 .../generic/server/IdentifersExtractor.java   | 18 +++++----------
 2 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
index b3594354347..fdb3181bd20 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
@@ -987,6 +987,10 @@ public final class GenericServer extends AbstractServer<IGenericServerInternal>
             final List<NewSamplesWithTypes> newSamplesWithType,
             List<NewMaterialsWithTypes> newMaterialsWithType) throws UserFailureException
     {
+        if (isProjectSamplesEnabled(sessionToken))
+        {
+            injectProjectIdentifiers(newSamplesWithType);
+        }
         EntityExistenceChecker entityExistenceChecker = new EntityExistenceChecker(getDAOFactory());
         entityExistenceChecker.checkNewMaterials(newMaterialsWithType);
         entityExistenceChecker.checkNewSamples(newSamplesWithType);
@@ -1007,6 +1011,24 @@ public final class GenericServer extends AbstractServer<IGenericServerInternal>
         privateRegisterOrUpdateSamples(sessionToken, newSamplesWithType);
     }
 
+    private void injectProjectIdentifiers(final List<NewSamplesWithTypes> newSamplesWithType)
+    {
+        for (NewSamplesWithTypes newSamples : newSamplesWithType)
+        {
+            for (NewSample newSample : newSamples.getNewEntities())
+            {
+                String experimentIdentifier = newSample.getExperimentIdentifier();
+                if (experimentIdentifier != null)
+                {
+                    ExperimentIdentifier identifier = ExperimentIdentifierFactory.parse(experimentIdentifier);
+                    String projectCode = identifier.getProjectCode();
+                    String spaceCode = identifier.getSpaceCode();
+                    newSample.setProjectIdentifier(new ProjectIdentifier(spaceCode, projectCode).asProjectIdentifierString());
+                }
+            }
+        }
+    }
+
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java
index 569d3017176..f0bd6fe54e1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java
@@ -34,17 +34,18 @@ class IdentifersExtractor
 {
     private final SampleIdentifier oldSampleIdentifier;
 
-    private final SampleIdentifier newSampleIdentifier;
+    private SampleIdentifier newSampleIdentifier;
 
-    private final ExperimentIdentifier experimentIdentifierOrNull;
+    private ExperimentIdentifier experimentIdentifierOrNull;
     
-    private final ProjectIdentifier projectIdentifierOrNull;
+    private ProjectIdentifier projectIdentifierOrNull;
 
     private final String containerIdentifierOrNull;
 
     IdentifersExtractor(NewSample updatedSample)
     {
         oldSampleIdentifier = SampleIdentifierFactory.parse(updatedSample);
+        newSampleIdentifier = oldSampleIdentifier;
         String experimentIdentifier = updatedSample.getExperimentIdentifier();
         String projectIdentifier = updatedSample.getProjectIdentifier();
         String defaultSpaceIdentifier = updatedSample.getDefaultSpaceIdentifier();
@@ -60,19 +61,12 @@ class IdentifersExtractor
                     new SampleIdentifier(new SpaceIdentifier(
                             experimentIdentifierOrNull.getSpaceCode()),
                             sampleCode);
-            projectIdentifierOrNull = null;
-        } else if (projectIdentifier != null)
+        }
+        if (projectIdentifier != null)
         {
             projectIdentifierOrNull =
                     new ProjectIdentifierFactory(projectIdentifier).createIdentifier(defaultSpaceIdentifier);
-            experimentIdentifierOrNull = null;
             newSampleIdentifier = new SampleIdentifier(projectIdentifierOrNull, sampleCode);
-        } else
-        {
-            // no experiment - leave sample identifier unchanged
-            experimentIdentifierOrNull = null;
-            projectIdentifierOrNull = null;
-            newSampleIdentifier = oldSampleIdentifier;
         }
         containerIdentifierOrNull = updatedSample.getContainerIdentifier();
     }
-- 
GitLab