Author: davsclaus
Date: Mon Aug 23 15:15:00 2010
New Revision: 988146

URL: http://svn.apache.org/viewvc?rev=988146&view=rev
Log:
CAMEL-1895: Fixed limitation of pollEnrich not being able to poll from file 
endpoint if route started from file endpoint as well.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java
    
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
    
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
    
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
 Mon Aug 23 15:15:00 2010
@@ -127,7 +127,6 @@ public class FileConsumer extends Generi
 
         answer.setEndpointPath(endpointPath);
         answer.setFile(file);
-        answer.setFileName(file.getName());
         answer.setFileNameOnly(file.getName());
         answer.setFileLength(file.length());
         // must use FileUtil.isAbsolute to have consistent check for whether 
the file is
@@ -158,6 +157,9 @@ public class FileConsumer extends Generi
             }
         }
 
+        // the file name should be the relative path
+        answer.setFileName(answer.getRelativeFilePath());
+
         // use file as body as we have converters if needed as stream
         answer.setBody(file);
         return answer;

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProcessStrategy.java
 Mon Aug 23 15:15:00 2010
@@ -46,7 +46,7 @@ public interface GenericFileProcessStrat
      * @throws Exception can be thrown in case of errors
      */
     boolean begin(GenericFileOperations<T> operations, GenericFileEndpoint<T> 
endpoint,
-            Exchange exchange, GenericFile<T> file) throws Exception;
+                  Exchange exchange, GenericFile<T> file) throws Exception;
 
     /**
      * Releases any file locks and possibly deletes or moves the file after
@@ -59,7 +59,7 @@ public interface GenericFileProcessStrat
      * @throws Exception can be thrown in case of errors
      */
     void commit(GenericFileOperations<T> operations, GenericFileEndpoint<T> 
endpoint,
-            Exchange exchange, GenericFile<T> file) throws Exception;
+                Exchange exchange, GenericFile<T> file) throws Exception;
 
     /**
      * Releases any file locks and possibly deletes or moves the file after
@@ -72,6 +72,6 @@ public interface GenericFileProcessStrat
      * @throws Exception can be thrown in case of errors
      */
     void rollback(GenericFileOperations<T> operations, GenericFileEndpoint<T> 
endpoint,
-            Exchange exchange, GenericFile<T> file) throws Exception;
+                  Exchange exchange, GenericFile<T> file) throws Exception;
 
 }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileDeleteProcessStrategy.java
 Mon Aug 23 15:15:00 2010
@@ -89,7 +89,14 @@ public class GenericFileDeleteProcessStr
 
         // moved the failed file if specifying the moveFailed option
         if (failureRenamer != null) {
-            GenericFile<T> newName = failureRenamer.renameFile(exchange, file);
+            // create a copy and bind the file to the exchange to be used by 
the renamer to evaluate the file name
+            Exchange copy = exchange.copy();
+            file.bindToExchange(copy);
+            // must preserve message id
+            copy.getIn().setMessageId(exchange.getIn().getMessageId());
+            copy.setExchangeId(exchange.getExchangeId());
+
+            GenericFile<T> newName = failureRenamer.renameFile(copy, file);
             renameFile(operations, file, newName);
         }
     }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
 Mon Aug 23 15:15:00 2010
@@ -16,12 +16,9 @@
  */
 package org.apache.camel.component.file.strategy;
 
-import java.io.IOException;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.file.GenericFileEndpoint;
-import org.apache.camel.component.file.GenericFileOperationFailedException;
 import org.apache.camel.component.file.GenericFileOperations;
 
 public class GenericFileRenameProcessStrategy<T> extends 
GenericFileProcessStrategySupport<T> {
@@ -57,7 +54,14 @@ public class GenericFileRenameProcessStr
         super.rollback(operations, endpoint, exchange, file);
 
         if (failureRenamer != null) {
-            GenericFile<T> newName = failureRenamer.renameFile(exchange, file);
+            // create a copy and bind the file to the exchange to be used by 
the renamer to evaluate the file name
+            Exchange copy = exchange.copy();
+            file.bindToExchange(copy);
+            // must preserve message id
+            copy.getIn().setMessageId(exchange.getIn().getMessageId());
+            copy.setExchangeId(exchange.getExchangeId());
+
+            GenericFile<T> newName = failureRenamer.renameFile(copy, file);
             renameFile(operations, file, newName);
         }
     }
