From 785b33712a1fe5e8787767d1f441fa3a43cf7fdd Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Mon, 27 Jul 2009 12:36:04 +0000
Subject: [PATCH] [LMS-1065] fixed ('Reporting plugin for merging data set data
 does not work if data set properties file was uploaded with data set')

SVN: 11903
---
 .../demo/MergedDataReportingPlugin.java       | 39 +++++++++++++++++--
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/MergedDataReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/MergedDataReportingPlugin.java
index 07a264803eb..4dcc2a1d616 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/MergedDataReportingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/MergedDataReportingPlugin.java
@@ -49,6 +49,10 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
 public class MergedDataReportingPlugin extends AbstractDatastorePlugin implements
         IReportingPluginTask
 {
+
+    /** pattern for files that should be excluded (e.g. data set properties files) */
+    public final static String EXCLUDED_FILE_NAMES_PATTERN = ".*\\.tsv";
+
     public MergedDataReportingPlugin(Properties properties, File storeRoot)
     {
         super(properties, storeRoot);
@@ -120,10 +124,39 @@ public class MergedDataReportingPlugin extends AbstractDatastorePlugin implement
                     + "' is not a directory.";
 
             File[] datasetFiles = FileUtilities.listFiles(dir);
-            assert datasetFiles.length == 1 : "Given directory '" + dir.getAbsolutePath()
-                    + "should contain exactly 1 file instead of " + datasetFiles.length;
+            List<File> datasetFilesToMerge = new ArrayList<File>();
+            for (File datasetFile : datasetFiles)
+            {
+                if (datasetFile.isDirectory())
+                {
+                    // recursively go down the directories
+                    return loadFromDirectory(dataset, datasetFile);
+                } else
+                {
+                    // exclude files with properties
+                    if (isFileExcluded(datasetFile) == false)
+                    {
+                        datasetFilesToMerge.add(datasetFile);
+                    }
+                }
 
-            return loadFromFile(dataset, datasetFiles[0]);
+            }
+            if (datasetFilesToMerge.size() != 1)
+            {
+                throw UserFailureException
+                        .fromTemplate(
+                                "Directory with Data Set '%s' data ('%s') should contain exactly 1 file with data but %s files were found.",
+                                dataset.getDatasetCode(), dir.getAbsolutePath(),
+                                datasetFilesToMerge.size());
+            } else
+            {
+                return loadFromFile(dataset, datasetFilesToMerge.get(0));
+            }
+        }
+
+        private static boolean isFileExcluded(File file)
+        {
+            return file.getName().matches(EXCLUDED_FILE_NAMES_PATTERN);
         }
 
         /**
-- 
GitLab