INT-1591 FileListFilter is now parameterized. Existing implementations required refactoring to specify <File> for <F>.

This commit is contained in:
Mark Fisher
2010-11-08 17:31:32 -05:00
parent 59a15d6177
commit e4f6b33b7b
37 changed files with 603 additions and 442 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,18 +16,22 @@
package org.springframework.integration.file;
import org.junit.Test;
import org.springframework.integration.file.entries.CompositeEntryListFilter;
import org.springframework.integration.file.entries.EntryListFilter;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.springframework.integration.file.filters.CompositeFileListFilter;
import org.springframework.integration.file.filters.FileListFilter;
/**
* @author Iwein Fuld
@@ -35,46 +39,46 @@ import static org.mockito.Mockito.*;
public class CompositeFileListFilterTests {
@SuppressWarnings("unchecked")
private EntryListFilter<File> fileFilterMock1 = mock(EntryListFilter.class);
private FileListFilter<File> fileFilterMock1 = mock(FileListFilter.class);
@SuppressWarnings("unchecked")
private EntryListFilter<File> fileFilterMock2 = mock(EntryListFilter.class);
private FileListFilter<File> fileFilterMock2 = mock(FileListFilter.class);
private File fileMock = mock(File.class);
@Test
public void forwardedToFilters() throws Exception {
CompositeEntryListFilter<File> compositeFileFilter = new CompositeEntryListFilter<File>();
compositeFileFilter .addFilter(fileFilterMock1);compositeFileFilter.addFilter( fileFilterMock2);
CompositeFileListFilter<File> compositeFileFilter = new CompositeFileListFilter<File>();
compositeFileFilter .addFilter(fileFilterMock1);compositeFileFilter.addFilter(fileFilterMock2);
List<File> returnedFiles = Arrays.asList( fileMock);
when(fileFilterMock1.filterEntries(isA(File[].class))).thenReturn(returnedFiles);
when(fileFilterMock2.filterEntries(isA(File[].class))).thenReturn(returnedFiles);
assertEquals(returnedFiles, compositeFileFilter.filterEntries(new File[]{fileMock}));
verify(fileFilterMock1).filterEntries(isA(File[].class));
verify(fileFilterMock2).filterEntries(isA(File[].class));
when(fileFilterMock1.filterFiles(isA(File[].class))).thenReturn(returnedFiles);
when(fileFilterMock2.filterFiles(isA(File[].class))).thenReturn(returnedFiles);
assertEquals(returnedFiles, compositeFileFilter.filterFiles(new File[]{fileMock}));
verify(fileFilterMock1).filterFiles(isA(File[].class));
verify(fileFilterMock2).filterFiles(isA(File[].class));
}
@Test
public void forwardedToAddedFilters() throws Exception {
CompositeEntryListFilter<File> compositeFileFilter = new CompositeEntryListFilter<File>();
CompositeFileListFilter<File> compositeFileFilter = new CompositeFileListFilter<File>();
compositeFileFilter.addFilter(fileFilterMock1);
compositeFileFilter.addFilter( fileFilterMock2);
List<File> returnedFiles = Arrays.asList(fileMock);
when(fileFilterMock1.filterEntries(isA(File[].class))).thenReturn(returnedFiles);
when(fileFilterMock2.filterEntries(isA(File[].class))).thenReturn(returnedFiles);
assertEquals(returnedFiles, compositeFileFilter.filterEntries(new File[]{fileMock}));
verify(fileFilterMock1).filterEntries(isA(File[].class));
verify(fileFilterMock2).filterEntries(isA(File[].class));
when(fileFilterMock1.filterFiles(isA(File[].class))).thenReturn(returnedFiles);
when(fileFilterMock2.filterFiles(isA(File[].class))).thenReturn(returnedFiles);
assertEquals(returnedFiles, compositeFileFilter.filterFiles(new File[]{fileMock}));
verify(fileFilterMock1).filterFiles(isA(File[].class));
verify(fileFilterMock2).filterFiles(isA(File[].class));
}
@Test
public void negative() throws Exception {
CompositeEntryListFilter<File> compositeFileFilter = new CompositeEntryListFilter<File>();
CompositeFileListFilter<File> compositeFileFilter = new CompositeFileListFilter<File>();
compositeFileFilter.addFilter(fileFilterMock1);
compositeFileFilter.addFilter(fileFilterMock2);
when(fileFilterMock2.filterEntries(isA(File[].class))).thenReturn(new ArrayList<File>());
when(fileFilterMock1.filterEntries(isA(File[].class))).thenReturn(new ArrayList<File>());
assertTrue(compositeFileFilter.filterEntries(new File[]{fileMock}).isEmpty());
when(fileFilterMock2.filterFiles(isA(File[].class))).thenReturn(new ArrayList<File>());
when(fileFilterMock1.filterFiles(isA(File[].class))).thenReturn(new ArrayList<File>());
assertTrue(compositeFileFilter.filterFiles(new File[]{fileMock}).isEmpty());
}
}

View File

@@ -13,12 +13,12 @@
<bean id="entryNameExtractor" class="org.springframework.integration.file.entries.FileEntryNameExtractor"/>
<!-- customized filter -->
<bean id="legacyCompositeFilter" class="org.springframework.integration.file.entries.CompositeEntryListFilter">
<bean id="legacyCompositeFilter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
<constructor-arg>
<list>
<bean class="org.springframework.integration.file.entries.AcceptOnceEntryFileListFilter"/>
<bean class="org.springframework.integration.file.filters.AcceptOnceFileListFilter"/>
<bean class="org.springframework.integration.file.TestFileListFilter"/>
<bean class="org.springframework.integration.file.entries.PatternMatchingEntryListFilter">
<bean class="org.springframework.integration.file.filters.PatternMatchingFileListFilter">
<constructor-arg ref="entryNameExtractor"/>
<constructor-arg value="test*"/>
</bean>

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,8 +16,21 @@
package org.springframework.integration.file;
import org.junit.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import java.io.File;
import java.util.concurrent.CountDownLatch;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.Message;
@@ -25,11 +38,6 @@ import org.springframework.test.annotation.Repeat;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.File;
import java.util.concurrent.CountDownLatch;
import static org.junit.Assert.*;
/**
* @author Iwein Fuld
*/

