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 2020/09/04 07:46:16 UTC
[camel] 02/03: CAMEL-15502: camel-core - Enum type converter should
support dash style
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 60b752ff072b555f8732fd367a6b15c2b2963f65
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 4 09:33:14 2020 +0200
CAMEL-15502: camel-core - Enum type converter should support dash style
---
.../camel/impl/converter/EnumTypeConverter.java | 14 +++++++++++
.../apache/camel/converter/EnumConverterTest.java | 27 ++++++++++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java b/core/camel-base/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
index 8890fe7..8aec277 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/converter/EnumTypeConverter.java
@@ -17,11 +17,13 @@
package org.apache.camel.impl.converter;
import java.lang.reflect.Method;
+import java.util.Locale;
import org.apache.camel.Exchange;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.support.ObjectHelper;
import org.apache.camel.support.TypeConverterSupport;
+import org.apache.camel.util.StringHelper;
/**
* A type converter which is used to convert from String to enum type
@@ -46,6 +48,18 @@ public class EnumTypeConverter extends TypeConverterSupport {
}
}
+ // add support for using dash or camel cased to common used upper cased underscore style for enum constants
+ text = StringHelper.camelCaseToDash(text);
+ // replace double dashes
+ text = text.replaceAll("-+", "-");
+ // replace dash with underscore and upper case
+ text = text.replace('-', '_').toUpperCase(Locale.ENGLISH);
+ for (Enum enumValue : enumClass.getEnumConstants()) {
+ if (enumValue.name().equalsIgnoreCase(text)) {
+ return type.cast(enumValue);
+ }
+ }
+
// fallback to the JDK valueOf which is case-sensitive and throws exception if not found
Method method;
try {
diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java
index bd3feb3..bfdb60b 100644
--- a/core/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/converter/EnumConverterTest.java
@@ -67,4 +67,31 @@ public class EnumConverterTest extends ContextTestSupport {
}
}
+ @Test
+ public void testCamelCash() throws Exception {
+ Exchange exchange = new DefaultExchange(context);
+ MyEnum level = context.getTypeConverter().mandatoryConvertTo(MyEnum.class, exchange, "GET_USERS");
+ assertEquals(MyEnum.GET_USERS, level);
+
+ level = context.getTypeConverter().mandatoryConvertTo(MyEnum.class, exchange, "getUsers");
+ assertEquals(MyEnum.GET_USERS, level);
+
+ level = context.getTypeConverter().mandatoryConvertTo(MyEnum.class, exchange, "getUsersByTopic");
+ assertEquals(MyEnum.GET_USERS_BY_TOPIC, level);
+
+ level = context.getTypeConverter().mandatoryConvertTo(MyEnum.class, exchange, "GetUsersByTopic");
+ assertEquals(MyEnum.GET_USERS_BY_TOPIC, level);
+
+ level = context.getTypeConverter().mandatoryConvertTo(MyEnum.class, exchange, "get-users-by-topic");
+ assertEquals(MyEnum.GET_USERS_BY_TOPIC, level);
+
+ level = context.getTypeConverter().mandatoryConvertTo(MyEnum.class, exchange, "Get-Users-By-Topic");
+ assertEquals(MyEnum.GET_USERS_BY_TOPIC, level);
+ }
+
+ public enum MyEnum {
+ GET_USERS,
+ GET_USERS_BY_TOPIC
+ }
+
}