From e4dc25038576af1758d2581f1e31064c00dc7645 Mon Sep 17 00:00:00 2001 From: Iwein Fuld Date: Fri, 22 Oct 2010 16:20:37 +0200 Subject: [PATCH] INT-1541: modify default pattern style to AntPath instead of Regex - update all patterns in test contexts to comply with ant style - change configurators to create SimplePatternFileListFilter instead of regex style PatternMatchingFileListFilter --- .../config/FileListFilterFactoryBean.java | 10 +++---- ....java => SimplePatternFileListFilter.java} | 13 ++++++--- ...gMessageSourceIntegrationTests-context.xml | 10 +++---- .../FileToChannelIntegrationTests-context.xml | 2 +- ...boundChannelAdapterParserTests-context.xml | 10 +++---- .../FileInboundChannelAdapterParserTests.java | 10 +------ ...lAdapterWithPatternParserTests-context.xml | 2 +- ...dChannelAdapterWithPatternParserTests.java | 15 ++++------ ...AdapterWithPreventDuplicatesFlagTests.java | 28 +++++++++---------- .../FileListFilterFactoryBeanTests.java | 18 ++++++------ ...a => SimplePatternFileListFilterTest.java} | 8 +++--- src/docbkx/file.xml | 4 +-- 12 files changed, 60 insertions(+), 70 deletions(-) rename spring-integration-file/src/main/java/org/springframework/integration/file/filters/{AntPathFileListFilter.java => SimplePatternFileListFilter.java} (65%) rename spring-integration-file/src/test/java/org/springframework/integration/file/filters/{AntPathFileListFilterTest.java => SimplePatternFileListFilterTest.java} (58%) diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileListFilterFactoryBean.java b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileListFilterFactoryBean.java index 21f4ec9a58..e0a0178462 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileListFilterFactoryBean.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileListFilterFactoryBean.java @@ -16,13 +16,11 @@ package org.springframework.integration.file.config; import org.springframework.beans.factory.FactoryBean; - import org.springframework.integration.file.entries.*; +import org.springframework.integration.file.filters.SimplePatternFileListFilter; import java.io.File; - import java.util.Collection; -import java.util.regex.Pattern; /** @@ -32,7 +30,7 @@ import java.util.regex.Pattern; public class FileListFilterFactoryBean implements FactoryBean> { private volatile EntryListFilter fileListFilter; private volatile EntryListFilter filterReference; - private volatile Pattern filenamePattern; + private volatile String filenamePattern; private volatile Boolean preventDuplicates; private final Object monitor = new Object(); private volatile Collection> filterReferences; @@ -46,7 +44,7 @@ public class FileListFilterFactoryBean implements FactoryBean patternFilter = new PatternMatchingEntryListFilter(fileNamer, this.filenamePattern); + SimplePatternFileListFilter patternFilter = new SimplePatternFileListFilter(this.filenamePattern); if (Boolean.FALSE.equals(this.preventDuplicates)) { flf = patternFilter; diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/filters/AntPathFileListFilter.java b/spring-integration-file/src/main/java/org/springframework/integration/file/filters/SimplePatternFileListFilter.java similarity index 65% rename from spring-integration-file/src/main/java/org/springframework/integration/file/filters/AntPathFileListFilter.java rename to spring-integration-file/src/main/java/org/springframework/integration/file/filters/SimplePatternFileListFilter.java index 0b6d8f410c..46fc59aec1 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/filters/AntPathFileListFilter.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/filters/SimplePatternFileListFilter.java @@ -9,23 +9,28 @@ import java.util.List; /** * Filter that supports ant style path expressions, which are less powerful but more readable than regular expressions. + * This filter only filters on the name of the file, the rest of the path is ignored. * * @author Iwein Fuld + * @see org.springframework.util.AntPathMatcher * @see org.springframework.integration.file.filters.PatternMatchingFileListFilter * @since 2.0.0 */ -public class AntPathFileListFilter extends AbstractEntryListFilter implements FileListFilter { +public class SimplePatternFileListFilter extends AbstractEntryListFilter implements FileListFilter { private final AntPathMatcher matcher = new AntPathMatcher(); private final String path; - public AntPathFileListFilter(String path) { - this.path = path; + public SimplePatternFileListFilter(String path) { + this.path = path; } + /** + * Accept the given file its name matches the pattern, + */ @Override public boolean accept(File file) { - return matcher.match(path, file.getPath()); + return matcher.match(path, file.getName()); } public List filterFiles(File[] files) { diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/FileReadingMessageSourceIntegrationTests-context.xml b/spring-integration-file/src/test/java/org/springframework/integration/file/FileReadingMessageSourceIntegrationTests-context.xml index f0336e1452..3a5b040b70 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/FileReadingMessageSourceIntegrationTests-context.xml +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/FileReadingMessageSourceIntegrationTests-context.xml @@ -13,22 +13,20 @@ - - + @@ -36,7 +34,7 @@ - + diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/FileToChannelIntegrationTests-context.xml b/spring-integration-file/src/test/java/org/springframework/integration/file/FileToChannelIntegrationTests-context.xml index 0462c2fb0f..2f22357250 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/FileToChannelIntegrationTests-context.xml +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/FileToChannelIntegrationTests-context.xml @@ -33,7 +33,7 @@ - + diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests-context.xml b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests-context.xml index bfcb0e3ce9..168e6c93ed 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests-context.xml +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests-context.xml @@ -18,15 +18,13 @@ - + - - + diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests.java index cd5cc874df..caedf9aa4d 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterParserTests.java @@ -21,7 +21,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; import org.springframework.integration.channel.AbstractMessageChannel; import org.springframework.integration.file.DefaultDirectoryScanner; @@ -48,12 +47,7 @@ public class FileInboundChannelAdapterParserTests { private ApplicationContext context; @Autowired - // @Qualifier("inputDirPoller") private FileReadingMessageSource source; - -// @Autowired -// @Qualifier("inputDirPollerWithChannel") -// private FileReadingMessageSource sourceWithChannel; private DirectFieldAccessor accessor; @@ -62,7 +56,6 @@ public class FileInboundChannelAdapterParserTests { accessor = new DirectFieldAccessor(source); } - @Test public void channelName() throws Exception { Object adapter = context.getBean("inputDirPoller"); @@ -102,6 +95,5 @@ public class FileInboundChannelAdapterParserTests { public int compare(File f1, File f2) { return 0; } - } - + } } diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests-context.xml b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests-context.xml index 24f536d111..4a60aa8bdd 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests-context.xml +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests-context.xml @@ -14,7 +14,7 @@ + filename-pattern="*.txt" auto-startup="false"> diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests.java index 7fb76e2f19..f8af5f78b2 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPatternParserTests.java @@ -28,13 +28,12 @@ import org.springframework.integration.file.FileReadingMessageSource; import org.springframework.integration.file.entries.AcceptOnceEntryFileListFilter; import org.springframework.integration.file.entries.CompositeEntryListFilter; import org.springframework.integration.file.entries.EntryListFilter; -import org.springframework.integration.file.entries.PatternMatchingEntryListFilter; +import org.springframework.integration.file.filters.SimplePatternFileListFilter; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.io.File; import java.util.Set; -import java.util.regex.Pattern; import static org.junit.Assert.*; @@ -120,16 +119,14 @@ public class FileInboundChannelAdapterWithPatternParserTests { Set filters = (Set) new DirectFieldAccessor( scannerAccessor.getPropertyValue("filter")).getPropertyValue("fileFilters"); - Pattern pattern = null; + String pattern = null; for (EntryListFilter filter : filters) { - if (filter instanceof PatternMatchingEntryListFilter) { - pattern = (Pattern) new DirectFieldAccessor(filter).getPropertyValue("pattern"); + if (filter instanceof SimplePatternFileListFilter) { + pattern = (String) new DirectFieldAccessor(filter).getPropertyValue("path"); } } - assertNotNull("expected PatternMatchingFileListFilter", pattern); - assertEquals(".*\\.txt", pattern.toString()); - assertFalse(pattern.matcher("foo").matches()); - assertTrue(pattern.matcher("foo.txt").matches()); + assertNotNull("expected SimplePatternFileListFilterTest", pattern); + assertEquals("*.txt", pattern.toString()); } } diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPreventDuplicatesFlagTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPreventDuplicatesFlagTests.java index 55b12232e9..6a68e7cd00 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPreventDuplicatesFlagTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileInboundChannelAdapterWithPreventDuplicatesFlagTests.java @@ -15,33 +15,28 @@ */ package org.springframework.integration.file.config; -import static org.junit.Assert.*; - import org.junit.Test; - import org.junit.runner.RunWith; - import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; - import org.springframework.context.ApplicationContext; - import org.springframework.integration.file.TestFileListFilter; import org.springframework.integration.file.entries.AcceptOnceEntryFileListFilter; import org.springframework.integration.file.entries.CompositeEntryListFilter; import org.springframework.integration.file.entries.EntryListFilter; -import org.springframework.integration.file.entries.PatternMatchingEntryListFilter; - +import org.springframework.integration.file.filters.SimplePatternFileListFilter; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.io.File; - import java.util.Collection; import java.util.Iterator; import java.util.List; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; + /** * @author Mark Fisher */ @@ -88,7 +83,7 @@ public class FileInboundChannelAdapterWithPreventDuplicatesFlagTests { Collection filters = (Collection) new DirectFieldAccessor(filter).getPropertyValue("fileFilters"); Iterator> iterator = filters.iterator(); assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter); - assertTrue(iterator.next() instanceof PatternMatchingEntryListFilter); + assertThat(iterator.next(), is(SimplePatternFileListFilter.class)); } @Test @@ -100,14 +95,14 @@ public class FileInboundChannelAdapterWithPreventDuplicatesFlagTests { Collection filters = (Collection) new DirectFieldAccessor(filter).getPropertyValue("fileFilters"); Iterator iterator = filters.iterator(); assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter); - assertTrue(iterator.next() instanceof PatternMatchingEntryListFilter); + assertThat(iterator.next(), is(SimplePatternFileListFilter.class)); } @Test public void patternAndFalse() throws Exception { EntryListFilter filter = this.extractFilter("patternAndFalse"); assertFalse(filter instanceof CompositeEntryListFilter); - assertTrue(filter instanceof PatternMatchingEntryListFilter); + assertThat(filter, is(SimplePatternFileListFilter.class)); } @Test @@ -152,7 +147,12 @@ public class FileInboundChannelAdapterWithPreventDuplicatesFlagTests { @SuppressWarnings("unchecked") private EntryListFilter extractFilter(String beanName) { - return (EntryListFilter) new DirectFieldAccessor(new DirectFieldAccessor(new DirectFieldAccessor(context.getBean(beanName)).getPropertyValue("source")).getPropertyValue("scanner")).getPropertyValue( - "filter"); + return (EntryListFilter) + new DirectFieldAccessor( + new DirectFieldAccessor( + new DirectFieldAccessor(context.getBean(beanName)) + .getPropertyValue("source")) + .getPropertyValue("scanner")) + .getPropertyValue("filter"); } } diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileListFilterFactoryBeanTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileListFilterFactoryBeanTests.java index a12083bc45..582d05e9c0 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileListFilterFactoryBeanTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileListFilterFactoryBeanTests.java @@ -19,16 +19,18 @@ package org.springframework.integration.file.config; import org.junit.Test; import org.springframework.beans.DirectFieldAccessor; import org.springframework.integration.file.entries.*; +import org.springframework.integration.file.filters.SimplePatternFileListFilter; import java.io.File; import java.util.Collection; import java.util.Iterator; -import java.util.regex.Pattern; +import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.*; /** * @author Mark Fisher + * @author Iwein Fuld */ public class FileListFilterFactoryBeanTests { @@ -36,7 +38,7 @@ public class FileListFilterFactoryBeanTests { public void customFilterAndFilenamePatternAreMutuallyExclusive() throws Exception { FileListFilterFactoryBean factory = new FileListFilterFactoryBean(); factory.setFilterReference(new TestFilter()); - factory.setFilenamePattern(Pattern.compile("foo")); + factory.setFilenamePattern("foo"); factory.getObject(); } @@ -79,37 +81,37 @@ public class FileListFilterFactoryBeanTests { @SuppressWarnings("unchecked") public void filenamePatternAndPreventDuplicatesNull() throws Exception { FileListFilterFactoryBean factory = new FileListFilterFactoryBean(); - factory.setFilenamePattern(Pattern.compile("foo")); + factory.setFilenamePattern("foo"); EntryListFilter result = factory.getObject(); assertTrue(result instanceof CompositeEntryListFilter); Collection filters = (Collection) new DirectFieldAccessor(result).getPropertyValue("fileFilters"); Iterator iterator = filters.iterator(); assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter); - assertTrue(iterator.next() instanceof PatternMatchingEntryListFilter); + assertThat(iterator.next(), is(SimplePatternFileListFilter.class)); } @Test @SuppressWarnings("unchecked") public void filenamePatternAndPreventDuplicatesTrue() throws Exception { FileListFilterFactoryBean factory = new FileListFilterFactoryBean(); - factory.setFilenamePattern(Pattern.compile("foo")); + factory.setFilenamePattern(("foo")); factory.setPreventDuplicates(Boolean.TRUE); EntryListFilter result = factory.getObject(); assertTrue(result instanceof CompositeEntryListFilter); Collection filters = (Collection) new DirectFieldAccessor(result).getPropertyValue("fileFilters"); Iterator iterator = filters.iterator(); assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter); - assertTrue(iterator.next() instanceof PatternMatchingEntryListFilter); + assertThat(iterator.next(), is(SimplePatternFileListFilter.class)); } @Test public void filenamePatternAndPreventDuplicatesFalse() throws Exception { FileListFilterFactoryBean factory = new FileListFilterFactoryBean(); - factory.setFilenamePattern(Pattern.compile("foo")); + factory.setFilenamePattern(("foo")); factory.setPreventDuplicates(Boolean.FALSE); EntryListFilter result = factory.getObject(); assertFalse(result instanceof CompositeEntryListFilter); - assertTrue(result instanceof PatternMatchingEntryListFilter); + assertThat(result, is(SimplePatternFileListFilter.class)); } diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/filters/AntPathFileListFilterTest.java b/spring-integration-file/src/test/java/org/springframework/integration/file/filters/SimplePatternFileListFilterTest.java similarity index 58% rename from spring-integration-file/src/test/java/org/springframework/integration/file/filters/AntPathFileListFilterTest.java rename to spring-integration-file/src/test/java/org/springframework/integration/file/filters/SimplePatternFileListFilterTest.java index eebf8cceaa..4d34937005 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/filters/AntPathFileListFilterTest.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/filters/SimplePatternFileListFilterTest.java @@ -12,21 +12,21 @@ import static org.junit.Assert.assertThat; * * Minimal test set to ensure AntPathMatcher is used correctly. */ -public class AntPathFileListFilterTest { +public class SimplePatternFileListFilterTest { @Test public void shouldMatchExactly() { - assertThat(new AntPathFileListFilter("foo/bar").accept(new File("foo/bar")), is(true)); + assertThat(new SimplePatternFileListFilter("bar").accept(new File("bar")), is(true)); } @Test public void shouldMatchQuestionMark() { - assertThat(new AntPathFileListFilter("*/bar").accept(new File("foo/bar")), is(true)); + assertThat(new SimplePatternFileListFilter("*bar").accept(new File("bar")), is(true)); } @Test public void shouldMatchWildcard() { - assertThat(new AntPathFileListFilter("foo/ba?").accept(new File("foo/bar")), is(true)); + assertThat(new SimplePatternFileListFilter("ba?").accept(new File("bar")), is(true)); } } diff --git a/src/docbkx/file.xml b/src/docbkx/file.xml index fd1e0d48d1..005c164808 100644 --- a/src/docbkx/file.xml +++ b/src/docbkx/file.xml @@ -91,10 +91,10 @@ ]]> + filename-pattern="test*" /> ]]> The first channel adapter is relying on the default filter that just prevents duplication, the second is using a custom filter, and the third is using the - filename-pattern attribute to add a Pattern + filename-pattern attribute to add a AntPathMatcher based filter to the FileReadingMessageSource. The file-name-pattern and filter attributes are mutually exclusive, but you can use a CompositeFileListFilter to use any combination of filters, including a