Can we share the common logic in a base class of the ftp producers?
I can see lots of similar code between the ftp producer and sftp producer.
Willem
[EMAIL PROTECTED] wrote:
Author: davsclaus
Date: Sun Jul 27 21:13:47 2008
New Revision: 680250
URL: http://svn.apache.org/viewvc?rev=680250&view=rev
Log:
CAMEL-758: ftp producer creates remote folders one-by-one if remote server can
not build muti folders at once. Applied patch from Bela. Implemented the same
logic on both SFTP and FTP.
Modified:
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpProducer.java
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpProducer.java
Modified:
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpProducer.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpProducer.java?rev=680250&r1=680249&r2=680250&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpProducer.java
(original)
+++
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpProducer.java
Sun Jul 27 21:13:47 2008
@@ -24,7 +24,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
-import org.apache.commons.net.ftp.FTPConnectionClosedException;
public class FtpProducer extends RemoteFileProducer<RemoteFileExchange> {
private static final transient Log LOG =
LogFactory.getLog(FtpProducer.class);
@@ -139,6 +138,11 @@
LOG.debug("Trying to build remote directory: " + dirName);
}
success = ftpClient.makeDirectory(dirName);
+ if (! success) {
+ // we are here if the server side doesn't create
intermediate folders
+ // so create the folder one by one
+ buildDirectoryChunks(ftpClient, dirName);
+ }
}
} finally {
// change back to original directory
@@ -148,6 +152,24 @@
return success;
}
+ private static boolean buildDirectoryChunks(FTPClient ftpClient, String dirName) throws IOException {
+ final StringBuilder sb = new StringBuilder(dirName.length());
+ final String[] dirs = dirName.split("\\/");
+
+ boolean success = false;
+ for (String dir : dirs) {
+ sb.append(dir).append('/');
+ String directory = sb.toString();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Trying to build remote directory: " + directory);
+ }
+
+ success = ftpClient.makeDirectory(directory);
+ }
+
+ return success;
+ }
+
private String remoteServer() {
return endpoint.getConfiguration().remoteServerInformation();
}
Modified:
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpProducer.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpProducer.java?rev=680250&r1=680249&r2=680250&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpProducer.java
(original)
+++
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpProducer.java
Sun Jul 27 21:13:47 2008
@@ -156,8 +156,15 @@
if (LOG.isDebugEnabled()) {
LOG.debug("Trying to build remote directory: " + dirName);
}
- sftpClient.mkdir(dirName);
- success = true;
+
+ try {
+ sftpClient.mkdir(dirName);
+ success = true;
+ } catch (SftpException e) {
+ // we are here if the server side doesn't create
intermediate folders
+ // so create the folder one by one
+ success = buildDirectoryChunks(sftpClient, dirName);
+ }
}
} finally {
// change back to original directory
@@ -167,8 +174,32 @@
return success;
}
+ private static boolean buildDirectoryChunks(ChannelSftp sftpClient, String dirName)
+ throws IOException, SftpException {
+ final StringBuilder sb = new StringBuilder(dirName.length());
+ final String[] dirs = dirName.split("\\/");
+
+ boolean success = false;
+ for (String dir : dirs) {
+ sb.append(dir).append('/');
+ String directory = sb.toString();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Trying to build remote directory: " + directory);
+ }
+
+ try {
+ sftpClient.mkdir(directory);
+ success = true;
+ } catch (SftpException e) {
+ // ignore keep trying to create the rest of the path
+ }
+ }
+
+ return success;
+ }
+
private String remoteServer() {
return endpoint.getConfiguration().remoteServerInformation();
}
-}
\ No newline at end of file
+}