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 2009/02/17 13:35:24 UTC

svn commit: r745012 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/component/file/ camel-core/src/main/java/org/apache/camel/component/file/strategy/ camel-core/src/main/java/org/apache/c...

Author: davsclaus
Date: Tue Feb 17 12:35:24 2009
New Revision: 745012

URL: http://svn.apache.org/viewvc?rev=745012&view=rev
Log:
CAMEL-1347: file producer will rename local work file if any instead of doing a file to file copy (optimization). Added not to some operators in simple language. Added not predicate wiki example. Fixed checkstyle. Yes this is many because SVN was down.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java
      - copied, changed from r744955, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java
    camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java
      - copied, changed from r744966, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java
    camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
    camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Tue Feb 17 12:35:24 2009
@@ -472,7 +472,7 @@
 
             @Override
             public String toString() {
-                return "" + expression + ".convertTo(" + type + ")";
+                return "" + expression + ".convertToEvaluatedType(" + type + ")";
             }
         };
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java Tue Feb 17 12:35:24 2009
@@ -70,7 +70,7 @@
 
             @Override
             public String toString() {
-                return "not " + predicate;
+                return "not (" + predicate + ")";
             }
         };
     }
@@ -293,7 +293,7 @@
 
             @Override
             public String toString() {
-                return expression + ".matches(" + pattern + ")";
+                return expression + ".matches('" + pattern + "')";
             }
 
             @Override

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java Tue Feb 17 12:35:24 2009
@@ -50,6 +50,11 @@
      */
     public static final String DEFAULT_LOCK_FILE_POSTFIX = ".camelLock";
 
+    /**
+     * Header key holding file path to a local work directory containg a consumed file (if any)
+     */
+    public static final String HEADER_FILE_LOCAL_WORK_PATH= "CamelFileLocalWorkPath";
+
     protected GenericFileEndpoint<File> buildFileEndpoint(String uri, String remaining, Map parameters) throws Exception {
         File file = new File(remaining);
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java Tue Feb 17 12:35:24 2009
@@ -116,28 +116,64 @@
 
     public boolean storeFile(String fileName, GenericFileExchange<File> exchange) throws GenericFileOperationFailedException {
         ObjectHelper.notNull(endpoint, "endpoint");
-        
+
+        // we can write the file by 3 different techniques
+        // 1. write file to file
+        // 2. rename a file from a local work path
+        // 3. write stream to file
+
         File file = new File(fileName);
         try {
+
+            // is the body file based
             File source = null;
             try {
-                source = exchange.getIn().getBody(File.class);
+                if (exchange.getIn().getBody() instanceof File || exchange.getIn().getBody() instanceof GenericFile) {
+                    source = exchange.getIn().getBody(File.class);
+                }
             } catch (NoTypeConversionAvailableException e) {
                 // ignore
             }
-            if (source != null && source.exists()) {
-                writeFileByFile(source, file);
-            } else {
-                InputStream in = ExchangeHelper.getMandatoryInBody(exchange, InputStream.class);
-                writeFileByStream(in, file);
+
+            if (source != null) {
+                // okay we know the body is a file type
+
+                // so try to see if we can optimize by renaming the local work path file instead of doing
+                // a full file to file copy, as the local work copy is to be deleted afterwords anyway
+                // local work path
+                File local = exchange.getIn().getHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, File.class);
+                if (local != null && local.exists()) {
+                    boolean renamed = writeFileByLocalWorkPath(local, file);
+                    if (renamed) {
+                        // clear header as we have renamed the file
+                        exchange.getIn().setHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, null);
+                        // return as the operation is complete, we just renamed the local work file
+                        // to the target.
+                        return true;
+                    }
+                } else if (source.exists()) {
+                    // no there is no local work file so use file to file copy if the source exists
+                    writeFileByFile(source, file);
+                    return true;
+                }
             }
-        } catch (IOException e) {            
+
+            // fallback and use stream based
+            InputStream in = ExchangeHelper.getMandatoryInBody(exchange, InputStream.class);
+            writeFileByStream(in, file);
+            return true;
+        } catch (IOException e) {
             throw new GenericFileOperationFailedException("Cannot store file: " + file, e);
         } catch (InvalidPayloadException e) {
             throw new GenericFileOperationFailedException("Cannot store file: " + file, e);
         }
+    }
 
