You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/08/18 19:45:15 UTC

svn commit: r1159326 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/component/file/ components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/ components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/

Author: davsclaus
Date: Thu Aug 18 17:45:15 2011
New Revision: 1159326

URL: http://svn.apache.org/viewvc?rev=1159326&view=rev
Log:
CAMEL-4352: Fixed issue with ftp consumer using done file and stepwise=true.

Added:
    camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedStepwiseTest.java
    camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedTest.java
      - copied, changed from r1159180, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java
    camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameStepwiseTest.java
      - copied, changed from r1159180, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
    camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
    camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java?rev=1159326&r1=1159325&r2=1159326&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java Thu Aug 18 17:45:15 2011
@@ -418,7 +418,7 @@ public abstract class GenericFileConsume
      *
      * @param file        the file
      * @param isDirectory whether the file is a directory or a file
-     * @return <tt>true</tt> if the remote file is matched, <tt>false</tt> if not
+     * @return <tt>true</tt> if the file is matched, <tt>false</tt> if not
      */
     protected boolean isMatched(GenericFile<T> file, boolean isDirectory) {
         String name = file.getFileNameOnly();
@@ -478,9 +478,7 @@ public abstract class GenericFileConsume
                 return false;
             }
 
-            // the file is only valid if the done file exist
-            if (!operations.existsFile(doneFileName)) {
-                log.trace("Done file: {} does not exist", doneFileName);
+            if (!isMatched(file, doneFileName)) {
                 return false;
             }
         }
@@ -489,6 +487,24 @@ public abstract class GenericFileConsume
     }
 
     /**
+     * Strategy to perform file matching based on endpoint configuration in terms of done file name.
+     *
+     * @param file         the file
+     * @param doneFileName the done file name
+     * @return <tt>true</tt> if the file is matched, <tt>false</tt> if not
+     */
+    protected boolean isMatched(GenericFile<T> file, String doneFileName) {
+        // the file is only valid if the done file exist
+        if (!operations.existsFile(doneFileName)) {
+            log.trace("Done file: {} does not exist", doneFileName);
+            return false;
+        }
+
+        // assume matched
+        return true;
+    }
+
+    /**
      * Is the given file already in progress.
      *
      * @param file the file

Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java?rev=1159326&r1=1159325&r2=1159326&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java Thu Aug 18 17:45:15 2011
@@ -19,8 +19,10 @@ package org.apache.camel.component.file.
 import java.io.IOException;
 
 import org.apache.camel.Processor;
+import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.file.GenericFileConsumer;
 import org.apache.camel.component.file.GenericFileOperationFailedException;
+import org.apache.camel.util.FileUtil;
 
 /**
  * Base class for remote file consumers.
@@ -143,4 +145,15 @@ public abstract class RemoteFileConsumer
     protected String remoteServer() {
         return ((RemoteFileEndpoint) endpoint).remoteServerInformation();
     }
+
+    @Override
+    protected boolean isMatched(GenericFile<T> file, String doneFileName) {
+        // ftp specific as we need to cater for stepwise
+        if (getEndpoint().getConfiguration().isStepwise()) {
+            // stepwise enabled, so done file should always be without path
+            doneFileName = FileUtil.stripPath(doneFileName);
+        }
+
+        return super.isMatched(file, doneFileName);
+    }
 }

Added: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedStepwiseTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedStepwiseTest.java?rev=1159326&view=auto
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedStepwiseTest.java (added)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedStepwiseTest.java Thu Aug 18 17:45:15 2011
@@ -0,0 +1,28 @@
+/**
+ * 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;
+
+/**
+ * @version 
+ */
+public class FtpConsumerDoneFileNameFixedStepwiseTest extends FtpConsumerDoneFileNameFixedTest {
+
+    protected String getFtpUrl() {
+        return "ftp://admin@localhost:" + getPort() + "/done?password=admin&initialDelay=0&delay=100&stepwise=true";
+    }
+
+}

