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:51 UTC
[2/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/ce19353f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ce19353f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ce19353f
Branch: refs/heads/camel-2.11.x
Commit: ce19353f1297c5d3dc59be21a1ead89c0a44907a
Parents: a6ec08a
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 15:13:22 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/ce19353f/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 ed8bf74..7c57409 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/ce19353f/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/ce19353f/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/ce19353f/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 6848189..208e01f 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
@@ -25,6 +25,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.
*/
@@ -43,11 +45,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 {
@@ -58,7 +58,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/ce19353f/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));
}
}