-        return true;
+    private boolean writeFileByLocalWorkPath(File source, File file) {
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Using local work file being renamed from: " + source + " to: " + file);
+        }
+        return source.renameTo(file);
     }
 
     private void writeFileByFile(File source, File target) throws IOException {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java Tue Feb 17 12:35:24 2009
@@ -18,6 +18,7 @@
 
 import java.io.File;
 
+import org.apache.camel.component.file.FileComponent;
 import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.file.GenericFileEndpoint;
 import org.apache.camel.component.file.GenericFileExchange;
@@ -29,7 +30,7 @@
 
 public abstract class GenericFileProcessStrategySupport<T> implements GenericFileProcessStrategy<T> {
     protected final transient Log log = LogFactory.getLog(getClass());
-    private GenericFileExclusiveReadLockStrategy<T> exclusiveReadLockStrategy;
+    protected GenericFileExclusiveReadLockStrategy<T> exclusiveReadLockStrategy;
 
     public boolean begin(GenericFileOperations<T> operations, GenericFileEndpoint<T> endpoint, GenericFileExchange<T> exchange, GenericFile<T> file) throws Exception {
         // is we use excluse read then acquire the exclusive read (waiting until we got it)
@@ -70,9 +71,8 @@
 
     private void deleteLocalWorkFile(GenericFileExchange<T> exchange) {
         // delete local work file, if it was used (eg by ftp component)
-        String path = exchange.getIn().getHeader("CamelFileLocalWorkPath", String.class);
-        if (path != null) {
-            File local = new File(path);
+        File local = exchange.getIn().getHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, File.class);
+        if (local != null && local.exists()) {
             if (log.isTraceEnabled()) {
                 log.trace("Deleting lock work file: " + local);
             }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java Tue Feb 17 12:35:24 2009
@@ -26,13 +26,16 @@
  *   <li>LTE : <=</li>
  *   <li>NOT : !=</li>
  *   <li>contains : tested for if it contains the value</li>
+ *   <li>not contains : tested for if it does not contain the value</li>
  *   <li>regex : matching a regular expression</li>
+ *   <li>not regex : not matching a regular expression</li>
  *   <li>in : tested for in a list of values separated by comma</li>
+ *   <li>not in : tested for not in a list of values separated by comma</li>
  * </ul>
  */
 public enum SimpleLangaugeOperator {
 
-    EQ, GT, GTE, LT, LTE, NOT, CONTAINS, REGEX, IN;
+    EQ, GT, GTE, LT, LTE, NOT, CONTAINS, NOT_CONTAINS, REGEX, NOT_REGEX, IN, NOT_IN;
 
     public static SimpleLangaugeOperator asOperator(String text) {
         if ("==".equals(text)) {
@@ -49,10 +52,16 @@
             return NOT;
         } else if ("contains".equals(text)) {
             return CONTAINS;
+        } else if ("not contains".equals(text)) {
+            return NOT_CONTAINS;
         } else if ("regex".equals(text)) {
             return REGEX;
+        } else if ("not regex".equals(text)) {
+            return NOT_REGEX;
         } else if ("in".equals(text)) {
             return IN;
+        } else if ("not in".equals(text)) {
+            return NOT_IN;
         }
         throw new IllegalArgumentException("Operator not supported: " + text);
     }
@@ -72,10 +81,16 @@
             return "!=";
         } else if (operator == CONTAINS) {
             return "contains";
+        } else if (operator == NOT_CONTAINS) {
+            return "not contains";
         } else if (operator == REGEX) {
             return "regex";
+        } else if (operator == NOT_REGEX) {
+            return "not regex";
         } else if (operator == IN) {
             return "in";
+        } else if (operator == NOT_IN) {
+            return "not in";
         }
         return "";
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java Tue Feb 17 12:35:24 2009
@@ -17,8 +17,8 @@
 package org.apache.camel.language.simple;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Iterator;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -40,7 +40,8 @@
  */
 public abstract class SimpleLanguageSupport implements Language {
 
-    protected static final Pattern PATTERN = Pattern.compile("^\\$\\{(.+)\\}\\s+(==|>|>=|<|<=|!=|contains|regex|in)\\s+(.+)$");
+    protected static final Pattern PATTERN = Pattern.compile(
+            "^\\$\\{(.+)\\}\\s+(==|>|>=|<|<=|!=|contains|not contains|regex|not regex|in|not in)\\s+(.+)$");
     protected final Log log = LogFactory.getLog(getClass());
 
     public Predicate createPredicate(String expression) {
@@ -112,12 +113,18 @@
                     predicate = PredicateBuilder.isLessThanOrEqualTo(left, rightConverted);
                 } else if (operator == NOT) {
                     predicate = PredicateBuilder.isNotEqualTo(left, rightConverted);
-                } else if (operator == CONTAINS) {
+                } else if (operator == CONTAINS || operator == NOT_CONTAINS) {
                     predicate = PredicateBuilder.contains(left, rightConverted);
-                } else if (operator == REGEX) {
+                    if (operator == NOT_CONTAINS) {
+                        predicate = PredicateBuilder.not(predicate);
+                    }
+                } else if (operator == REGEX || operator == NOT_REGEX) {
                     // reg ex should use String pattern, so we evalute the right hand side as a String
                     predicate = PredicateBuilder.regex(left, right.evaluate(exchange, String.class));
-                } else if (operator == IN) {
+                    if (operator == NOT_REGEX) {
+                        predicate = PredicateBuilder.not(predicate);
+                    }
+                } else if (operator == IN || operator == NOT_IN) {
                     // okay the in operator is a bit more complex as we need to build a list of values
                     // from the right handside expression.
                     // each element on the right handside must be separated by comma (default for create iterator)
@@ -129,6 +136,9 @@
                     // then reuse value builder to create the in predicate with the list of values
                     ValueBuilder vb = new ValueBuilder(left);
                     predicate = vb.in(values.toArray());
+                    if (operator == NOT_IN) {
+                        predicate = PredicateBuilder.not(predicate);
+                    }
                 }
 
                 if (predicate == null) {

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java Tue Feb 17 12:35:24 2009
@@ -159,6 +159,15 @@
         assertExpression("${in.header.foo} contains def", false);
     }
 
+    public void testNotConstains() throws Exception {
+        assertExpression("${in.header.foo} not contains 'a'", false);
+        assertExpression("${in.header.foo} not contains a", false);
+        assertExpression("${in.header.foo} not contains 'ab'", false);
+        assertExpression("${in.header.foo} not contains 'abc'", false);
+        assertExpression("${in.header.foo} not contains 'def'", true);
+        assertExpression("${in.header.foo} not contains def", true);
+    }
+
     public void testRegex() throws Exception {
         assertExpression("${in.header.foo} regex '^a..$'", true);
         assertExpression("${in.header.foo} regex '^ab.$'", true);
@@ -171,6 +180,18 @@
         assertExpression("${in.header.bar} regex ^\\d{2}", false);
     }
 
+    public void testNotRegex() throws Exception {
+        assertExpression("${in.header.foo} not regex '^a..$'", false);
+        assertExpression("${in.header.foo} not regex '^ab.$'", false);
+        assertExpression("${in.header.foo} not regex ^ab.$", false);
+        assertExpression("${in.header.foo} not regex ^d.*$", true);
+
+        assertExpression("${in.header.bar} not regex '^\\d{3}'", false);
+        assertExpression("${in.header.bar} not regex '^\\d{2}'", true);
+        assertExpression("${in.header.bar} not regex ^\\d{3}", false);
+        assertExpression("${in.header.bar} not regex ^\\d{2}", true);
+    }
+
     public void testIn() throws Exception {
         // string to string
         assertExpression("${in.header.foo} in 'foo,abc,def'", true);
@@ -185,6 +206,19 @@
         assertExpression("${in.header.bar} in '100,200'", false);
     }
 
+    public void testNotIn() throws Exception {
+        // string to string
+        assertExpression("${in.header.foo} not in 'foo,abc,def'", false);
+        assertExpression("${in.header.foo} not in ${bean:generator.generateFilename}", false);
+        assertExpression("${in.header.foo} not in foo,abc,def", false);
+        assertExpression("${in.header.foo} not in 'foo,def'", true);
+
+        // integer to string
+        assertExpression("${in.header.bar} not in '100,123,200'", false);
+        assertExpression("${in.header.bar} not in 100,123,200", false);
+        assertExpression("${in.header.bar} not in ${bean:generator.generateId}", false);
+        assertExpression("${in.header.bar} not in '100,200'", true);
+    }
 
     protected String getLanguageName() {
         return "simple";

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java (from r744955, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java&r1=744955&r2=745012&rev=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java Tue Feb 17 12:35:24 2009
@@ -16,72 +16,30 @@
  */
 package org.apache.camel.processor;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Predicate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import static org.apache.camel.builder.PredicateBuilder.and;
-import static org.apache.camel.builder.PredicateBuilder.or;
+import static org.apache.camel.builder.PredicateBuilder.not;
 
 /**
  * @version $Revision$
  */
-public class ChoiceCompoundPredicateTest extends ContextTestSupport {
-
-    public void testGuest() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:guest");
-        mock.expectedMessageCount(1);
-
-        template.sendBody("direct:start", "Hello World");
-
-        assertMockEndpointsSatisfied();
-    }
-
-    public void testUser() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:user");
-        mock.expectedMessageCount(1);
-
-        template.sendBodyAndHeader("direct:start", "Hello World", "username", "goofy");
-
-        assertMockEndpointsSatisfied();
-    }
+public class ChoiceWhenNotPredicateTest extends ContextTestSupport {
 
-    public void testAdmin() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:admin");
+    public void testPeople() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:people");
         mock.expectedMessageCount(1);
 
-        Map<String, Object> headers = new HashMap<String, Object>();
-        headers.put("username", "donald");
-        headers.put("admin", "true");
-        template.sendBodyAndHeaders("direct:start", "Hello World", headers);
+        template.sendBodyAndHeader("direct:start", "Hello World", "username", "donald");
 
         assertMockEndpointsSatisfied();
     }
 
-    public void testGod() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:god");
+    public void testAnimals() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:animals");
         mock.expectedMessageCount(1);
 
-        Map<String, Object> headers = new HashMap<String, Object>();
-        headers.put("username", "pluto");
-        headers.put("admin", "true");
-        headers.put("type", "god");
-        template.sendBodyAndHeaders("direct:start", "Hello World", headers);
-
-        assertMockEndpointsSatisfied();
-    }
-
-    public void testRiderGod() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:god");
-        mock.expectedMessageCount(1);
-
-        Map<String, Object> headers = new HashMap<String, Object>();
-        headers.put("username", "Camel");
-        headers.put("admin", "true");
-        template.sendBodyAndHeaders("direct:start", "Hello Camel Rider", headers);
+        template.sendBodyAndHeader("direct:start", "Hello World", "username", "pluto");
 
         assertMockEndpointsSatisfied();
     }
@@ -90,30 +48,11 @@
         return new RouteBuilder() {
             public void configure() {
                 // START SNIPPET: e1
-                // We define 3 predicates based on some user roles
-                // we have static imported and/or from org.apache.camel.builder.PredicateBuilder
-
-                // First we have a regular user that is just identified having a username header
-                Predicate user = header("username").isNotNull();
-
-                // The admin user must be a user AND have a admin header as true
-                Predicate admin = and(user, header("admin").isEqualTo("true"));
-
-                // And God must be an admin and (either have type god or a special message containing Camel Rider)
-                Predicate god = and(admin, or(body().contains("Camel Rider"), header("type").isEqualTo("god")));
-
-                // As you can see with the predicates above we can stack them to build compound predicates
-
-                // In our route below we can create a nice content based rotuer based on the predicates we
-                // have defined. Then the route is easy to read and understand.
-                // We encourge you to define complex predicates outside the fluent router bulder as
-                // it will just get a bit complex for humans to read
-                from("direct:start").choice()
-                  .when(god).to("mock:god")
-                  .when(admin).to("mock:admin")
-                  .when(user).to("mock:user")
-                  .otherwise().to("mock:guest")
-                .end();
+                from("direct:start")
+                    .choice()
+                        .when(not(header("username").regex("goofy|pluto"))).to("mock:people")
+                        .otherwise().to("mock:animals")
+                    .end();
                 // END SNIPPET: e1
             }
         };

Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java Tue Feb 17 12:35:24 2009
@@ -26,6 +26,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.camel.component.file.FileComponent;
 import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.file.GenericFileEndpoint;
 import org.apache.camel.component.file.GenericFileExchange;
@@ -230,7 +231,7 @@
             os = new FileOutputStream(temp);
 
             // set header with the path to the local work file            
-            exchange.getIn().setHeader("CamelFileLocalWorkPath", local.getPath());
+            exchange.getIn().setHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, local.getPath());
 
         } catch (Exception e) {            
             throw new RemoteFileOperationFailedException("Cannot create new local work file: " + local);

Modified: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java Tue Feb 17 12:35:24 2009
@@ -33,7 +33,7 @@
  */
 public class FtpConsumerLocalWorkDirectoryTest extends FtpServerTestSupport {
 
-    private String getFtpUrl() {
+    protected String getFtpUrl() {
         return "ftp://admin@localhost:" + getPort() + "/lwd/?password=admin&delay=5000&localWorkDirectory=target/lwd";
     }
 
@@ -87,7 +87,7 @@
                         assertTrue("Local work file should exists", body.exists());                        
                         assertEquals(FileUtil.normalizePath("target/lwd/hello.txt"), body.getPath());
                     }
-                }).to("file://target/out", "mock:result");
+                }).to("mock:result", "file://target/out");
             }
         };
     }

