diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java index d5b418e7670c42dabd7733dd271ac5e10fa40a56..79c16ef27bcaaed40e5397dd818561345c8c2b25 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java @@ -120,39 +120,51 @@ public abstract class AbstractDataMergingReportingPlugin extends AbstractFileTab protected DatasetFileLines loadFromDirectory(DatasetDescription dataset, final File dir) throws ParserException, ParsingException, IllegalArgumentException, IOExceptionUnchecked + { + List<File> datasetFilesToMerge = findMatchingFiles(dataset, dir); + 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)); + } + } + + /** + * Scan the specified directory to find files that match the dataset description. + * + * @throws IOExceptionUnchecked if a {@link IOException} has occurred. + */ + protected List<File> findMatchingFiles(DatasetDescription dataset, final File dir) + throws IllegalArgumentException, IOExceptionUnchecked { assert dir != null : "Given file must not be null"; assert dir.isDirectory() : "Given file '" + dir.getAbsolutePath() + "' is not a directory."; File[] datasetFiles = FileUtilities.listFiles(dir); - List<File> datasetFilesToMerge = new ArrayList<File>(); + List<File> matchingFiles = new ArrayList<File>(); for (File datasetFile : datasetFiles) { if (datasetFile.isDirectory()) { // recursively go down the directories - return loadFromDirectory(dataset, datasetFile); + return findMatchingFiles(dataset, datasetFile); } else { // exclude files with properties if (isFileExcluded(datasetFile) == false) { - datasetFilesToMerge.add(datasetFile); + matchingFiles.add(datasetFile); } } } - 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)); - } + return matchingFiles; } protected boolean isFileExcluded(File file)