From b295fb84862de0a896b0c815adb2fe0ecbc584ae Mon Sep 17 00:00:00 2001 From: Cengis K Date: Fri, 21 Sep 2018 17:32:16 +0200 Subject: [PATCH] GH-2569: Add ChainFileListFilter constructors * Adding ChainFileListFilter constructors to behave like CompositeFileListFilter Fixes https://github.com/spring-projects/spring-integration/issues/2569 Adding constructors in `ChainFileListFilter` matching super, so this class behave like `CompositeFileListFilter` when using XML flow configuration. * Fix import error * Fix checkstyle * Fix checkstyle * Fix checkstyle * Fix author name case Remove unnecessary javadoc * Fix code smell squid:S1155 * Add a simple test case for initializing filters with constructor Fix code smell squid:S1192 * Add a simple test case for initializing filters with constructor Fix code smell squid:S1192 * Fix missing import --- .../file/filters/ChainFileListFilter.java | 12 ++++++++++- .../ChainFileListFilterIntegrationTests.java | 21 +++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/filters/ChainFileListFilter.java b/spring-integration-file/src/main/java/org/springframework/integration/file/filters/ChainFileListFilter.java index 6fbfdc2168..9764a35fe2 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/filters/ChainFileListFilter.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/filters/ChainFileListFilter.java @@ -18,6 +18,7 @@ package org.springframework.integration.file.filters; import java.lang.reflect.Array; import java.util.Arrays; +import java.util.Collection; import java.util.List; import org.springframework.util.Assert; @@ -31,18 +32,27 @@ import org.springframework.util.Assert; * * @author Artem Bilan * @author Gary Russell + * @author Cengis Kocaurlu * * @since 4.3.7 * */ public class ChainFileListFilter extends CompositeFileListFilter { + public ChainFileListFilter() { + super(); + } + + public ChainFileListFilter(Collection> fileFilters) { + super(fileFilters); + } + @Override public List filterFiles(F[] files) { Assert.notNull(files, "'files' should not be null"); List leftOver = Arrays.asList(files); for (FileListFilter fileFilter : this.fileFilters) { - if (leftOver.size() == 0) { + if (leftOver.isEmpty()) { break; } @SuppressWarnings("unchecked") diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/filters/ChainFileListFilterIntegrationTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/filters/ChainFileListFilterIntegrationTests.java index 0d3d6ef16f..1a7a28a97b 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/filters/ChainFileListFilterIntegrationTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/filters/ChainFileListFilterIntegrationTests.java @@ -20,20 +20,24 @@ import static org.junit.Assert.assertEquals; import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.List; import org.junit.Test; /** * @author Aaron Grant + * @author Cengis Kocaurlu * * @since 4.3.8 */ public class ChainFileListFilterIntegrationTests { + private static final String PATTERN_ANY_TEXT_FILES = "*.txt"; + private File[] noFiles = new File[0]; - private File[] oneFile = new File[] { new MockOldFile("file.txt") }; + private File[] oneFile = new File[]{new MockOldFile("file.txt")}; @Test public void singleModifiedFilterNoFiles() throws IOException { @@ -47,7 +51,7 @@ public class ChainFileListFilterIntegrationTests { @Test public void singlePatternFilter() throws IOException { try (ChainFileListFilter chain = new ChainFileListFilter<>()) { - chain.addFilter(new SimplePatternFileListFilter("*.txt")); + chain.addFilter(new SimplePatternFileListFilter(PATTERN_ANY_TEXT_FILES)); List result = chain.filterFiles(oneFile); assertEquals(1, result.size()); } @@ -65,7 +69,7 @@ public class ChainFileListFilterIntegrationTests { @Test public void patternThenModifiedFilters() throws IOException { try (ChainFileListFilter chain = new ChainFileListFilter<>()) { - chain.addFilter(new SimplePatternFileListFilter("*.txt")); + chain.addFilter(new SimplePatternFileListFilter(PATTERN_ANY_TEXT_FILES)); chain.addFilter(new LastModifiedFileListFilter()); List result = chain.filterFiles(oneFile); assertEquals(1, result.size()); @@ -76,7 +80,16 @@ public class ChainFileListFilterIntegrationTests { public void modifiedThenPatternFilters() throws IOException { try (ChainFileListFilter chain = new ChainFileListFilter<>()) { chain.addFilter(new LastModifiedFileListFilter()); - chain.addFilter(new SimplePatternFileListFilter("*.txt")); + chain.addFilter(new SimplePatternFileListFilter(PATTERN_ANY_TEXT_FILES)); + List result = chain.filterFiles(oneFile); + assertEquals(1, result.size()); + } + } + + //https://github.com/spring-projects/spring-integration/issues/2569 + @Test + public void initializeFilterByConstructor() throws IOException { + try (ChainFileListFilter chain = new ChainFileListFilter<>(Arrays.asList(new SimplePatternFileListFilter(PATTERN_ANY_TEXT_FILES)))) { List result = chain.filterFiles(oneFile); assertEquals(1, result.size()); }