Refactored FtpSource and FileSource so that they inherit from the same base class AbstractDirectorySource. FtpSource namespace support is modified, so that it supports the type/message-creator pair, with the same semantic as FileSource. Implemented a distinct behaviour with respect to deleting files via MessageCreator: FtpSource will delete the local copies after creating the files, whereas FileSource will not.

This commit is contained in:
Marius Bogoevici
2008-05-24 15:34:54 +00:00
parent c2728c2f17
commit 3d00dd9930
19 changed files with 519 additions and 186 deletions

View File

@@ -40,9 +40,11 @@ public class FileTargetParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext("fileTargetParserTests.xml", this.getClass());
FileTarget target = (FileTarget) context.getBean("target");
DirectFieldAccessor targetFieldAccessor = new DirectFieldAccessor(target);
SimpleFileMessageMapper messageMapper = (SimpleFileMessageMapper) targetFieldAccessor.getPropertyValue("messageMapper");
SimpleFileMessageMapper messageMapper = (SimpleFileMessageMapper) targetFieldAccessor
.getPropertyValue("messageMapper");
DirectFieldAccessor mapperAccessor = new DirectFieldAccessor(messageMapper);
assertEquals(System.getProperty("java.io.tmpdir"), ((File) mapperAccessor.getPropertyValue("parentDirectory")).getAbsolutePath());
assertEquals(System.getProperty("java.io.tmpdir"), ((File) mapperAccessor.getPropertyValue("parentDirectory"))
.getAbsolutePath());
assertTrue(mapperAccessor.getPropertyValue("fileNameGenerator") instanceof DefaultFileNameGenerator);
}
@@ -51,10 +53,12 @@ public class FileTargetParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext("fileTargetParserTests.xml", this.getClass());
FileTarget target = (FileTarget) context.getBean("targetWithCustomNameGenerator");
DirectFieldAccessor targetFieldAccessor = new DirectFieldAccessor(target);
SimpleFileMessageMapper messageMapper = (SimpleFileMessageMapper) targetFieldAccessor.getPropertyValue("messageMapper");
SimpleFileMessageMapper messageMapper = (SimpleFileMessageMapper) targetFieldAccessor
.getPropertyValue("messageMapper");
DirectFieldAccessor mapperAccessor = new DirectFieldAccessor(messageMapper);
assertEquals(System.getProperty("java.io.tmpdir"), ((File) mapperAccessor.getPropertyValue("parentDirectory")).getAbsolutePath());
assertEquals(System.getProperty("java.io.tmpdir"), ((File) mapperAccessor.getPropertyValue("parentDirectory"))
.getAbsolutePath());
assertTrue(mapperAccessor.getPropertyValue("fileNameGenerator") instanceof CustomNameGenerator);
}
}

View File

@@ -10,9 +10,11 @@
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration-1.0.xsd">
<si:file-source id="fileSourceCustom" type="text" message-creator="customMessageCreator" directory="${java.io.tmpdir}"/>
<si:file-source id="fileSourceCustom" type="text"
message-creator="customMessageCreator" directory="${java.io.tmpdir}"/>
<bean id="customMessageCreator" class="org.springframework.integration.adapter.file.config.CustomMessageCreator"/>
<bean id="customMessageCreator"
class="org.springframework.integration.adapter.file.config.CustomMessageCreator"/>
<context:property-placeholder/>

View File

