diff --git a/src/main/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessor.java b/src/main/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessor.java index e8dcb3ad2fe..ba233f3f364 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessor.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessor.java @@ -15,7 +15,7 @@ public class BagItFileHandlerPostProcessor { private static final Logger logger = Logger.getLogger(BagItFileHandlerPostProcessor.class.getCanonicalName()); - public static final List FILES_TO_IGNORE = Arrays.asList("__", "._", ".DS_Store", "._.DS_Store"); + public static final List FILES_TO_IGNORE = Arrays.asList("__", "._", ".DS_Store"); public List process(List items) { if(items == null) { @@ -26,7 +26,11 @@ public List process(List items) { for(DataFile item: items) { String fileName = item.getCurrentName(); - if(FILES_TO_IGNORE.contains(fileName)) { + if(fileName == null || fileName.isEmpty()) { + continue; + } + + if(FILES_TO_IGNORE.stream().anyMatch(prefix -> fileName.startsWith(prefix))) { logger.fine(String.format("action=BagItFileHandlerPostProcessor result=ignore-entry file=%s", fileName)); continue; } diff --git a/src/test/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessorTest.java b/src/test/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessorTest.java index 7a98b6573a2..f8c7565af7c 100644 --- a/src/test/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessorTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/util/file/BagItFileHandlerPostProcessorTest.java @@ -29,11 +29,43 @@ public void should_return_null_when_datafiles_are_null() throws Exception { @Test public void should_ignore_mac_control_files() throws Exception { String bagEntry = UUID.randomUUID().toString(); - String macFile01 = "__"; - String macFile02 = "._"; String macFile03 = ".DS_Store"; String macFile04 = "._.DS_Store"; - List dataFiles = createDataFiles(bagEntry, macFile01, macFile02, macFile03, macFile04); + List dataFiles = createDataFiles(bagEntry, macFile03, macFile04); + + List result = target.process(dataFiles); + MatcherAssert.assertThat(result.size(), Matchers.is(1)); + MatcherAssert.assertThat(result.get(0).getCurrentName(), Matchers.is(bagEntry)); + } + + @Test + public void should_ignore_empty_files() throws Exception { + String bagEntry = UUID.randomUUID().toString(); + String fileToIgnore = ""; + List dataFiles = createDataFiles(bagEntry, fileToIgnore); + + List result = target.process(dataFiles); + MatcherAssert.assertThat(result.size(), Matchers.is(1)); + MatcherAssert.assertThat(result.get(0).getCurrentName(), Matchers.is(bagEntry)); + } + + @Test + public void should_ignore_files_that_start_with_dot_underscore() throws Exception { + String bagEntry = UUID.randomUUID().toString(); + String fileToIgnore = "._FileNameToIgnore"; + List dataFiles = createDataFiles(bagEntry, fileToIgnore); + + List result = target.process(dataFiles); + MatcherAssert.assertThat(result.size(), Matchers.is(1)); + MatcherAssert.assertThat(result.get(0).getCurrentName(), Matchers.is(bagEntry)); + } + + @Test + public void should_ignore_files_that_start_with_double_underscore() throws Exception { + String bagEntry = UUID.randomUUID().toString(); + String fileToIgnore = "__FileNameToIgnore"; + String validFile = "validName"; + List dataFiles = createDataFiles(bagEntry, fileToIgnore); List result = target.process(dataFiles); MatcherAssert.assertThat(result.size(), Matchers.is(1));