From 6916907c2a400289813745a3193d3ab84dd06fbb Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Tue, 24 May 2011 08:26:34 +0000
Subject: [PATCH] LMS-2104 Fixed bugs discovered by FJE.

SVN: 21456
---
 .../registrator/api/v1/impl/DataSet.java      |  4 ++-
 .../openbis/generic/server/ETLService.java    | 36 +++++++++++++++----
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java
index f852835457e..f0bcbfaa3fc 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java
@@ -222,7 +222,9 @@ public class DataSet<T extends DataSetInformation> implements IDataSet
 
     public void setContainedDataSetCodes(List<String> containedDataSetCodes)
     {
-        ArrayList<String> newContainedDataSetCodes = new ArrayList<String>(containedDataSetCodes);
+        ArrayList<String> newContainedDataSetCodes =
+                (null == containedDataSetCodes) ? new ArrayList<String>() : new ArrayList<String>(
+                        containedDataSetCodes);
         registrationDetails.getDataSetInformation().setContainedDataSetCodes(
                 newContainedDataSetCodes);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index 6245b3c47fb..9e1c73081ed 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -1219,23 +1219,45 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         ArrayList<DataPE> dataSetsCreated = new ArrayList<DataPE>();
         ArrayList<? extends NewExternalData> dataSetRegistrations =
                 operationDetails.getDataSetRegistrations();
+
+        ArrayList<NewContainerDataSet> containerRegistrations =
+                new ArrayList<NewContainerDataSet>();
+        // In the first pass, skip container data sets
         for (NewExternalData dataSet : dataSetRegistrations)
         {
-            SampleIdentifier sampleIdentifier = dataSet.getSampleIdentifierOrNull();
-            IDataBO dataBO;
-            if (sampleIdentifier != null)
+            if (dataSet instanceof NewContainerDataSet)
             {
-                dataBO = registerDataSetInternal(session, sampleIdentifier, dataSet);
+                containerRegistrations.add((NewContainerDataSet) dataSet);
             } else
             {
-                ExperimentIdentifier experimentIdentifier = dataSet.getExperimentIdentifierOrNull();
-                dataBO = registerDataSetInternal(session, experimentIdentifier, dataSet);
+                registerDatasetInternal(session, dataSetsCreated, dataSet);
             }
-            dataSetsCreated.add(dataBO.getData());
+        }
+
+        // Now do the containers
+        for (NewContainerDataSet dataSet : containerRegistrations)
+        {
+            registerDatasetInternal(session, dataSetsCreated, dataSet);
         }
         return DataSetTranslator.translate(dataSetsCreated, "", session.getBaseIndexURL());
     }
 
+    private void registerDatasetInternal(final Session session, ArrayList<DataPE> dataSetsCreated,
+            NewExternalData dataSet)
+    {
+        SampleIdentifier sampleIdentifier = dataSet.getSampleIdentifierOrNull();
+        IDataBO dataBO;
+        if (sampleIdentifier != null)
+        {
+            dataBO = registerDataSetInternal(session, sampleIdentifier, dataSet);
+        } else
+        {
+            ExperimentIdentifier experimentIdentifier = dataSet.getExperimentIdentifierOrNull();
+            dataBO = registerDataSetInternal(session, experimentIdentifier, dataSet);
+        }
+        dataSetsCreated.add(dataBO.getData());
+    }
+
     private ArrayList<Experiment> createExperiments(String sessionToken,
             AtomicEntityOperationDetails operationDetails)
     {
-- 
GitLab