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 2015/08/08 12:38:13 UTC
[2/3] camel git commit: CAMEL-9064: File language - Add functions to
get extension in single mode
CAMEL-9064: File language - Add functions to get extension in single mode
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3b18db66
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3b18db66
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3b18db66
Branch: refs/heads/camel-2.15.x
Commit: 3b18db666a9b8d22216c95dce5c4b710c14731e7
Parents: 654db0d
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Aug 8 10:22:50 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Aug 8 12:45:28 2015 +0200
----------------------------------------------------------------------
.../apache/camel/builder/ExpressionBuilder.java | 42 +++++++++++
.../simple/ast/SimpleFunctionExpression.java | 10 ++-
.../java/org/apache/camel/util/FileUtil.java | 16 ++++-
.../language/FileLanguageExtSingleTest.java | 73 ++++++++++++++++++++
.../apache/camel/language/FileLanguageTest.java | 3 +
5 files changed, 138 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/3b18db66/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index c22ad80..1210ff8 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -1708,6 +1708,20 @@ public final class ExpressionBuilder {
};
}
+ public static Expression fileNameNoExtensionSingleExpression() {
+ return new ExpressionAdapter() {
+ public Object evaluate(Exchange exchange) {
+ String name = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);
+ return FileUtil.stripExt(name, true);
+ }
+
+ @Override
+ public String toString() {
+ return "file:name.noext.single";
+ }
+ };
+ }
+
public static Expression fileOnlyNameNoExtensionExpression() {
return new ExpressionAdapter() {
public Object evaluate(Exchange exchange) {
@@ -1722,6 +1736,20 @@ public final class ExpressionBuilder {
};
}
+ public static Expression fileOnlyNameNoExtensionSingleExpression() {
+ return new ExpressionAdapter() {
+ public Object evaluate(Exchange exchange) {
+ String name = fileOnlyNameExpression().evaluate(exchange, String.class);
+ return FileUtil.stripExt(name, true);
+ }
+
+ @Override
+ public String toString() {
+ return "file:onlyname.noext.single";
+ }
+ };
+ }
+
public static Expression fileExtensionExpression() {
return new ExpressionAdapter() {
public Object evaluate(Exchange exchange) {
@@ -1736,6 +1764,20 @@ public final class ExpressionBuilder {
};
}
+ public static Expression fileExtensionSingleExpression() {
+ return new ExpressionAdapter() {
+ public Object evaluate(Exchange exchange) {
+ String name = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);
+ return FileUtil.onlyExt(name, true);
+ }
+
+ @Override
+ public String toString() {
+ return "file:ext.single";
+ }
+ };
+ }
+
public static Expression fileParentExpression() {
return new ExpressionAdapter() {
public Object evaluate(Exchange exchange) {
http://git-wip-us.apache.org/repos/asf/camel/blob/3b18db66/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java b/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
index d05356d..71b4eb6 100644
--- a/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
@@ -348,14 +348,18 @@ public class SimpleFunctionExpression extends LiteralExpression {
return ExpressionBuilder.fileNameExpression();
} else if (ObjectHelper.equal(remainder, "name.noext")) {
return ExpressionBuilder.fileNameNoExtensionExpression();
- } else if (ObjectHelper.equal(remainder, "name.ext")) {
+ } else if (ObjectHelper.equal(remainder, "name.noext.single")) {
+ return ExpressionBuilder.fileNameNoExtensionSingleExpression();
+ } else if (ObjectHelper.equal(remainder, "name.ext") || ObjectHelper.equal(remainder, "ext")) {
return ExpressionBuilder.fileExtensionExpression();
+ } else if (ObjectHelper.equal(remainder, "name.ext.single")) {
+ return ExpressionBuilder.fileExtensionSingleExpression();
} else if (ObjectHelper.equal(remainder, "onlyname")) {
return ExpressionBuilder.fileOnlyNameExpression();
} else if (ObjectHelper.equal(remainder, "onlyname.noext")) {
return ExpressionBuilder.fileOnlyNameNoExtensionExpression();
- } else if (ObjectHelper.equal(remainder, "ext")) {
- return ExpressionBuilder.fileExtensionExpression();
+ } else if (ObjectHelper.equal(remainder, "onlyname.noext.single")) {
+ return ExpressionBuilder.fileOnlyNameNoExtensionSingleExpression();
} else if (ObjectHelper.equal(remainder, "parent")) {
return ExpressionBuilder.fileParentExpression();
} else if (ObjectHelper.equal(remainder, "path")) {
http://git-wip-us.apache.org/repos/asf/camel/blob/3b18db66/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/FileUtil.java b/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
index 3f978ed..81585fc 100644
--- a/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
+++ b/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
@@ -191,6 +191,10 @@ public final class FileUtil {
}
public static String stripExt(String name) {
+ return stripExt(name, false);
+ }
+
+ public static String stripExt(String name, boolean singleMode) {
if (name == null) {
return null;
}
@@ -202,12 +206,13 @@ public final class FileUtil {
if (pos > 0) {
String onlyName = name.substring(pos + 1);
- int pos2 = onlyName.indexOf('.');
+ int pos2 = singleMode ? onlyName.lastIndexOf('.') : onlyName.indexOf('.');
if (pos2 > 0) {
return name.substring(0, pos + pos2 + 1);
}
} else {
- int pos2 = name.indexOf('.');
+ // if single ext mode, then only return last extension
+ int pos2 = singleMode ? name.lastIndexOf('.') : name.indexOf('.');
if (pos2 > 0) {
return name.substring(0, pos2);
}
@@ -217,13 +222,18 @@ public final class FileUtil {
}
public static String onlyExt(String name) {
+ return onlyExt(name, false);
+ }
+
+ public static String onlyExt(String name, boolean singleMode) {
if (name == null) {
return null;
}
name = stripPath(name);
// extension is the first dot, as a file may have double extension such as .tar.gz
- int pos = name.indexOf('.');
+ // if single ext mode, then only return last extension
+ int pos = singleMode ? name.lastIndexOf('.') : name.indexOf('.');
if (pos != -1) {
return name.substring(pos + 1);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/3b18db66/camel-core/src/test/java/org/apache/camel/language/FileLanguageExtSingleTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/FileLanguageExtSingleTest.java b/camel-core/src/test/java/org/apache/camel/language/FileLanguageExtSingleTest.java
new file mode 100644
index 0000000..ccdc314
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/language/FileLanguageExtSingleTest.java
@@ -0,0 +1,73 @@
+/**
+ * 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.language;
+
+import java.io.File;
+import java.util.Calendar;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.LanguageTestSupport;
+import org.apache.camel.component.file.FileConsumer;
+import org.apache.camel.component.file.FileEndpoint;
+import org.apache.camel.component.file.GenericFile;
+
+/**
+ * Unit test for File Language.
+ */
+public class FileLanguageExtSingleTest extends LanguageTestSupport {
+
+ private File file;
+
+ protected String getLanguageName() {
+ return "file";
+ }
+
+ public void testFileNoSingleExt() throws Exception {
+ assertExpression("${file:name}", "test" + File.separator + "bye.def.txt");
+ assertExpression("${file:name.noext}", "test" + File.separator + "bye");
+ assertExpression("${file:name.noext.single}", "test" + File.separator + "bye.def");
+ assertExpression("${file:name.ext}", "def.txt");
+ assertExpression("${file:name.ext.single}", "txt");
+
+ assertExpression("${file:onlyname.noext}", "bye");
+ assertExpression("${file:onlyname.noext.single}", "bye.def");
+ }
+
+ public Exchange createExchange() {
+ // create the file
+ String uri = "file://target/filelanguage?fileExist=Override";
+ template.sendBodyAndHeader(uri, "Bye World", Exchange.FILE_NAME, "test/bye.def.txt");
+
+ // get the file handle
+ file = new File("target/filelanguage/test/bye.def.txt");
+ GenericFile<File> gf = FileConsumer.asGenericFile("target/filelanguage", file, null);
+
+ FileEndpoint endpoint = getMandatoryEndpoint(uri, FileEndpoint.class);
+
+ Exchange answer = endpoint.createExchange(gf);
+ endpoint.configureMessage(gf, answer.getIn());
+
+ Calendar cal = Calendar.getInstance();
+ cal.set(1974, Calendar.APRIL, 20);
+ answer.getIn().setHeader("birthday", cal.getTime());
+
+ cal.set(2008, Calendar.AUGUST, 8);
+ answer.getOut().setHeader("special", cal.getTime());
+ return answer;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/3b18db66/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java b/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
index 407b737..1e98e1d 100644
--- a/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
@@ -71,10 +71,13 @@ public class FileLanguageTest extends LanguageTestSupport {
public void testFile() throws Exception {
assertExpression("${file:ext}", "txt");
assertExpression("${file:name.ext}", "txt");
+ assertExpression("${file:name.ext.single}", "txt");
assertExpression("${file:name}", "test" + File.separator + file.getName());
assertExpression("${file:name.noext}", "test" + File.separator + "hello");
+ assertExpression("${file:name.noext.single}", "test" + File.separator + "hello");
assertExpression("${file:onlyname}", file.getName());
assertExpression("${file:onlyname.noext}", "hello");
+ assertExpression("${file:onlyname.noext.single}", "hello");
assertExpression("${file:parent}", file.getParent());
assertExpression("${file:path}", file.getPath());
assertExpression("${file:absolute}", FileUtil.isAbsolute(file));