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
+    }
+
 }