INT-1614 refactoring as much as possible into base class

This commit is contained in:
Mark Fisher
2010-11-21 15:16:37 -05:00
parent 25e20b73c1
commit 54ea3867b6
3 changed files with 28 additions and 18 deletions

View File

@@ -17,7 +17,6 @@
package org.springframework.integration.ftp.inbound;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -54,17 +53,18 @@ public class FtpInboundFileSynchronizer extends AbstractInboundFileSynchronizer<
Collection<FTPFile> files = session.ls(remoteDirectoryPath);
if (!CollectionUtils.isEmpty(files)) {
Collection<FTPFile> filteredFiles = this.filterFiles(files.toArray(new FTPFile[]{}));
for (FTPFile ftpFile : filteredFiles) {
if ((ftpFile != null) && ftpFile.isFile()) {
copyFileToLocalDirectory(session, ftpFile, localDirectory);
for (FTPFile file : filteredFiles) {
if (file != null) {
copyFileToLocalDirectory(remoteDirectoryPath, file, localDirectory, session);
}
}
}
}
private boolean copyFileToLocalDirectory(Session session, FTPFile ftpFile, File localDirectory)
throws IOException, FileNotFoundException {
private boolean copyFileToLocalDirectory(String remoteDirectoryPath, FTPFile ftpFile, File localDirectory, Session session) throws IOException {
if (!ftpFile.isFile()) {
return false;
}
String remoteFileName = ftpFile.getName();
String localFileName = localDirectory.getPath() + "/" + remoteFileName;
File localFile = new File(localFileName);

View File

@@ -27,9 +27,11 @@ import org.springframework.integration.file.remote.session.Session;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer;
import org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource;
import org.springframework.util.CollectionUtils;
import org.springframework.util.FileCopyUtils;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
/**
* Handles the synchronization between a remote SFTP directory and a local mount.
@@ -47,18 +49,21 @@ public class SftpInboundFileSynchronizer extends AbstractInboundFileSynchronizer
@Override
protected void synchronizeToLocalDirectory(String remoteDirectoryPath, File localDirectory, Session session) throws IOException {
Collection<ChannelSftp.LsEntry> beforeFilter = session.ls(remoteDirectoryPath);
ChannelSftp.LsEntry[] entries = (beforeFilter == null) ? new ChannelSftp.LsEntry[0] :
beforeFilter.toArray(new ChannelSftp.LsEntry[beforeFilter.size()]);
Collection<ChannelSftp.LsEntry> files = this.filterFiles(entries);
for (ChannelSftp.LsEntry lsEntry : files) {
if ((lsEntry != null) && !lsEntry.getAttrs().isDir() && !lsEntry.getAttrs().isLink()) {
copyFromRemoteToLocalDirectory(remoteDirectoryPath, lsEntry, localDirectory, session);
Collection<LsEntry> files = session.ls(remoteDirectoryPath);
if (!CollectionUtils.isEmpty(files)) {
Collection<LsEntry> filteredFiles = this.filterFiles(files.toArray(new LsEntry[]{}));
for (LsEntry file : filteredFiles) {
if (file != null) {
copyFileToLocalDirectory(remoteDirectoryPath, file, localDirectory, session);
}
}
}
}
private boolean copyFromRemoteToLocalDirectory(String remoteDirectoryPath, ChannelSftp.LsEntry entry, File localDirectory, Session session) throws IOException {
private boolean copyFileToLocalDirectory(String remoteDirectoryPath, ChannelSftp.LsEntry entry, File localDirectory, Session session) throws IOException {
if (entry == null || entry.getAttrs() == null || entry.getAttrs().isDir() || entry.getAttrs().isLink()) {
return false;
}
File localFile = new File(localDirectory, entry.getFilename());
if (!localFile.exists()) {
InputStream in = null;

View File

@@ -34,6 +34,7 @@ import org.springframework.util.ReflectionUtils;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.SftpATTRS;
/**
* @author Oleg Zhurakousky
@@ -65,14 +66,18 @@ public class SftpInboundRemoteFileSystemSynchronizerTests {
@Test
public void testCopyAndRenameWhenLocalFileExists() throws Exception {
SftpInboundFileSynchronizer synchronizer = new SftpInboundFileSynchronizer(mock(SessionFactory.class));
Method method =
ReflectionUtils.findMethod(synchronizer.getClass(), "copyFromRemoteToLocalDirectory", String.class, LsEntry.class, File.class, Session.class);
Method method = ReflectionUtils.findMethod(synchronizer.getClass(),
"copyFileToLocalDirectory", String.class, LsEntry.class, File.class, Session.class);
method.setAccessible(true);
Session session = mock(Session.class);
LsEntry entry = mock(LsEntry.class);
SftpATTRS attrs = mock(SftpATTRS.class);
when(attrs.isDir()).thenReturn(false);
when(attrs.isLink()).thenReturn(false);
when(entry.getAttrs()).thenReturn(attrs);
when(entry.getFilename()).thenReturn("foo.txt");
File localDir = new File("target");
boolean success = (Boolean) method.invoke(synchronizer, "remoteDir", entry, localDir, session);
Boolean success = (Boolean) method.invoke(synchronizer, "remoteDir", entry, localDir, session);
assertTrue(success);
}
/**