INT-1614 refactoring as much as possible into base class
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user