Author: davsclaus Date: Mon Dec 17 09:13:49 2012 New Revision: 1422809 URL: http://svn.apache.org/viewvc?rev=1422809&view=rev Log: CAMEL-5883: File/ftp consumer - When using done file name then delete the file when batch is complete.
Modified: camel/branches/camel-2.9.x/ (props changed) camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Merged /camel/trunk:r1422807 Merged /camel/branches/camel-2.10.x:r1422808 Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java?rev=1422809&r1=1422808&r2=1422809&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/file/GenericFileOnCompletion.java Mon Dec 17 09:13:49 2012 @@ -109,8 +109,10 @@ public class GenericFileOnCompletion<T> endpoint.getIdempotentRepository().add(absoluteFileName); } + // must be last in batch to delete the done file name // delete done file if used (and not noop=true) - if (endpoint.getDoneFileName() != null && !endpoint.isNoop()) { + boolean complete = exchange.getProperty(Exchange.BATCH_COMPLETE, false, Boolean.class); + if (endpoint.getDoneFileName() != null && !endpoint.isNoop() && complete) { // done file must be in same path as the original input file String doneFileName = endpoint.createDoneFileName(absoluteFileName); ObjectHelper.notEmpty(doneFileName, "doneFileName", endpoint); Modified: camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java?rev=1422809&r1=1422808&r2=1422809&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDoneFileIssueTest.java Mon Dec 17 09:13:49 2012 @@ -16,8 +16,11 @@ */ package org.apache.camel.component.file; +import java.io.File; + import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; +import org.apache.camel.builder.NotifyBuilder; import org.apache.camel.builder.RouteBuilder; /** @@ -26,6 +29,8 @@ import org.apache.camel.builder.RouteBui public class FileConsumeDoneFileIssueTest extends ContextTestSupport { public void testFileConsumeDoneFileIssue() throws Exception { + NotifyBuilder notify = new NotifyBuilder(context).whenDone(5).create(); + template.sendBodyAndHeader("file:target/done", "A", Exchange.FILE_NAME, "foo-a.txt"); template.sendBodyAndHeader("file:target/done", "B", Exchange.FILE_NAME, "foo-b.txt"); template.sendBodyAndHeader("file:target/done", "C", Exchange.FILE_NAME, "foo-c.txt"); @@ -33,11 +38,19 @@ public class FileConsumeDoneFileIssueTes template.sendBodyAndHeader("file:target/done", "E", Exchange.FILE_NAME, "foo-e.txt"); template.sendBodyAndHeader("file:target/done", "E", Exchange.FILE_NAME, "foo.done"); + assertTrue("Done file should exists", new File("target/done/foo.done").exists()); + getMockEndpoint("mock:result").expectedBodiesReceivedInAnyOrder("A", "B", "C", "D", "E"); context.startRoute("foo"); assertMockEndpointsSatisfied(); + assertTrue(notify.matchesMockWaitTime()); + + Thread.sleep(250); + + // the done file should be deleted + assertFalse("Done file should be deleted", new File("target/done/foo.done").exists()); } @Override