From ae3aacf160f4788506657f259e3a3a8b0af7c1e8 Mon Sep 17 00:00:00 2001
From: gpawel <gpawel>
Date: Wed, 9 Nov 2011 16:49:02 +0000
Subject: [PATCH] bugfix: empty containers shouldn't be treated as not empty

SVN: 23621
---
 .../screening/server/logic/ScreeningUtils.java  | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
index 889e927fa8d..2c582847ed9 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
@@ -168,7 +168,8 @@ public class ScreeningUtils
         final List<T> chosenDatasets = new ArrayList<T>();
         for (T dataset : typeMatchingDatasets)
         {
-            if (isContainerMatching(dataset, datasetTypeCodePatterns) == false)
+            if (isContainerMatching(dataset, datasetTypeCodePatterns) == false
+                    && isNotEmpty(dataset))
             {
                 chosenDatasets.add(dataset);
             }
@@ -190,6 +191,17 @@ public class ScreeningUtils
         return container != null && isOneOfTypesMatching(container, datasetTypeCodePatterns);
     }
 
+    private static boolean isNotEmpty(ExternalData dataset)
+    {
+        return dataset.isContainer() == false
+                || dataset.tryGetAsContainerDataSet().getContainedDataSets().size() > 0;
+    }
+
+    private static <T extends DataPE> boolean isNotEmpty(T dataset)
+    {
+        return dataset.isContainer() == false || dataset.getContainedDataSets().size() > 0;
+    }
+
     /** chooses datasets of unknown types */
     public static <T extends DataPE> List<T> filterUnknownDatasets(List<T> datasets)
     {
@@ -267,7 +279,8 @@ public class ScreeningUtils
             String typePattern)
     {
         return isOneOfTypesMatching(externalData, typePattern)
-                && isContainerMatching(externalData, typePattern) == false;
+                && isContainerMatching(externalData, typePattern) == false
+                && isNotEmpty(externalData);
     }
 
     public static boolean isRawHcsImageDataset(ExternalData externalData)
-- 
GitLab