@@ -68,7 +72,14 @@ public class GenericFileRenameProcessStr
         super.commit(operations, endpoint, exchange, file);
 
         if (commitRenamer != null) {
-            GenericFile<T> newName = commitRenamer.renameFile(exchange, file);
+            // create a copy and bind the file to the exchange to be used by 
the renamer to evaluate the file name
+            Exchange copy = exchange.copy();
+            file.bindToExchange(copy);
+            // must preserve message id
+            copy.getIn().setMessageId(exchange.getIn().getMessageId());
+            copy.setExchangeId(exchange.getExchangeId());
+
+            GenericFile<T> newName = commitRenamer.renameFile(copy, file);
             renameFile(operations, file, newName);
         }
     }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
 Mon Aug 23 15:15:00 2010
@@ -19,13 +19,13 @@ package org.apache.camel.processor;
 import org.apache.camel.Exchange;
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.Processor;
-import org.apache.camel.impl.EventDrivenPollingConsumer;
 import org.apache.camel.impl.ServiceSupport;
 import org.apache.camel.processor.aggregate.AggregationStrategy;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.ServiceHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+
 import static org.apache.camel.util.ExchangeHelper.copyResultsPreservePattern;
 
 /**
@@ -169,18 +169,7 @@ public class PollEnricher extends Servic
      * @param exchange the current exchange
      */
     protected void preCheckPoll(Exchange exchange) throws Exception {
-        // cannot poll a file endpoint if already consuming from a file 
endpoint (CAMEL-1895)
-        if (consumer instanceof EventDrivenPollingConsumer) {
-            EventDrivenPollingConsumer edpc = (EventDrivenPollingConsumer) 
consumer;
-            boolean fileBasedConsumer = 
edpc.getEndpoint().getEndpointKey().startsWith("file") || 
edpc.getEndpoint().getEndpointKey().startsWith("ftp");
-            boolean fileBasedExchange = exchange.getFromEndpoint() != null
-                    && 
(exchange.getFromEndpoint().getEndpointUri().startsWith("file") || 
exchange.getFromEndpoint().getEndpointUri().startsWith("ftp"));
-            if (fileBasedConsumer && fileBasedExchange) {
-                throw new IllegalArgumentException("Camel currently does not 
support pollEnrich from a file/ftp endpoint"
-                        + " when the route also started from a file/ftp 
endpoint."
-                        + " Started from: " + 
exchange.getFromEndpoint().getEndpointUri() + " pollEnrich: " + 
edpc.getEndpoint().getEndpointUri());
-            }
-        }
+        // noop
     }
 
     private static void prepareResult(Exchange exchange) {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeMoveRelativeNameTest.java
 Mon Aug 23 15:15:00 2010
@@ -35,19 +35,18 @@ public class FileConsumeMoveRelativeName
         super.setUp();
         template.sendBodyAndHeader(fileUrl, "Bye World", Exchange.FILE_NAME, 
"bye.txt");
         template.sendBodyAndHeader(fileUrl, "Hello World", Exchange.FILE_NAME, 
"sub/hello.txt");
-        template.sendBodyAndHeader(fileUrl, "Godday World", 
Exchange.FILE_NAME, "sub/sub2/godday.txt");
+        template.sendBodyAndHeader(fileUrl, "Goodday World", 
Exchange.FILE_NAME, "sub/sub2/goodday.txt");
     }
 
     public void testMultiDir() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceivedInAnyOrder("Bye World", "Hello World", 
"Godday World");
+        mock.expectedBodiesReceivedInAnyOrder("Bye World", "Hello World", 
"Goodday World");
 
         mock.expectedFileExists("target/multidir/.done/bye.txt.old");
         mock.expectedFileExists("target/multidir/.done/sub/hello.txt.old");
-        
mock.expectedFileExists("target/multidir/.done/sub/sub2/godday.txt.old");
+        
mock.expectedFileExists("target/multidir/.done/sub/sub2/goodday.txt.old");
 
         assertMockEndpointsSatisfied();
-
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
 Mon Aug 23 15:15:00 2010
@@ -33,16 +33,14 @@ public class FileConsumePollEnrichFileTe
         super.setUp();
     }
 