Copied: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedTest.java (from r1159180, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedTest.java?p2=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedTest.java&p1=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java&r1=1159180&r2=1159326&rev=1159326&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameFixedTest.java Thu Aug 18 17:45:15 2011
@@ -25,7 +25,7 @@ import org.junit.Test;
 /**
  * @version 
  */
-public class FtpConsumerDoneFileNameTest extends FtpServerTestSupport {
+public class FtpConsumerDoneFileNameFixedTest extends FtpServerTestSupport {
 
     protected String getFtpUrl() {
         return "ftp://admin@localhost:" + getPort() + "/done?password=admin&initialDelay=0&delay=100&stepwise=false";
@@ -47,7 +47,7 @@ public class FtpConsumerDoneFileNameTest
         getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
 
         // write the done file
-        template.sendBodyAndHeader(getFtpUrl(), "", Exchange.FILE_NAME, "done");
+        template.sendBodyAndHeader(getFtpUrl(), "", Exchange.FILE_NAME, "fin.dat");
 
         assertMockEndpointsSatisfied();
 
@@ -55,7 +55,7 @@ public class FtpConsumerDoneFileNameTest
         Thread.sleep(1000);
 
         // done file should be deleted now
-        File file = new File(FTP_ROOT_DIR + "done/done").getAbsoluteFile();
+        File file = new File(FTP_ROOT_DIR + "done/fin.dat").getAbsoluteFile();
         assertFalse("Done file should be deleted: " + file, file.exists());
     }
 
@@ -64,7 +64,7 @@ public class FtpConsumerDoneFileNameTest
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from(getFtpUrl() + "&doneFileName=done")
+                from(getFtpUrl() + "&doneFileName=fin.dat")
                     .convertBodyTo(String.class)
                     .to("mock:result");
             }

Copied: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameStepwiseTest.java (from r1159180, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameStepwiseTest.java?p2=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameStepwiseTest.java&p1=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java&r1=1159180&r2=1159326&rev=1159326&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameStepwiseTest.java Thu Aug 18 17:45:15 2011
@@ -16,59 +16,13 @@
  */
 package org.apache.camel.component.file.remote;
 
-import java.io.File;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.RouteBuilder;
-import org.junit.Test;
-
 /**
  * @version 
  */
-public class FtpConsumerDoneFileNameTest extends FtpServerTestSupport {
+public class FtpConsumerDoneFileNameStepwiseTest extends FtpConsumerDoneFileNameTest {
 
     protected String getFtpUrl() {
-        return "ftp://admin@localhost:" + getPort() + "/done?password=admin&initialDelay=0&delay=100&stepwise=false";
-    }
-
-    @Test
-    public void testDoneFileName() throws Exception {
-        getMockEndpoint("mock:result").expectedMessageCount(0);
-
-        template.sendBodyAndHeader(getFtpUrl(), "Hello World", Exchange.FILE_NAME, "hello.txt");
-
-        // wait a bit and it should not pickup the written file as there are no done file
-        Thread.sleep(1000);
-
-        assertMockEndpointsSatisfied();
-
-        resetMocks();
-
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-
-        // write the done file
-        template.sendBodyAndHeader(getFtpUrl(), "", Exchange.FILE_NAME, "done");
-
-        assertMockEndpointsSatisfied();
-
-        // give time for done file to be deleted
-        Thread.sleep(1000);
-
-        // done file should be deleted now
-        File file = new File(FTP_ROOT_DIR + "done/done").getAbsoluteFile();
-        assertFalse("Done file should be deleted: " + file, file.exists());
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                from(getFtpUrl() + "&doneFileName=done")
-                    .convertBodyTo(String.class)
-                    .to("mock:result");
-            }
-        };
+        return "ftp://admin@localhost:" + getPort() + "/done?password=admin&initialDelay=0&delay=100&stepwise=true";
     }
 
 }

Modified: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java?rev=1159326&r1=1159325&r2=1159326&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDoneFileNameTest.java Thu Aug 18 17:45:15 2011
@@ -47,7 +47,7 @@ public class FtpConsumerDoneFileNameTest
         getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
 
         // write the done file
-        template.sendBodyAndHeader(getFtpUrl(), "", Exchange.FILE_NAME, "done");
+        template.sendBodyAndHeader(getFtpUrl(), "", Exchange.FILE_NAME, "hello.dat");
 
         assertMockEndpointsSatisfied();
 
@@ -55,7 +55,7 @@ public class FtpConsumerDoneFileNameTest
         Thread.sleep(1000);
 
         // done file should be deleted now
-        File file = new File(FTP_ROOT_DIR + "done/done").getAbsoluteFile();
+        File file = new File(FTP_ROOT_DIR + "done/hello.dat").getAbsoluteFile();
         assertFalse("Done file should be deleted: " + file, file.exists());
     }
 
@@ -64,7 +64,7 @@ public class FtpConsumerDoneFileNameTest
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from(getFtpUrl() + "&doneFileName=done")
+                from(getFtpUrl() + "&doneFileName=${file:name.noext}.dat")
                     .convertBodyTo(String.class)
                     .to("mock:result");
             }