Author: davsclaus
Date: Wed Jul 13 07:06:34 2011
New Revision: 1145887
URL: http://svn.apache.org/viewvc?rev=1145887&view=rev
Log:
CAMEL-4215: camel-ftp will now honor stepwise option when deleting files.
Thanks to dsmw for the patch.
Modified:
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
Modified:
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java?rev=1145887&r1=1145886&r2=1145887&view=diff
==============================================================================
---
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
(original)
+++
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
Wed Jul 13 07:06:34 2011
@@ -48,7 +48,7 @@ import org.slf4j.LoggerFactory;
* FTP remote file operations
*/
public class FtpOperations implements RemoteFileOperations<FTPFile> {
-
+
protected final transient Logger log = LoggerFactory.getLogger(getClass());
protected final FTPClient client;
protected final FTPClientConfig clientConfig;
@@ -207,11 +207,39 @@ public class FtpOperations implements Re
public boolean deleteFile(String name) throws
GenericFileOperationFailedException {
log.debug("Deleting file: {}", name);
+
+ boolean result;
+ String target = name;
+ String currentDir = null;
+
try {
- return this.client.deleteFile(name);
+ if (endpoint.getConfiguration().isStepwise()) {
+ // remember current directory
+ currentDir = getCurrentDirectory();
+ target = FileUtil.stripPath(name);
+
+ try {
+ changeCurrentDirectory(FileUtil.onlyPath(name));
+ } catch (GenericFileOperationFailedException e) {
+ // we could not change directory, try to change back before
+ changeCurrentDirectory(currentDir);
+ throw e;
+ }
+ }
+
+ // delete the file
+ result = client.deleteFile(target);
+
+ // change back to previous directory
+ if (currentDir != null) {
+ changeCurrentDirectory(currentDir);
+ }
+
} catch (IOException e) {
throw new
GenericFileOperationFailedException(client.getReplyCode(),
client.getReplyString(), e.getMessage(), e);
}
+
+ return result;
}
public boolean renameFile(String from, String to) throws
GenericFileOperationFailedException {
@@ -311,7 +339,7 @@ public class FtpOperations implements Re
@SuppressWarnings("unchecked")
private boolean retrieveFileToFileInLocalWorkDirectory(String name,
Exchange exchange) throws GenericFileOperationFailedException {
- File temp;
+ File temp;
File local = new
File(FileUtil.normalizePath(endpoint.getLocalWorkDirectory()));
OutputStream os;
try {
@@ -319,7 +347,7 @@ public class FtpOperations implements Re
GenericFile<FTPFile> target = (GenericFile<FTPFile>)
exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE);
ObjectHelper.notNull(target, "Exchange should have the " +
FileComponent.FILE_EXCHANGE_FILE + " set");
String relativeName = target.getRelativeFilePath();
-
+
temp = new File(local, relativeName + ".inprogress");
local = new File(local, relativeName);
@@ -335,7 +363,7 @@ public class FtpOperations implements Re
if (local.exists()) {
if (!FileUtil.deleteFile(local)) {
throw new GenericFileOperationFailedException("Cannot
delete existing local work file: " + local);
- }
+ }
}
// create new temp local work file
@@ -349,7 +377,7 @@ public class FtpOperations implements Re
// set header with the path to the local work file
exchange.getIn().setHeader(Exchange.FILE_LOCAL_WORK_PATH,
local.getPath());
- } catch (Exception e) {
+ } catch (Exception e) {
throw new GenericFileOperationFailedException("Cannot create new
local work file: " + local);
}
@@ -376,7 +404,7 @@ public class FtpOperations implements Re
}
result = client.retrieveFile(remoteName, os);
-
+
// change back to current directory
if (endpoint.getConfiguration().isStepwise()) {
changeCurrentDirectory(currentDir);