-
-    // TODO: CAMEL-1895
-    public void xxxTestPollEnrich() throws Exception {
+    public void testPollEnrich() throws Exception {
         getMockEndpoint("mock:start").expectedBodiesReceived("Start");
 
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedBodiesReceived("Big file");
 
-        mock.expectedFileExists("target/enrich/.done/AAA.fin");
-        mock.expectedFileExists("target/enrichdata/.done/AAA.dat");
+        mock.expectedFileExists("target/enrich/.done/AAA.fin", "Start");
+        mock.expectedFileExists("target/enrichdata/.done/AAA.dat", "Big file");
 
         template.sendBodyAndHeader("file://target/enrichdata", "Big file", 
Exchange.FILE_NAME, "AAA.dat");
         template.sendBodyAndHeader("file://target/enrich", "Start", 
Exchange.FILE_NAME, "AAA.fin");
@@ -50,10 +48,6 @@ public class FileConsumePollEnrichFileTe
         assertMockEndpointsSatisfied();
     }
 
-    public void testNothing() {
-        //
-    }
-
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithAbsoluteMoveTest.java
 Mon Aug 23 15:15:00 2010
@@ -51,7 +51,7 @@ public class FileConsumerAbsolutePathWit
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("file://" + base + "?move=" + base + 
"/done/${file:name}").convertBodyTo(String.class).to("mock:report");
+                from("file://" + base + "?move=" + base + 
"/done/${file:onlyname}").convertBodyTo(String.class).to("mock:report");
             }
         };
     }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathWithRelativeMoveTest.java
 Mon Aug 23 15:15:00 2010
@@ -51,7 +51,7 @@ public class FileConsumerAbsolutePathWit
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("file://" + base + 
"?move=../done/${file:name}").convertBodyTo(String.class).to("mock:report");
+                from("file://" + base + 
"?move=../done/${file:onlyname}").convertBodyTo(String.class).to("mock:report");
             }
         };
     }

Modified: 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
 Mon Aug 23 15:15:00 2010
@@ -124,7 +124,6 @@ public class FtpConsumer extends RemoteF
 
         answer.setEndpointPath(endpointPath);
         answer.setFile(file);
-        answer.setFileName(file.getName());
         answer.setFileNameOnly(file.getName());
         answer.setFileLength(file.getSize());
         if (file.getTimestamp() != null) {
@@ -146,6 +145,9 @@ public class FtpConsumer extends RemoteF
         relativePath = FileUtil.stripLeadingSeparator(relativePath);
         answer.setRelativeFilePath(relativePath);
 
+        // the file name should be the relative path
+        answer.setFileName(answer.getRelativeFilePath());
+
         return answer;
     }
 

Modified: 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
 Mon Aug 23 15:15:00 2010
@@ -107,7 +107,6 @@ public class SftpConsumer extends Remote
 
         answer.setEndpointPath(endpointPath);
         answer.setFile(file);
-        answer.setFileName(file.getFilename());
         answer.setFileNameOnly(file.getFilename());
         answer.setFileLength(file.getAttrs().getSize());
         answer.setLastModified(file.getAttrs().getMTime() * 1000L);
@@ -126,6 +125,9 @@ public class SftpConsumer extends Remote
         relativePath = FileUtil.stripLeadingSeparator(relativePath);
         answer.setRelativeFilePath(relativePath);
 
+        // the file name should be the relative path
+        answer.setFileName(answer.getRelativeFilePath());
+
         return answer;
     }
 

Modified: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java?rev=988146&r1=988145&r2=988146&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerMultipleDirectoriesTest.java
 Mon Aug 23 15:15:00 2010
@@ -58,14 +58,16 @@ public class FtpConsumerMultipleDirector
         assertNotNull(file);
         assertDirectoryEquals("multidir/sub/hello.txt", 
file.getAbsoluteFilePath());
         assertDirectoryEquals("sub/hello.txt", file.getRelativeFilePath());
-        assertEquals("hello.txt", file.getFileName());
+        assertEquals("sub/hello.txt", file.getFileName());
+        assertEquals("hello.txt", file.getFileNameOnly());
 
         exchange = mock.getExchanges().get(2);
         file = (RemoteFile) 
exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE);
         assertNotNull(file);
         assertDirectoryEquals("multidir/sub/sub2/godday.txt", 
file.getAbsoluteFilePath());
         assertDirectoryEquals("sub/sub2/godday.txt", 
file.getRelativeFilePath());
-        assertEquals("godday.txt", file.getFileName());
+        assertEquals("sub/sub2/godday.txt", file.getFileName());
+        assertEquals("godday.txt", file.getFileNameOnly());
     }
     
     private void prepareFtpServer() throws Exception {


Reply via email to