Author: davsclaus
Date: Sat Jul 26 09:35:54 2008
New Revision: 680011
URL: http://svn.apache.org/viewvc?rev=680011&view=rev
Log:
CAMEL-570: Added consumer.deleteFile option to camel-ftp.
Added:
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildPartOfDirectoryTest.java
- copied, changed from r679979,
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpExclusiveReadTest.java
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java?rev=680011&r1=680010&r2=680011&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
Sat Jul 26 09:35:54 2008
@@ -170,6 +170,7 @@
// the trick is to try to rename the file, if we can rename then we
have exclusive read
// NOTE: using java.nio (channel lokc) doesn't help us as we can have
write access but the
// file is still in progress of being written (slow writer)
+ // TODO: Seems to not work on Unix boxes (see the unit test
FileExclusiveReadTest)
String originalName = file.getAbsolutePath();
File newName = new File(originalName + ".exclusiveRead");
boolean exclusive = false;
@@ -180,7 +181,7 @@
// rename it back
newName.renameTo(file);
} else {
- LOG.trace("Exclusive read not granted. Sleeping for 1000
millis");
+ LOG.trace("Exclusive read not granted. Sleeping for 1000
millis.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Modified:
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java?rev=680011&r1=680010&r2=680011&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
(original)
+++
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
Sat Jul 26 09:35:54 2008
@@ -40,6 +40,7 @@
private String regexPattern;
private boolean setNames = true;
private boolean exclusiveRead = true;
+ private boolean deleteFile;
public FtpConsumer(FtpEndpoint endpoint, Processor processor, FTPClient
client) {
super(endpoint, processor);
@@ -164,6 +165,18 @@
exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME,
relativePath);
}
+ if (deleteFile) {
+ // delete file after consuming
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Deleteing file: " + ftpFile.getName() + " from:
" + remoteServer);
+ }
+ boolean deleted = client.deleteFile(ftpFile.getName());
+ if (!deleted) {
+ // ignore just log a warning
+ LOG.warn("Could not delete file: " + ftpFile.getName() + "
from: " + remoteServer);
+ }
+ }
+
getProcessor().process(exchange);
}
}
@@ -174,7 +187,7 @@
// the trick is to try to rename the file, if we can rename then we
have exclusive read
// since its a remote file we can not use java.nio to get a RW access
String originalName = ftpFile.getName();
- String newName = originalName + ".exclusiveRead";
+ String newName = originalName + ".camel";
boolean exclusive = false;
while (! exclusive) {
exclusive = client.rename(originalName, newName);
@@ -242,4 +255,12 @@
public void setExclusiveRead(boolean exclusiveRead) {
this.exclusiveRead = exclusiveRead;
}
+
+ public boolean isDeleteFile() {
+ return deleteFile;
+ }
+
+ public void setDeleteFile(boolean deleteFile) {
+ this.deleteFile = deleteFile;
+ }
}
Modified:
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java?rev=680011&r1=680010&r2=680011&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
(original)
+++
activemq/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
Sat Jul 26 09:35:54 2008
@@ -41,6 +41,7 @@
private Session session;
private boolean setNames;
private boolean exclusiveRead = true;
+ private boolean deleteFile;
public SftpConsumer(SftpEndpoint endpoint, Processor processor, Session
session) {
super(endpoint, processor);
@@ -170,6 +171,19 @@
exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME,
relativePath);
}
+ if (deleteFile) {
+ // delete file after consuming
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Deleteing file: " + sftpFile.getFilename() + "
from: " + remoteServer);
+ }
+ try {
+ channel.rm(sftpFile.getFilename());
+ } catch (SftpException e) {
+ // ignore just log a warning
+ LOG.warn("Could not delete file: " +
sftpFile.getFilename() + " from: " + remoteServer);
+ }
+ }
+
getProcessor().process(exchange);
}
}
@@ -180,7 +194,7 @@
// the trick is to try to rename the file, if we can rename then we
have exclusive read
// since its a remote file we can not use java.nio to get a RW access
String originalName = sftpFile.getFilename();
- String newName = originalName + "..exclusiveRead";
+ String newName = originalName + ".camel";
boolean exclusive = false;
while (! exclusive) {
try {
@@ -254,4 +268,12 @@
public void setExclusiveRead(boolean exclusiveRead) {
this.exclusiveRead = exclusiveRead;
}
+
+ public boolean isDeleteFile() {
+ return deleteFile;
+ }
+
+ public void setDeleteFile(boolean deleteFile) {
+ this.deleteFile = deleteFile;
+ }
}
Added:
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java?rev=680011&view=auto
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java
(added)
+++
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java
Sat Jul 26 09:35:54 2008
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.file.remote;
+
+import java.io.File;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Producer;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.file.FileComponent;
+import org.apache.camel.component.mock.MockEndpoint;
+
+/**
+ * Unit test to test consumer.deleteFile option.
+ */
+public class FromFtpDeleteFileTest extends FtpServerTestSupport {
+
+ private String port = "20022";
+ private String ftpUrl = "ftp://[EMAIL PROTECTED]:" + port +
"/deletefile?password=admin&binary=false&consumer.deleteFile=true";
+
+ public String getPort() {
+ return port;
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ prepareFtpServer();
+ }
+
+ private void prepareFtpServer() throws Exception {
+ // prepares the FTP Server by creating a file on the server that we
want to unit
+ // test that we can pool and store as a local file
+ Endpoint endpoint = context.getEndpoint(ftpUrl);
+ Exchange exchange = endpoint.createExchange();
+ exchange.getIn().setBody("Hello World this file will be deleted");
+ exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME,
"hello.txt");
+ Producer producer = endpoint.createProducer();
+ producer.start();
+ producer.process(exchange);
+ producer.stop();
+
+ // assert file is created
+ File file = new File("./res/home/deletefile/hello.txt");
+ file = file.getAbsoluteFile();
+ assertTrue("The file should exists", file.exists());
+ }
+
+ public void testPollFileAndShouldBeDeleted() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.expectedBodiesReceived("Hello World this file will be deleted");
+
+ mock.assertIsSatisfied();
+
+ // assert the file is deleted
+ File file = new File("./res/home/deletefile/hello.txt");
+ file = file.getAbsoluteFile();
+ assertFalse("The file should have been deleted", file.exists());
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ from(ftpUrl).to("mock:result");
+ }
+ };
+ }
+
+}
Modified:
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpExclusiveReadTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpExclusiveReadTest.java?rev=680011&r1=680010&r2=680011&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpExclusiveReadTest.java
(original)
+++
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpExclusiveReadTest.java
Sat Jul 26 09:35:54 2008
@@ -31,7 +31,7 @@
private static final Log LOG =
LogFactory.getLog(FromFtpExclusiveReadTest.class);
- private String port = "20019";
+ private String port = "21900";
private String ftpUrl = "ftp://[EMAIL PROTECTED]:" + port +
"/slowfile?password=admin&binary=false&consumer.exclusiveRead=true&consumer.delay=500";
public String getPort() {
Modified:
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java?rev=680011&r1=680010&r2=680011&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
(original)
+++
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
Sat Jul 26 09:35:54 2008
@@ -45,18 +45,6 @@
assertEquals("Hello World", IOConverter.toString(file));
}
- public void testProduceAndBuildPartOfRemotFolderTest() throws Exception {
- deleteDirectory("./res/home/");
- createDirectory("./res/home/upload/user/superman");
-
- template.sendBodyAndHeader(ftpUrl, "Bye World",
FileComponent.HEADER_FILE_NAME, "claus.txt");
-
- File file = new File("./res/home/upload/user/claus/claus.txt");
- file = file.getAbsoluteFile();
- assertTrue("The uploaded file should exists", file.exists());
- assertEquals("Bye World", IOConverter.toString(file));
- }
-
private static void createDirectory(String s) {
File file = new File(s);
file.mkdirs();
Copied:
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildPartOfDirectoryTest.java
(from r679979,
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java)
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildPartOfDirectoryTest.java?p2=activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildPartOfDirectoryTest.java&p1=activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java&r1=679979&r2=680011&rev=680011&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
(original)
+++
activemq/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildPartOfDirectoryTest.java
Sat Jul 26 09:35:54 2008
@@ -23,28 +23,17 @@
import org.apache.camel.component.file.FileComponent;
/**
- * Unit test to verify that Camel can build remote directory on FTP server if
missing (full or part of).
+ * Unit test to verify that Camel can build remote directory on FTP server if
missing (full or part of).
*/
-public class FtpProducerBuildDirectoryTest extends FtpServerTestSupport {
+public class FtpProducerBuildPartOfDirectoryTest extends FtpServerTestSupport {
- private String port = "20018";
+ private String port = "20021";
private String ftpUrl = "ftp://[EMAIL PROTECTED]:" + port +
"/upload/user/claus?binary=false&password=admin";
public String getPort() {
return port;
}
- public void testProduceAndBuildFullRemotFolderTest() throws Exception {
- deleteDirectory("./res/home/");
-
- template.sendBodyAndHeader(ftpUrl, "Hello World",
FileComponent.HEADER_FILE_NAME, "claus.txt");
-
- File file = new File("./res/home/upload/user/claus/claus.txt");
- file = file.getAbsoluteFile();
- assertTrue("The uploaded file should exists", file.exists());
- assertEquals("Hello World", IOConverter.toString(file));
- }
-
public void testProduceAndBuildPartOfRemotFolderTest() throws Exception {
deleteDirectory("./res/home/");
createDirectory("./res/home/upload/user/superman");
@@ -62,4 +51,4 @@
file.mkdirs();
}
-}
+}
\ No newline at end of file