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 2013/09/15 16:05:54 UTC

[5/5] git commit: CAMEL-6748: Optimize File Producers by Skipping Header Evaluation. Thansk to James Carman for the patch.

CAMEL-6748: Optimize File Producers by Skipping Header Evaluation. Thansk to James Carman for the patch.


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

Branch: refs/heads/master
Commit: 5ba8f63f78f82b0cddf6cecbf59ac444a0cae2a6
Parents: 1657378
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Sep 15 15:12:29 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Sep 15 16:05:00 2013 +0200

----------------------------------------------------------------------
 .../component/file/GenericFileProducer.java     | 37 ++++++++----
 .../file/FileConsumerFileExpressionTest.java    |  4 +-
 ...eProducerConsumedFileNameEvaluationTest.java | 62 --------------------
 .../file/FileProducerExpressionTest.java        | 12 ++--
 .../file/remote/FtpServerTestSupport.java       |  4 +-
 5 files changed, 36 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5ba8f63f/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java
index af9d0db..aec0a75 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java
@@ -286,30 +286,41 @@ public class GenericFileProducer<T> extends DefaultProducer {
         String answer;
 
         // overrule takes precedence
-        String overrule = exchange.getIn().getHeader(Exchange.OVERRULE_FILE_NAME, String.class);
-        String consumed = exchange.getIn().getHeader(Exchange.FILE_NAME_CONSUMED, String.class);
-        String name = overrule == null ? exchange.getIn().getHeader(Exchange.FILE_NAME, String.class) : overrule;
+        Object value;
+
+        Object overrule = exchange.getIn().getHeader(Exchange.OVERRULE_FILE_NAME);
+        if (overrule != null) {
+            if (overrule instanceof Expression) {
+                value = overrule;
+            } else {
+                value = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, overrule);
+            }
+        } else {
+            value = exchange.getIn().getHeader(Exchange.FILE_NAME);
+        }
 
         // if we have an overrule then override the existing header to use the overrule computed name from this point forward
         if (overrule != null) {
-            exchange.getIn().setHeader(Exchange.FILE_NAME, name);
+            exchange.getIn().setHeader(Exchange.FILE_NAME, value);
+        }
+
+        if (value != null && value instanceof String && StringHelper.hasStartToken((String) value, "simple")) {
+            log.warn("Simple expression: {} detected in header: {} of type String. This feature has been removed (see CAMEL-6748).", value, Exchange.FILE_NAME);
         }
 
         // expression support
         Expression expression = endpoint.getFileName();
-
-        if (name != null && !name.equals(consumed)) {
-            // the header name can be an expression too, that should override
-            // whatever configured on the endpoint
-            if (StringHelper.hasStartToken(name, "simple")) {
-                log.trace("{} contains a Simple expression: {}", Exchange.FILE_NAME, name);
-                Language language = getEndpoint().getCamelContext().resolveLanguage("file");
-                expression = language.createExpression(name);
-            }
+        if (value != null && value instanceof Expression) {
+            expression = (Expression) value;
         }
+
+        // evaluate the name as a String from the value
+        String name;
         if (expression != null) {
             log.trace("Filename evaluated as expression: {}", expression);
             name = expression.evaluate(exchange, String.class);
+        } else {
+            name = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, value);
         }
 
         // flatten name

http://git-wip-us.apache.org/repos/asf/camel/blob/5ba8f63f/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileExpressionTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileExpressionTest.java b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileExpressionTest.java
index c6a83d2..0ddc412 100644
--- a/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileExpressionTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileExpressionTest.java
@@ -22,6 +22,8 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.JndiRegistry;
 
+import static org.apache.camel.language.simple.SimpleLanguage.simple;
+
 /**
  * Unit test for expression option for file consumer.
  */