@@ -22,6 +22,8 @@ import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.integration.adapter.file.DirectoryContentManager;
import org.springframework.integration.adapter.file.FileInfo;
/**
* @author Marius Bogoevici

View File

@@ -17,25 +17,33 @@
package org.springframework.integration.adapter.ftp.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.ConfigurationException;
import org.springframework.integration.adapter.file.ByteArrayFileMessageCreator;
import org.springframework.integration.adapter.file.FileMessageCreator;
import org.springframework.integration.adapter.file.TextFileMessageCreator;
import org.springframework.integration.adapter.file.config.CustomMessageCreator;
import org.springframework.integration.adapter.ftp.FtpSource;
/**
* @author Mark Fisher
* @author Marius Bogoevici
*/
public class FtpSourceParserTests {
@Test
public void testFtpSourceAdapterParser() {
ApplicationContext context = new ClassPathXmlApplicationContext("ftpSourceParserTests.xml", this.getClass());
FtpSource ftpSource = (FtpSource) context.getBean("ftpSource");
FtpSource ftpSource = (FtpSource) context.getBean("ftpSourceDefault");
DirectFieldAccessor accessor = new DirectFieldAccessor(ftpSource);
assertEquals("testHost", accessor.getPropertyValue("host"));
assertEquals(2121, accessor.getPropertyValue("port"));
@@ -43,6 +51,90 @@ public class FtpSourceParserTests {
assertEquals("/remote", accessor.getPropertyValue("remoteWorkingDirectory"));
assertEquals("testUser", accessor.getPropertyValue("username"));
assertEquals("testPassword", accessor.getPropertyValue("password"));
Object messageCreator = accessor.getPropertyValue("messageCreator");
assertTrue(messageCreator instanceof FileMessageCreator);
DirectFieldAccessor messageCreatorAccessor = new DirectFieldAccessor(messageCreator);
assertEquals(messageCreatorAccessor.getPropertyValue("deleteFileAfterCreation"), false);
}
@Test
public void testFtpSourceTextType() {
ApplicationContext context = new ClassPathXmlApplicationContext("ftpSourceParserTests.xml", this.getClass());
FtpSource ftpSource = (FtpSource) context.getBean("ftpSourceText");
DirectFieldAccessor accessor = new DirectFieldAccessor(ftpSource);
assertEquals("testHost", accessor.getPropertyValue("host"));
assertEquals(2121, accessor.getPropertyValue("port"));
assertEquals(new File("/local"), accessor.getPropertyValue("localWorkingDirectory"));
assertEquals("/remote", accessor.getPropertyValue("remoteWorkingDirectory"));
assertEquals("testUser", accessor.getPropertyValue("username"));
assertEquals("testPassword", accessor.getPropertyValue("password"));
Object messageCreator = accessor.getPropertyValue("messageCreator");
assertTrue(messageCreator instanceof TextFileMessageCreator);
DirectFieldAccessor messageCreatorAccessor = new DirectFieldAccessor(messageCreator);
assertEquals(messageCreatorAccessor.getPropertyValue("deleteFileAfterCreation"), true);
}
@Test
public void testFtpSourceBinaryType() {
ApplicationContext context = new ClassPathXmlApplicationContext("ftpSourceParserTests.xml", this.getClass());
FtpSource ftpSource = (FtpSource) context.getBean("ftpSourceBinary");
DirectFieldAccessor accessor = new DirectFieldAccessor(ftpSource);
assertEquals("testHost", accessor.getPropertyValue("host"));
assertEquals(2121, accessor.getPropertyValue("port"));
assertEquals(new File("/local"), accessor.getPropertyValue("localWorkingDirectory"));
assertEquals("/remote", accessor.getPropertyValue("remoteWorkingDirectory"));
assertEquals("testUser", accessor.getPropertyValue("username"));
assertEquals("testPassword", accessor.getPropertyValue("password"));
Object messageCreator = accessor.getPropertyValue("messageCreator");
assertTrue(messageCreator instanceof ByteArrayFileMessageCreator);
DirectFieldAccessor messageCreatorAccessor = new DirectFieldAccessor(messageCreator);
assertEquals(messageCreatorAccessor.getPropertyValue("deleteFileAfterCreation"), true);
}
@Test
public void testFtpSourceFileType() {
ApplicationContext context = new ClassPathXmlApplicationContext("ftpSourceParserTests.xml", this.getClass());
FtpSource ftpSource = (FtpSource) context.getBean("ftpSourceFile");
DirectFieldAccessor accessor = new DirectFieldAccessor(ftpSource);
assertEquals("testHost", accessor.getPropertyValue("host"));
assertEquals(2121, accessor.getPropertyValue("port"));
assertEquals(new File("/local"), accessor.getPropertyValue("localWorkingDirectory"));
assertEquals("/remote", accessor.getPropertyValue("remoteWorkingDirectory"));
assertEquals("testUser", accessor.getPropertyValue("username"));
assertEquals("testPassword", accessor.getPropertyValue("password"));
Object messageCreator = accessor.getPropertyValue("messageCreator");
assertTrue(messageCreator instanceof FileMessageCreator);
DirectFieldAccessor messageCreatorAccessor = new DirectFieldAccessor(messageCreator);
assertEquals(messageCreatorAccessor.getPropertyValue("deleteFileAfterCreation"), false);
}
@Test
public void testFtpSourceCustomType() {
ApplicationContext context = new ClassPathXmlApplicationContext("ftpSourceParserTests.xml", this.getClass());
FtpSource ftpSource = (FtpSource) context.getBean("ftpSourceCustom");
DirectFieldAccessor accessor = new DirectFieldAccessor(ftpSource);
assertEquals("testHost", accessor.getPropertyValue("host"));
assertEquals(2121, accessor.getPropertyValue("port"));
assertEquals(new File("/local"), accessor.getPropertyValue("localWorkingDirectory"));
assertEquals("/remote", accessor.getPropertyValue("remoteWorkingDirectory"));
assertEquals("testUser", accessor.getPropertyValue("username"));
assertEquals("testPassword", accessor.getPropertyValue("password"));
Object messageCreator = accessor.getPropertyValue("messageCreator");
assertTrue(messageCreator instanceof CustomMessageCreator);
// not testing for deleteFileAfterCreation - this is completely left up
// to the implementation
}
@Test
public void testInvalidFtpSource() {
try {
ApplicationContext context = new ClassPathXmlApplicationContext("invalidFtpSourceTests.xml", this
.getClass());
fail();
}
catch (BeanDefinitionStoreException e) {
assertTrue(e.getCause() instanceof ConfigurationException);
}
}
}

View File

@@ -7,12 +7,51 @@
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration-1.0.xsd">
<si:ftp-source id="ftpSource"
<si:ftp-source id="ftpSourceDefault"
host="testHost"
port="2121"
local-working-directory="/local"
remote-working-directory="/remote"
username="testUser"
password="testPassword"/>
<si:ftp-source id="ftpSourceText"
host="testHost"
port="2121"
local-working-directory="/local"
remote-working-directory="/remote"
username="testUser"
password="testPassword"
type="text"/>
<si:ftp-source id="ftpSourceBinary"
host="testHost"
port="2121"
local-working-directory="/local"
remote-working-directory="/remote"
username="testUser"
password="testPassword"
type="binary"/>
<si:ftp-source id="ftpSourceFile"
host="testHost"
port="2121"
local-working-directory="/local"
remote-working-directory="/remote"
username="testUser"
password="testPassword"
type="file"/>
<si:ftp-source id="ftpSourceCustom"
host="testHost"
port="2121"
local-working-directory="/local"
remote-working-directory="/remote"
username="testUser"
password="testPassword"
message-creator="customMessageCreator"/>
<bean id="customMessageCreator"
class="org.springframework.integration.adapter.file.config.CustomMessageCreator"/>
</beans>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:si="http://www.springframework.org/schema/integration"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration-1.0.xsd">
<si:ftp-source id="ftpSourceCustom"
host="testHost"
port="2121"
local-working-directory="/local"
remote-working-directory="/remote"
username="testUser"
password="testPassword"
message-creator="customMessageCreator"
type="text"/>
<bean id="customMessageCreator"
class="org.springframework.integration.adapter.file.config.CustomMessageCreator"/>
<context:property-placeholder/>
</beans>