polishing INT-2235
This commit is contained in:
@@ -19,7 +19,7 @@ package org.springframework.integration.config.xml;
|
||||
import org.springframework.beans.BeanMetadataElement;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.integration.resource.ResourceMessageSource;
|
||||
import org.springframework.integration.resource.ResourceRetrievingMessageSource;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
@@ -33,7 +33,7 @@ public class ResourceInboundChannelAdapterParser extends AbstractPollingInboundC
|
||||
|
||||
@Override
|
||||
protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) {
|
||||
BeanDefinitionBuilder sourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(ResourceMessageSource.class);
|
||||
BeanDefinitionBuilder sourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(ResourceRetrievingMessageSource.class);
|
||||
sourceBuilder.addConstructorArgValue(element.getAttribute("pattern"));
|
||||
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(sourceBuilder, element, "pattern-resolver");
|
||||
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(sourceBuilder, element, "filter");
|
||||
|
||||
@@ -40,7 +40,7 @@ import org.springframework.util.ObjectUtils;
|
||||
* @author Mark Fisher
|
||||
* @since 2.1
|
||||
*/
|
||||
public class ResourceMessageSource extends AbstractMessageSource<Resource[]> implements ApplicationContextAware, InitializingBean {
|
||||
public class ResourceRetrievingMessageSource extends AbstractMessageSource<Resource[]> implements ApplicationContextAware, InitializingBean {
|
||||
|
||||
private final String pattern;
|
||||
|
||||
@@ -51,7 +51,7 @@ public class ResourceMessageSource extends AbstractMessageSource<Resource[]> imp
|
||||
private volatile CollectionFilter<Resource> filter;
|
||||
|
||||
|
||||
public ResourceMessageSource(String pattern) {
|
||||
public ResourceRetrievingMessageSource(String pattern) {
|
||||
Assert.hasText(pattern, "pattern must not be empty");
|
||||
this.pattern = pattern;
|
||||
}
|
||||
@@ -82,13 +82,16 @@ public class ResourceMessageSource extends AbstractMessageSource<Resource[]> imp
|
||||
protected Resource[] doReceive() {
|
||||
try {
|
||||
Resource[] resources = this.patternResolver.getResources(this.pattern);
|
||||
if (this.filter != null && !ObjectUtils.isEmpty(resources)) {
|
||||
if (ObjectUtils.isEmpty(resources)) {
|
||||
resources = null;
|
||||
}
|
||||
else if (this.filter != null) {
|
||||
Collection<Resource> filteredResources = this.filter.filter(Arrays.asList(resources));
|
||||
if (CollectionUtils.isEmpty(filteredResources)) {
|
||||
resources = null;
|
||||
}
|
||||
else {
|
||||
resources = filteredResources.toArray(new Resource[0]);
|
||||
resources = filteredResources.toArray(new Resource[filteredResources.size()]);
|
||||
}
|
||||
}
|
||||
return resources;
|
||||
@@ -19,12 +19,10 @@ package org.springframework.integration.resource;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -37,7 +35,6 @@ import org.springframework.integration.channel.QueueChannel;
|
||||
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.integration.util.CollectionFilter;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
@@ -49,7 +46,7 @@ public class ResourceInboundChannelAdapterParserTests {
|
||||
public void testDefaultConfig(){
|
||||
ApplicationContext context = new ClassPathXmlApplicationContext("ResourcePatternResolver-config.xml", this.getClass());
|
||||
SourcePollingChannelAdapter resourceAdapter = context.getBean("resourceAdapterDefault", SourcePollingChannelAdapter.class);
|
||||
ResourceMessageSource source = TestUtils.getPropertyValue(resourceAdapter, "source", ResourceMessageSource.class);
|
||||
ResourceRetrievingMessageSource source = TestUtils.getPropertyValue(resourceAdapter, "source", ResourceRetrievingMessageSource.class);
|
||||
assertNotNull(source);
|
||||
boolean autoStartup = TestUtils.getPropertyValue(resourceAdapter, "autoStartup", Boolean.class);
|
||||
assertFalse(autoStartup);
|
||||
@@ -67,7 +64,7 @@ public class ResourceInboundChannelAdapterParserTests {
|
||||
public void testCustomPatternResolver(){
|
||||
ApplicationContext context = new ClassPathXmlApplicationContext("ResourcePatternResolver-config-custom.xml", this.getClass());
|
||||
SourcePollingChannelAdapter resourceAdapter = context.getBean("resourceAdapterDefault", SourcePollingChannelAdapter.class);
|
||||
ResourceMessageSource source = TestUtils.getPropertyValue(resourceAdapter, "source", ResourceMessageSource.class);
|
||||
ResourceRetrievingMessageSource source = TestUtils.getPropertyValue(resourceAdapter, "source", ResourceRetrievingMessageSource.class);
|
||||
assertNotNull(source);
|
||||
assertEquals(context.getBean("customResolver"), TestUtils.getPropertyValue(source, "patternResolver"));
|
||||
}
|
||||
@@ -105,31 +102,27 @@ public class ResourceInboundChannelAdapterParserTests {
|
||||
|
||||
ApplicationContext context = new ClassPathXmlApplicationContext("ResourcePatternResolver-config-usagerf.xml", this.getClass());
|
||||
SourcePollingChannelAdapter resourceAdapter = context.getBean("resourceAdapterDefault", SourcePollingChannelAdapter.class);
|
||||
ResourceMessageSource source = TestUtils.getPropertyValue(resourceAdapter, "source", ResourceMessageSource.class);
|
||||
ResourceRetrievingMessageSource source = TestUtils.getPropertyValue(resourceAdapter, "source", ResourceRetrievingMessageSource.class);
|
||||
assertNotNull(source);
|
||||
assertEquals(context.getBean("rlFilter"), TestUtils.getPropertyValue(source, "filter"));
|
||||
|
||||
TestCollectionFilter customFilter = context.getBean("customFilter", TestCollectionFilter.class);
|
||||
assertEquals(customFilter, TestUtils.getPropertyValue(source, "filter"));
|
||||
|
||||
assertFalse(customFilter.invoked);
|
||||
resourceAdapter.start();
|
||||
QueueChannel resultChannel = context.getBean("resultChannel", QueueChannel.class);
|
||||
|
||||
Message<Resource[]> message = (Message<Resource[]>) resultChannel.receive(1000);
|
||||
assertNotNull(message);
|
||||
|
||||
message = (Message<Resource[]>) resultChannel.receive(1000);
|
||||
assertNull(message);
|
||||
|
||||
assertTrue(customFilter.invoked);
|
||||
}
|
||||
|
||||
|
||||
public static class OneItemAndNeverAgainResourceListFilter implements CollectionFilter<Resource> {
|
||||
public static class TestCollectionFilter implements CollectionFilter<Resource> {
|
||||
|
||||
private volatile boolean invoked = false;
|
||||
|
||||
private volatile boolean once = false;
|
||||
|
||||
public Collection<Resource> filter(Collection<Resource> unfilteredResources) {
|
||||
if (!once && !CollectionUtils.isEmpty(unfilteredResources)) {
|
||||
once = true;
|
||||
return Collections.singletonList(unfilteredResources.iterator().next());
|
||||
}
|
||||
return null;
|
||||
this.invoked = true;
|
||||
return unfilteredResources;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
|
||||
|
||||
<int:resource-inbound-channel-adapter id="resourceAdapterDefault" channel="resultChannel"
|
||||
pattern="file:#{T(java.lang.System).getProperty('java.io.tmpdir') + 'testUsage*'}"
|
||||
filter="rlFilter" auto-startup="true">
|
||||
pattern="file:#{T(java.lang.System).getProperty('java.io.tmpdir') + '/testUsage*'}"
|
||||
filter="customFilter" auto-startup="false">
|
||||
<int:poller fixed-rate="500"/>
|
||||
</int:resource-inbound-channel-adapter>
|
||||
|
||||
<bean id="rlFilter" class="org.springframework.integration.resource.ResourceInboundChannelAdapterParserTests.OneItemAndNeverAgainResourceListFilter"/>
|
||||
<bean id="customFilter" class="org.springframework.integration.resource.ResourceInboundChannelAdapterParserTests.TestCollectionFilter"/>
|
||||
|
||||
<int:channel id="resultChannel">
|
||||
<int:queue/>
|
||||
|
||||
Reference in New Issue
Block a user