You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2013/07/11 09:25:35 UTC

git commit: CAMEL-5883 fixed the issue of dynamic done file name

Updated Branches:
  refs/heads/master 021e75e28 -> 41510d914


CAMEL-5883 fixed the issue of dynamic done file name


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/41510d91
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/41510d91
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/41510d91

Branch: refs/heads/master
Commit: 41510d91416c7e16608ca905ebc2740c1663c734
Parents: 021e75e
Author: Willem Jiang <ni...@apache.org>
Authored: Thu Jul 11 14:40:01 2013 +0800
Committer: Willem Jiang <ni...@apache.org>
Committed: Thu Jul 11 15:23:56 2013 +0800

----------------------------------------------------------------------
 .../component/file/GenericFileOnCompletion.java | 22 ++++++------
 .../file/FileConsumeDoneFileIssueTest.java      | 35 ++++++++++++++++++++
 2 files changed, 47 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/41510d91/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java
index 181b9a6..9b0701b 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java
@@ -122,20 +122,22 @@ public class GenericFileOnCompletion<T> implements Synchronization {
         // must be last in batch to delete the done file name
         // delete done file if used (and not noop=true)
         boolean complete = exchange.getProperty(Exchange.BATCH_COMPLETE, false, Boolean.class);
-        if (endpoint.getDoneFileName() != null && !endpoint.isNoop() && complete) {
+        if (endpoint.getDoneFileName() != null && !endpoint.isNoop()) {
             // done file must be in same path as the original input file
             String doneFileName = endpoint.createDoneFileName(absoluteFileName);
             ObjectHelper.notEmpty(doneFileName, "doneFileName", endpoint);
-
-            try {
-                // delete done file
-                boolean deleted = operations.deleteFile(doneFileName);
-                log.trace("Done file: {} was deleted: {}", doneFileName, deleted);
-                if (!deleted) {
-                    log.warn("Done file: " + doneFileName + " could not be deleted");
+            // we should delete the dynamic done file 
+            if (endpoint.getDoneFileName().indexOf("{file:name") > 0 || complete) { 
+                try {
+                    // delete done file
+                    boolean deleted = operations.deleteFile(doneFileName);
+                    log.trace("Done file: {} was deleted: {}", doneFileName, deleted);
+                    if (!deleted) {
+                        log.warn("Done file: " + doneFileName + " could not be deleted");
+                    }
+                } catch (Exception e) {
+                    handleException(e);
                 }
-            } catch (Exception e) {
-                handleException(e);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/41510d91/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java
index e26d281..d57781a 100644
--- a/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java
@@ -59,6 +59,36 @@ public class FileConsumeDoneFileIssueTest extends ContextTestSupport {
         // the done file should be deleted
         assertFalse("Done file should be deleted", new File("target/done/foo.done").exists());
     }
+    
+    public void testFileConsumseDynamicDoneFileName() throws Exception {
+        NotifyBuilder notify = new NotifyBuilder(context).whenDone(3).create();
+
+        template.sendBodyAndHeader("file:target/done2", "A", Exchange.FILE_NAME, "a.txt");
+        template.sendBodyAndHeader("file:target/done2", "B", Exchange.FILE_NAME, "b.txt");
+        template.sendBodyAndHeader("file:target/done2", "C", Exchange.FILE_NAME, "c.txt");
+        template.sendBodyAndHeader("file:target/done2", "a", Exchange.FILE_NAME, "a.txt.done");
+        template.sendBodyAndHeader("file:target/done2", "b", Exchange.FILE_NAME, "b.txt.done");
+        template.sendBodyAndHeader("file:target/done2", "c", Exchange.FILE_NAME, "c.txt.done");
+        
+        assertTrue("Done file should exists", new File("target/done2/a.txt.done").exists());
+        assertTrue("Done file should exists", new File("target/done2/b.txt.done").exists());
+        assertTrue("Done file should exists", new File("target/done2/c.txt.done").exists());
+
+        getMockEndpoint("mock:result").expectedBodiesReceivedInAnyOrder("A", "B", "C");
+
+        context.startRoute("bar");
+
+        assertMockEndpointsSatisfied();
+        assertTrue(notify.matchesMockWaitTime());
+
+        Thread.sleep(250);
+
+        // the done file should be deleted
+        assertFalse("Done file should be deleted", new File("target/done2/a.txt.done").exists());
+        assertFalse("Done file should be deleted", new File("target/done2/b.txt.done").exists());
+        assertFalse("Done file should be deleted", new File("target/done2/c.txt.done").exists());
+        
+    }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -68,6 +98,11 @@ public class FileConsumeDoneFileIssueTest extends ContextTestSupport {
                 from("file:target/done?doneFileName=foo.done").routeId("foo").noAutoStartup()
                     .convertBodyTo(String.class)
                     .to("mock:result");
+                
+                from("file:target/done2?doneFileName=${file:name}.done")
+                    .routeId("bar").noAutoStartup()
+                    .convertBodyTo(String.class)
+                    .to("mock:result");
             }
         };
     }