Copied: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java (from r744966, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java?p2=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java&p1=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java&r1=744966&r2=745012&rev=745012&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java Tue Feb 17 12:35:24 2009
@@ -16,78 +16,25 @@
  */
 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.Processor;
-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;
-import org.apache.camel.converter.IOConverter;
-import org.apache.camel.util.FileUtil;
 
 /**
  * @version $Revision$
  */
-public class FtpConsumerLocalWorkDirectoryTest extends FtpServerTestSupport {
-
-    private String getFtpUrl() {
-        return "ftp://admin@localhost:" + getPort() + "/lwd/?password=admin&delay=5000&localWorkDirectory=target/lwd";
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        deleteDirectory("target/lwd");
-        deleteDirectory("target/out");
-        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
-        Endpoint endpoint = context.getEndpoint(getFtpUrl());
-        Exchange exchange = endpoint.createExchange();
-        exchange.getIn().setBody("Hello World");
-        exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME, "hello.txt");
-        Producer producer = endpoint.createProducer();
-        producer.start();
-        producer.process(exchange);
-        producer.stop();
-    }
-
-    public void testLocalWorkDirectory() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived("Hello World");
-        mock.expectedMessageCount(1);
-
-        assertMockEndpointsSatisfied();
-
-        Thread.sleep(200);
-
-        // now the lwd file should be deleted
-        File local = new File("target/lwd/hello.txt").getAbsoluteFile();
-        assertFalse("Local work file should have been deleted", local.exists());
-
-        // and the out file should exists
-        File out = new File("target/out/hello.txt").getAbsoluteFile();
-        assertTrue("file should exists", out.exists());
-        assertEquals("Hello World", IOConverter.toString(out));
-    }
+public class FtpConsumerLocalWorkDirectoryWorkOnPayloadTest extends FtpConsumerLocalWorkDirectoryTest {
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
                 from(getFtpUrl()).process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
-                        File body = exchange.getIn().getBody(File.class);
-                        assertNotNull(body);
-                        assertTrue("Local work file should exists", body.exists());                        
-                        assertEquals(FileUtil.normalizePath("target/lwd/hello.txt"), body.getPath());
+                        // alter the body by setting it to a String type
+                        exchange.getIn().setBody("Hello World");
+
                     }
-                }).to("file://target/out", "mock:result");
+                }).to("mock:result", "file://target/out");
             }
         };
     }