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


Reply via email to