@@ -70,7 +72,7 @@ public class FileConsumerFileExpressionTest extends ContextTestSupport {
     public void testConsumeFileBasedOnDatePattern() throws Exception {
         template.sendBodyAndHeader("file://target/filelanguage/date", "Bye World", Exchange.FILE_NAME, "myfile-20081128.txt");
         template.sendBodyAndHeader("file://target/filelanguage/date", "Hello World", Exchange.FILE_NAME, "myfile-20081129.txt");
-        template.sendBodyAndHeader("file://target/filelanguage/date", "Goodday World", Exchange.FILE_NAME, "myfile-${date:now:yyyyMMdd}.txt");
+        template.sendBodyAndHeader("file://target/filelanguage/date", "Goodday World", Exchange.FILE_NAME, simple("myfile-${date:now:yyyyMMdd}.txt"));
 
         context.addRoutes(new RouteBuilder() {
             @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/5ba8f63f/camel-core/src/test/java/org/apache/camel/component/file/FileProducerConsumedFileNameEvaluationTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/file/FileProducerConsumedFileNameEvaluationTest.java b/camel-core/src/test/java/org/apache/camel/component/file/FileProducerConsumedFileNameEvaluationTest.java
deleted file mode 100644
index 64da59d..0000000
--- a/camel-core/src/test/java/org/apache/camel/component/file/FileProducerConsumedFileNameEvaluationTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-
-/**
- * @version
- */
-public class FileProducerConsumedFileNameEvaluationTest extends ContextTestSupport {
-
-    @Override
-    protected void setUp() throws Exception {
-        deleteDirectory("target/producerconsumedfilename");
-        super.setUp();
-    }
-
-    public void testFileNameNotEvaluatedWhenMatchingConsumed() throws Exception {
-        Map<String, Object> headers = new TreeMap<String, Object>();
-        headers.put(Exchange.FILE_NAME, "file-${date:now:yyyyMMdd}");
-        headers.put(Exchange.FILE_NAME_CONSUMED, "file-${date:now:yyyyMMdd}");
-        template.sendBodyAndHeaders("file://target/producerconsumedfilename", "Hello World", headers);
-        assertFileExists("target/producerconsumedfilename/file-${date:now:yyyyMMdd}");
-    }
-
-    public void testFileNameEvaluatedWhenNotMatchingConsumed() throws Exception {
-        Map<String, Object> headers = new TreeMap<String, Object>();
-        headers.put(Exchange.FILE_NAME, "file-${date:now:yyyyMMdd}.txt");
-        headers.put(Exchange.FILE_NAME_CONSUMED, "file-consumed");
-        template.sendBodyAndHeaders("file://target/producerconsumedfilename", "Hello World", headers);
-        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
-        assertFileExists("target/producerconsumedfilename/file-" + date + ".txt");
-    }
-
-    public void testFileNameEvaluatedWhenConsumedNull() throws Exception {
-        Map<String, Object> headers = new TreeMap<String, Object>();
-        headers.put(Exchange.FILE_NAME, "file-${date:now:yyyyMMdd}.txt");
-        template.sendBodyAndHeaders("file://target/producerconsumedfilename", "Hello World", headers);
-        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
-        assertFileExists("target/producerconsumedfilename/file-" + date + ".txt");
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/5ba8f63f/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java b/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java
index 01813e0..0eb15be 100644
--- a/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java
@@ -24,6 +24,8 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.JndiRegistry;
 
+import static org.apache.camel.language.simple.SimpleLanguage.simple;
+
 /**
  * Unit test for expression option for file producer.
  */
@@ -42,11 +44,9 @@ public class FileProducerExpressionTest extends ContextTestSupport {
         return jndi;
     }
 
-    public void testProduceBeanByHeader() throws Exception {
-        template.sendBodyAndHeader("file://target/filelanguage", "Hello World",
-            Exchange.FILE_NAME, "${bean:myguidgenerator}.bak");
-
-        assertFileExists("target/filelanguage/123.bak");
+    public void testProducerFileNameHeaderNotEvaluated() {
+        template.sendBodyAndHeader("file://target/filelanguage", "Hello World", Exchange.FILE_NAME, "$simple{myfile-${date:now:yyyyMMdd}}.txt");
+        assertFileExists("target/filelanguage/$simple{myfile-${date:now:yyyyMMdd}}.txt");
     }
 
     public void testProduceBeanByExpression() throws Exception {
@@ -57,7 +57,7 @@ public class FileProducerExpressionTest extends ContextTestSupport {
 
     public void testProducerDateByHeader() throws Exception {
         template.sendBodyAndHeader("file://target/filelanguage", "Hello World",
-            Exchange.FILE_NAME, "myfile-${date:now:yyyyMMdd}.txt");
+            Exchange.FILE_NAME, simple("myfile-${date:now:yyyyMMdd}.txt"));
 
         String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
         assertFileExists("target/filelanguage/myfile-" + date + ".txt");

http://git-wip-us.apache.org/repos/asf/camel/blob/5ba8f63f/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpServerTestSupport.java
----------------------------------------------------------------------
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpServerTestSupport.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpServerTestSupport.java
index 7df7a92..308c041 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpServerTestSupport.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpServerTestSupport.java
@@ -32,6 +32,8 @@ import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
 import org.junit.After;
 import org.junit.Before;
 
+import static org.apache.camel.language.simple.SimpleLanguage.simple;
+
 /**
  * Base class for unit testing using a FTPServer
  */
@@ -125,7 +127,7 @@ public abstract class FtpServerTestSupport extends BaseServerTestSupport {
     }
     
     public void sendFile(String url, Object body, String fileName) {
-        template.sendBodyAndHeader(url, body, Exchange.FILE_NAME, fileName);
+        template.sendBodyAndHeader(url, body, Exchange.FILE_NAME, simple(fileName));
     }
     
 }