From cec8313e8bccddb15af3f4eb87dbc3e290e72940 Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Tue, 10 May 2011 08:21:57 +0000
Subject: [PATCH] [LMS-2104] prevent container datasets from being uploaded to
 CIFEX for now

SVN: 21179
---
 .../dss/generic/server/UploadingCommand.java  |  8 +++++--
 .../server/business/bo/ExternalDataTable.java | 23 +++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java
index 0cb80a21d2e..107a12581a4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java
@@ -48,6 +48,7 @@ import ch.systemsx.cisd.common.mail.MailClientParameters;
 import ch.systemsx.cisd.common.types.BooleanOrUnknown;
 import ch.systemsx.cisd.common.utilities.TokenGenerator;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IDataSetDirectoryProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -409,8 +410,11 @@ class UploadingCommand implements IDataSetCommand
         {
             outputStream = new FileOutputStream(zipFile);
             zipOutputStream = new ZipOutputStream(outputStream);
-            for (ExternalData dataSet : dataSets)
+            for (ExternalData externalData : dataSets)
             {
+                DataSet dataSet = externalData.tryGetAsDataSet();
+                assert dataSet != null : "container datasets are currently not supported by DSS client";
+
                 DatasetDescription dataSetDescription =
                         ExternalDataTranslator.translateToDescription(dataSet);
                 File dataSetFile = dataSetDirectoryProvider.getDataSetDirectory(dataSetDescription);
@@ -462,7 +466,7 @@ class UploadingCommand implements IDataSetCommand
         }
     }
 
-    private String createMetaData(ExternalData dataSet)
+    private String createMetaData(DataSet dataSet)
     {
         MetaDataBuilder builder = new MetaDataBuilder();
         builder.dataSet("code", dataSet.getCode());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
index 2d508016b5b..4b41b471c46 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
@@ -309,6 +309,7 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject
         assertDatasetsAreAvailable(externalData);
         Map<DataStorePE, List<ExternalDataPE>> map = groupDataSetsByDataStores();
         assertDataSetsAreKnown(map);
+        assertNoContainerDataSets(map);
         uploadContext.setUserEMail(session.getPrincipal().getEmail());
         uploadContext.setSessionUserID(session.getUserName());
         if (StringUtils.isBlank(uploadContext.getComment()))
@@ -386,6 +387,28 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject
         }
     }
 
+    private void assertNoContainerDataSets(Map<DataStorePE, List<ExternalDataPE>> map)
+    {
+        Set<String> containerDataSets = new LinkedHashSet<String>();
+        for (Map.Entry<DataStorePE, List<ExternalDataPE>> entry : map.entrySet())
+        {
+            for (ExternalDataPE dataSet : entry.getValue())
+            {
+                if (dataSet.isContainerDataSet())
+                {
+                    containerDataSets.add(dataSet.getCode());
+                }
+            }
+        }
+
+        if (false == containerDataSets.isEmpty())
+        {
+            throw new UserFailureException(
+                    "The following data sets are container data sets and cannot be uploaded to CIFEX. "
+                            + containerDataSets);
+        }
+    }
+
     private Map<DataStorePE, List<ExternalDataPE>> groupDataSetsByDataStores()
     {
         Map<DataStorePE, List<ExternalDataPE>> map =
-- 
GitLab