View File

@@ -16,19 +16,21 @@
package org.springframework.integration.file;
import org.junit.Test;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.file.entries.EntryListFilter;
import org.springframework.integration.file.entries.FileEntryNameExtractor;
import org.springframework.integration.file.entries.PatternMatchingEntryListFilter;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
import java.util.regex.Pattern;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.file.entries.FileEntryNameExtractor;
import org.springframework.integration.file.entries.PatternMatchingEntryListFilter;
import org.springframework.integration.file.filters.FileListFilter;
import org.springframework.integration.file.filters.PatternMatchingFileListFilter;
/**
* @author Mark Fisher
@@ -41,8 +43,8 @@ public class PatternMatchingFileListFilterTests {
public void matchSingleFile() {
File[] files = new File[]{new File("/some/path/test.txt")};
Pattern pattern = Pattern.compile("[a-z]+\\.txt");
PatternMatchingEntryListFilter<File> filter = new PatternMatchingEntryListFilter<File>(fileEntryNameExtractor, pattern);
List<File> accepted = filter.filterEntries(files);
PatternMatchingFileListFilter<File> filter = new PatternMatchingFileListFilter<File>(fileEntryNameExtractor, pattern);
List<File> accepted = filter.filterFiles(files);
assertEquals(1, accepted.size());
}
@@ -50,8 +52,8 @@ public class PatternMatchingFileListFilterTests {
public void noMatchWithSingleFile() {
File[] files = new File[]{new File("/some/path/Test.txt")};
Pattern pattern = Pattern.compile("[a-z]+\\.txt");
PatternMatchingEntryListFilter<File> filter = new PatternMatchingEntryListFilter<File>(fileEntryNameExtractor, pattern);
List<File> accepted = filter.filterEntries(files);
PatternMatchingFileListFilter<File> filter = new PatternMatchingFileListFilter<File>(fileEntryNameExtractor, pattern);
List<File> accepted = filter.filterFiles(files);
assertEquals(0, accepted.size());
}
@@ -77,9 +79,9 @@ public class PatternMatchingFileListFilterTests {
public void patternEditorInContext() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"patternMatchingFileListFilterTests.xml", this.getClass());
EntryListFilter<File> filter = (EntryListFilter<File>) context.getBean("filter");
File[] files = new File[]{new File("/some/path/foo.txt")};
List<File> accepted = filter.filterEntries(files);
FileListFilter<File> filter = (FileListFilter<File>) context.getBean("filter");
File[] files = new File[] { new File("/some/path/foo.txt") };
List<File> accepted = filter.filterFiles(files);
assertEquals(1, accepted.size());
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,17 +16,19 @@
package org.springframework.integration.file;
import org.springframework.integration.file.entries.EntryListFilter;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import org.springframework.integration.file.filters.FileListFilter;
/**
* @author Iwein Fuld
*/
public class TestFileListFilter implements EntryListFilter<File> {
public List<File> filterEntries(File[] entries) {
public class TestFileListFilter implements FileListFilter<File> {
public List<File> filterFiles(File[] entries) {
return Arrays.asList(entries);
}
}

View File

@@ -16,25 +16,28 @@
package org.springframework.integration.file.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.Comparator;
import java.util.concurrent.PriorityBlockingQueue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.integration.channel.AbstractMessageChannel;
import org.springframework.integration.file.DefaultDirectoryScanner;
import org.springframework.integration.file.FileReadingMessageSource;
import org.springframework.integration.file.entries.AcceptOnceEntryFileListFilter;
import org.springframework.integration.file.filters.AcceptOnceFileListFilter;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.File;
import java.util.Comparator;
import java.util.concurrent.PriorityBlockingQueue;
import static org.junit.Assert.*;
/**
* @author Iwein Fuld
* @author Mark Fisher
@@ -76,7 +79,7 @@ public class FileInboundChannelAdapterParserTests {
DirectFieldAccessor scannerAccessor = new DirectFieldAccessor(scanner);
Object filter = scannerAccessor.getPropertyValue("filter");
assertTrue("'filter' should be set",
filter instanceof AcceptOnceEntryFileListFilter);
filter instanceof AcceptOnceFileListFilter);
}
@Test

View File

@@ -16,8 +16,17 @@
package org.springframework.integration.file.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.Set;
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;
@@ -25,18 +34,13 @@ import org.springframework.context.ApplicationContext;
import org.springframework.integration.channel.AbstractMessageChannel;
import org.springframework.integration.endpoint.AbstractEndpoint;
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.filters.AcceptOnceFileListFilter;
import org.springframework.integration.file.filters.CompositeFileListFilter;
import org.springframework.integration.file.filters.FileListFilter;
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 static org.junit.Assert.*;
/**
* @author Mark Fisher
* @author Iwein Fuld
@@ -83,15 +87,14 @@ public class FileInboundChannelAdapterWithPatternParserTests {
@Test
public void compositeFilterType() {
DirectFieldAccessor scannerAccessor = new DirectFieldAccessor(accessor.getPropertyValue("scanner"));
assertTrue(scannerAccessor.getPropertyValue("filter") instanceof CompositeEntryListFilter);
assertTrue(scannerAccessor.getPropertyValue("filter") instanceof CompositeFileListFilter);
}
@Test
@SuppressWarnings("unchecked")
public void compositeFilterSetSize() {
DirectFieldAccessor scannerAccessor = new DirectFieldAccessor(accessor.getPropertyValue("scanner"));
Set<EntryListFilter<File>> filters = (Set<EntryListFilter<File>>) new DirectFieldAccessor(
Set<FileListFilter<File>> filters = (Set<FileListFilter<File>>) new DirectFieldAccessor(
scannerAccessor.getPropertyValue("filter")).getPropertyValue("fileFilters");
assertEquals(2, filters.size());
}
@@ -100,12 +103,11 @@ public class FileInboundChannelAdapterWithPatternParserTests {
@SuppressWarnings("unchecked")
public void acceptOnceFilter() {
DirectFieldAccessor scannerAccessor = new DirectFieldAccessor(accessor.getPropertyValue("scanner"));
Set<EntryListFilter<File>> filters = (Set<EntryListFilter<File>>) new DirectFieldAccessor(
Set<FileListFilter<File>> filters = (Set<FileListFilter<File>>) new DirectFieldAccessor(
scannerAccessor.getPropertyValue("filter")).getPropertyValue("fileFilters");
boolean hasAcceptOnceFilter = false;
for (EntryListFilter<File> filter : filters) {
if (filter instanceof AcceptOnceEntryFileListFilter) {
for (FileListFilter<File> filter : filters) {
if (filter instanceof AcceptOnceFileListFilter) {
hasAcceptOnceFilter = true;
}
}
@@ -116,10 +118,10 @@ public class FileInboundChannelAdapterWithPatternParserTests {
@SuppressWarnings("unchecked")
public void patternFilter() {
DirectFieldAccessor scannerAccessor = new DirectFieldAccessor(accessor.getPropertyValue("scanner"));
Set<EntryListFilter<?>> filters = (Set<EntryListFilter<?>>) new DirectFieldAccessor(
Set<FileListFilter<?>> filters = (Set<FileListFilter<?>>) new DirectFieldAccessor(
scannerAccessor.getPropertyValue("filter")).getPropertyValue("fileFilters");
String pattern = null;
for (EntryListFilter<?> filter : filters) {
for (FileListFilter<?> filter : filters) {
if (filter instanceof SimplePatternFileListFilter) {
pattern = (String) new DirectFieldAccessor(filter).getPropertyValue("path");
}

View File

@@ -16,27 +16,33 @@
package org.springframework.integration.file.config;
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.filters.SimplePatternFileListFilter;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
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.*;
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.filters.AcceptOnceFileListFilter;
import org.springframework.integration.file.filters.CompositeFileListFilter;
import org.springframework.integration.file.filters.FileListFilter;
import org.springframework.integration.file.filters.SimplePatternFileListFilter;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Mark Fisher
@@ -55,98 +61,98 @@ public class FileInboundChannelAdapterWithPreventDuplicatesFlagTests {
@Test
public void filterAndNull() {
EntryListFilter<?> filter = this.extractFilter("filterAndNull");
assertFalse(filter instanceof CompositeEntryListFilter);
FileListFilter<?> filter = this.extractFilter("filterAndNull");
assertFalse(filter instanceof CompositeFileListFilter);
assertSame(testFilter, filter);
}
@Test
public void filterAndTrue() {
EntryListFilter<?> filter = this.extractFilter("filterAndTrue");
assertTrue(filter instanceof CompositeEntryListFilter);
FileListFilter<?> filter = this.extractFilter("filterAndTrue");
assertTrue(filter instanceof CompositeFileListFilter);
Collection<?> filters = (Collection<?>) new DirectFieldAccessor(filter).getPropertyValue("fileFilters");
assertTrue(filters.iterator().next() instanceof AcceptOnceEntryFileListFilter);
assertTrue(filters.iterator().next() instanceof AcceptOnceFileListFilter);
assertTrue(filters.contains(testFilter));
}
@Test
public void filterAndFalse() throws Exception {
EntryListFilter<?> filter = this.extractFilter("filterAndFalse");
assertFalse(filter instanceof CompositeEntryListFilter);
FileListFilter<?> filter = this.extractFilter("filterAndFalse");
assertFalse(filter instanceof CompositeFileListFilter);
assertSame(testFilter, filter);
}
@Test
@SuppressWarnings("unchecked")
public void patternAndNull() throws Exception {
EntryListFilter<?> filter = this.extractFilter("patternAndNull");
assertTrue(filter instanceof CompositeEntryListFilter);
Collection<EntryListFilter<File>> filters = (Collection<EntryListFilter<File>>)
FileListFilter<?> filter = this.extractFilter("patternAndNull");
assertTrue(filter instanceof CompositeFileListFilter);
Collection<FileListFilter<File>> filters = (Collection<FileListFilter<File>>)
new DirectFieldAccessor(filter).getPropertyValue("fileFilters");
Iterator<EntryListFilter<File>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter);
Iterator<FileListFilter<File>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceFileListFilter);
assertThat(iterator.next(), is(SimplePatternFileListFilter.class));
}
@Test
@SuppressWarnings("unchecked")
public void patternAndTrue() throws Exception {
EntryListFilter<?> filter = this.extractFilter("patternAndTrue");
assertTrue(filter instanceof CompositeEntryListFilter);
Collection<EntryListFilter<File>> filters = (Collection<EntryListFilter<File>>)
FileListFilter<?> filter = this.extractFilter("patternAndTrue");
assertTrue(filter instanceof CompositeFileListFilter);
Collection<FileListFilter<File>> filters = (Collection<FileListFilter<File>>)
new DirectFieldAccessor(filter).getPropertyValue("fileFilters");
Iterator<EntryListFilter<File>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter);
Iterator<FileListFilter<File>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceFileListFilter);
assertThat(iterator.next(), is(SimplePatternFileListFilter.class));
}
@Test
public void patternAndFalse() throws Exception {
EntryListFilter<File> filter = this.extractFilter("patternAndFalse");
assertFalse(filter instanceof CompositeEntryListFilter);
FileListFilter<File> filter = this.extractFilter("patternAndFalse");
assertFalse(filter instanceof CompositeFileListFilter);
assertThat(filter, is(SimplePatternFileListFilter.class));
}
@Test
public void defaultAndNull() throws Exception {
EntryListFilter<File> filter = this.extractFilter("defaultAndNull");
FileListFilter<File> filter = this.extractFilter("defaultAndNull");
assertNotNull(filter);
assertFalse(filter instanceof CompositeEntryListFilter);
assertTrue(filter instanceof AcceptOnceEntryFileListFilter);
assertFalse(filter instanceof CompositeFileListFilter);
assertTrue(filter instanceof AcceptOnceFileListFilter);
File testFile = new File("test");
File[] files = new File[] { testFile, testFile, testFile };
List<File> result = filter.filterEntries(files);
List<File> result = filter.filterFiles(files);
assertEquals(1, result.size());
}
@Test
public void defaultAndTrue() throws Exception {
EntryListFilter<File> filter = this.extractFilter("defaultAndTrue");
assertFalse(filter instanceof CompositeEntryListFilter);
assertTrue(filter instanceof AcceptOnceEntryFileListFilter);
FileListFilter<File> filter = this.extractFilter("defaultAndTrue");
assertFalse(filter instanceof CompositeFileListFilter);
assertTrue(filter instanceof AcceptOnceFileListFilter);
File testFile = new File("test");
File[] files = new File[] { testFile, testFile, testFile };
List<File> result = filter.filterEntries(files);
List<File> result = filter.filterFiles(files);
assertEquals(1, result.size());
}
@Test
public void defaultAndFalse() throws Exception {
EntryListFilter<File> filter = this.extractFilter("defaultAndFalse");
FileListFilter<File> filter = this.extractFilter("defaultAndFalse");
assertNotNull(filter);
assertFalse(filter instanceof CompositeEntryListFilter);
assertFalse(filter instanceof AcceptOnceEntryFileListFilter);
assertFalse(filter instanceof CompositeFileListFilter);
assertFalse(filter instanceof AcceptOnceFileListFilter);
File testFile = new File("test");
File[] files = new File[] { testFile, testFile, testFile };
List<File> result = filter.filterEntries(files);
List<File> result = filter.filterFiles(files);
assertEquals(3, result.size());
}
@SuppressWarnings("unchecked")
private EntryListFilter<File> extractFilter(String beanName) {
return (EntryListFilter<File>)
private FileListFilter<File> extractFilter(String beanName) {
return (FileListFilter<File>)
new DirectFieldAccessor(
new DirectFieldAccessor(
new DirectFieldAccessor(context.getBean(beanName))

View File

@@ -35,7 +35,7 @@
</inbound-channel-adapter>
<beans:bean class="org.springframework.integration.file.config.FileListFilterFactoryBean" />
<beans:bean id="filter" class="org.springframework.integration.file.entries.CompositeEntryListFilter">
<beans:bean id="filter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
<beans:constructor-arg>
<beans:list></beans:list>
</beans:constructor-arg>

View File

@@ -16,17 +16,24 @@
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 static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.Collection;
import java.util.Iterator;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.integration.file.filters.AbstractFileListFilter;
import org.springframework.integration.file.filters.AcceptOnceFileListFilter;
import org.springframework.integration.file.filters.CompositeFileListFilter;
import org.springframework.integration.file.filters.FileListFilter;
import org.springframework.integration.file.filters.SimplePatternFileListFilter;
/**
* @author Mark Fisher
@@ -47,8 +54,8 @@ public class FileListFilterFactoryBeanTests {
FileListFilterFactoryBean factory = new FileListFilterFactoryBean();
TestFilter testFilter = new TestFilter();
factory.setFilterReference(testFilter);
EntryListFilter<File> result = factory.getObject();
assertFalse(result instanceof CompositeEntryListFilter);
FileListFilter<File> result = factory.getObject();
assertFalse(result instanceof CompositeFileListFilter);
assertSame(testFilter, result);
}
@@ -58,10 +65,10 @@ public class FileListFilterFactoryBeanTests {
TestFilter testFilter = new TestFilter();
factory.setFilterReference(testFilter);
factory.setPreventDuplicates(Boolean.TRUE);
EntryListFilter<File> result = factory.getObject();
assertTrue(result instanceof CompositeEntryListFilter);
FileListFilter<File> result = factory.getObject();
assertTrue(result instanceof CompositeFileListFilter);
Collection<?> filters = (Collection<?>) new DirectFieldAccessor(result).getPropertyValue("fileFilters");
assertTrue(filters.iterator().next() instanceof AcceptOnceEntryFileListFilter);
assertTrue(filters.iterator().next() instanceof AcceptOnceFileListFilter);
assertTrue(filters.contains(testFilter));
}
@@ -71,8 +78,8 @@ public class FileListFilterFactoryBeanTests {
TestFilter testFilter = new TestFilter();
factory.setFilterReference(testFilter);
factory.setPreventDuplicates(Boolean.FALSE);
EntryListFilter<File> result = factory.getObject();
assertFalse(result instanceof CompositeEntryListFilter);
FileListFilter<File> result = factory.getObject();
assertFalse(result instanceof CompositeFileListFilter);
assertSame(testFilter, result);
}
@@ -81,12 +88,12 @@ public class FileListFilterFactoryBeanTests {
public void filenamePatternAndPreventDuplicatesNull() throws Exception {
FileListFilterFactoryBean factory = new FileListFilterFactoryBean();
factory.setFilenamePattern("foo");
EntryListFilter<File> result = factory.getObject();
assertTrue(result instanceof CompositeEntryListFilter);
Collection<EntryListFilter<?>> filters = (Collection<EntryListFilter<?>>)
FileListFilter<File> result = factory.getObject();
assertTrue(result instanceof CompositeFileListFilter);
Collection<FileListFilter<?>> filters = (Collection<FileListFilter<?>>)
new DirectFieldAccessor(result).getPropertyValue("fileFilters");
Iterator<EntryListFilter<?>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter);
Iterator<FileListFilter<?>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceFileListFilter);
assertThat(iterator.next(), is(SimplePatternFileListFilter.class));
}
@@ -96,12 +103,12 @@ public class FileListFilterFactoryBeanTests {
FileListFilterFactoryBean factory = new FileListFilterFactoryBean();
factory.setFilenamePattern(("foo"));
factory.setPreventDuplicates(Boolean.TRUE);
EntryListFilter<File> result = factory.getObject();
assertTrue(result instanceof CompositeEntryListFilter);
Collection<EntryListFilter<?>> filters = (Collection<EntryListFilter<?>>)
FileListFilter<File> result = factory.getObject();
assertTrue(result instanceof CompositeFileListFilter);
Collection<FileListFilter<?>> filters = (Collection<FileListFilter<?>>)
new DirectFieldAccessor(result).getPropertyValue("fileFilters");
Iterator<EntryListFilter<?>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceEntryFileListFilter);
Iterator<FileListFilter<?>> iterator = filters.iterator();
assertTrue(iterator.next() instanceof AcceptOnceFileListFilter);
assertThat(iterator.next(), is(SimplePatternFileListFilter.class));
}
@@ -110,13 +117,13 @@ public class FileListFilterFactoryBeanTests {
FileListFilterFactoryBean factory = new FileListFilterFactoryBean();
factory.setFilenamePattern(("foo"));
factory.setPreventDuplicates(Boolean.FALSE);
EntryListFilter<File> result = factory.getObject();
assertFalse(result instanceof CompositeEntryListFilter);
FileListFilter<File> result = factory.getObject();
assertFalse(result instanceof CompositeFileListFilter);
assertThat(result, is(SimplePatternFileListFilter.class));
}
private static class TestFilter extends AbstractEntryListFilter<File> {
private static class TestFilter extends AbstractFileListFilter<File> {
@Override
public boolean accept(File file) {
return true;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,25 +13,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.file.locking;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.io.File;
import org.junit.Before;
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.integration.endpoint.SourcePollingChannelAdapter;
import org.springframework.integration.file.FileReadingMessageSource;
import org.springframework.integration.file.entries.CompositeEntryListFilter;
import org.springframework.integration.file.filters.CompositeFileListFilter;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.File;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
/**
* @author Iwein Fuld
*/
@@ -65,7 +67,7 @@ public class FileLockingNamespaceTests {
@Test
public void shouldSetCustomLockerProperly() {
assertThat(extractFromScanner("locker", customLockingSource), is(StubLocker.class));
assertThat(extractFromScanner("filter", customLockingSource), is(CompositeEntryListFilter.class));
assertThat(extractFromScanner("filter", customLockingSource), is(CompositeFileListFilter.class));
}
private Object extractFromScanner(String propertyName, FileReadingMessageSource source) {
@@ -75,7 +77,7 @@ public class FileLockingNamespaceTests {
@Test
public void shouldSetNioLockerProperly() {
assertThat(extractFromScanner("locker", nioLockingSource), is(NioFileLocker.class));
assertThat(extractFromScanner("filter", nioLockingSource), is(CompositeEntryListFilter.class));
assertThat(extractFromScanner("filter", nioLockingSource), is(CompositeFileListFilter.class));
}
public static class StubLocker extends AbstractFileLockerFilter {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.file.locking;
import static org.hamcrest.CoreMatchers.nullValue;
@@ -26,6 +27,7 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.file.FileReadingMessageSource;
@@ -37,51 +39,51 @@ import org.springframework.test.context.ContextConfiguration;
@ContextConfiguration
@RunWith(org.springframework.test.context.junit4.SpringJUnit4ClassRunner.class)
public class FileLockingWithMultipleSourcesIntegrationTests {
private static File workdir;
@BeforeClass
public static void setupWorkDirectory() throws Exception {
workdir = new File(
new File(System.getProperty("java.io.tmpdir")),
FileLockingWithMultipleSourcesIntegrationTests.class.getSimpleName()
);
workdir.mkdir();
}
private static File workdir;
@Autowired
@Qualifier("fileSource1")
private FileReadingMessageSource fileSource1;
@BeforeClass
public static void setupWorkDirectory() throws Exception {
workdir = new File(new File(System.getProperty("java.io.tmpdir")),
FileLockingWithMultipleSourcesIntegrationTests.class.getSimpleName());
workdir.mkdir();
}
@Autowired
@Qualifier("fileSource2")
private FileReadingMessageSource fileSource2;
@Autowired
@Qualifier("fileSource1")
private FileReadingMessageSource fileSource1;
@Autowired
@Qualifier("fileSource2")
private FileReadingMessageSource fileSource3;
@Autowired
@Qualifier("fileSource2")
private FileReadingMessageSource fileSource2;
@Before
public void cleanoutWorkDir() {
for (File file : workdir.listFiles()) {
file.delete();
}
}
@Autowired
@Qualifier("fileSource2")
private FileReadingMessageSource fileSource3;
@Test
public void filePickedUpOnceWithDistinctFilters() throws IOException {
File testFile = new File(workdir, "test");
testFile.createNewFile();
assertThat(fileSource1.receive(), hasPayload(testFile));
assertThat(fileSource2.receive(), nullValue());
FileChannelCache.closeChannelFor(testFile);
}
@Before
public void cleanoutWorkDir() {
for (File file : workdir.listFiles()) {
file.delete();
}
}
@Test
public void filePickedUpOnceWithDistinctFilters() throws IOException {
File testFile = new File(workdir, "test");
testFile.createNewFile();
assertThat(fileSource1.receive(), hasPayload(testFile));
assertThat(fileSource2.receive(), nullValue());
FileChannelCache.closeChannelFor(testFile);
}
@Test
public void filePickedUpTwiceWithSharedFilter() throws Exception {
File testFile = new File(workdir, "test");
testFile.createNewFile();
assertThat(fileSource1.receive(), hasPayload(testFile));
assertThat(fileSource3.receive(), hasPayload(testFile));
FileChannelCache.closeChannelFor(testFile);
}
@Test
public void filePickedUpTwiceWithSharedFilter() throws Exception {
File testFile = new File(workdir, "test");
testFile.createNewFile();
assertThat(fileSource1.receive(), hasPayload(testFile));
assertThat(fileSource3.receive(), hasPayload(testFile));
FileChannelCache.closeChannelFor(testFile);
}
}

View File

@@ -13,20 +13,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.file.locking;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.springframework.integration.file.entries.EntryListFilter;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.springframework.integration.file.filters.FileListFilter;
/**
* @author Iwein Fuld
@@ -49,20 +51,20 @@ public class NioFileLockerTests {
NioFileLocker filter = new NioFileLocker();
File testFile = new File(workdir, "test0");
testFile.createNewFile();
assertThat(filter.filterEntries(workdir.listFiles()).get(0), is(testFile));
assertThat(filter.filterFiles(workdir.listFiles()).get(0), is(testFile));
filter.lock(testFile);
assertThat(filter.filterEntries(workdir.listFiles()).get(0), is(testFile));
assertThat(filter.filterFiles(workdir.listFiles()).get(0), is(testFile));
}
@Test
public void fileNotListedWhenLockedByOtherFilter() throws IOException {
NioFileLocker filter1 = new NioFileLocker();
EntryListFilter<File> filter2 = new NioFileLocker();
FileListFilter<File> filter2 = new NioFileLocker();
File testFile = new File(workdir, "test1");
testFile.createNewFile();
assertThat(filter1.filterEntries(workdir.listFiles()).get(0), is(testFile));
assertThat(filter1.filterFiles(workdir.listFiles()).get(0), is(testFile));
filter1.lock(testFile);
assertThat(filter2.filterEntries(workdir.listFiles()), is((List<File>)new ArrayList<File>()));
assertThat(filter2.filterFiles(workdir.listFiles()), is((List<File>) new ArrayList<File>()));
}
}

View File

@@ -8,7 +8,7 @@
<constructor-arg value="fo+\.[tx]{3}"/>
</bean>
-->
<bean id="filter" class="org.springframework.integration.file.entries.PatternMatchingEntryListFilter">
<bean id="filter" class="org.springframework.integration.file.filters.PatternMatchingFileListFilter">
<constructor-arg>
<bean class="org.springframework.integration.file.entries.FileEntryNameExtractor"/>
</constructor-arg>