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:17 UTC

[camel] 03/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 f7542d3f1739715f8094cd6d1b81918d3a90648f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 4 09:45:04 2020 +0200

    CAMEL-15502: camel-core - Enum type converter should support dash style
---
 .../java/org/apache/camel/catalog/CamelCatalogTest.java   |  6 +++++-
 .../apache/camel/impl/converter/EnumTypeConverter.java    |  7 +------
 .../apache/camel/catalog/impl/AbstractCamelCatalog.java   |  7 +++++--
 .../src/main/java/org/apache/camel/util/StringHelper.java | 15 +++++++++++++++
 4 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 071e945..a62e567 100644
--- a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -1195,11 +1195,15 @@ public class CamelCatalogTest {
         assertTrue(result.getUnknown().contains("unknown"));
 
         // there is a type converter that converts from and to to phone number
+        uri = "zendesk:getTopicsByUser?userId=123";
+        result = catalog.validateEndpointProperties(uri);
+        assertTrue(result.isSuccess());
+
         uri = "zendesk:GET_TOPICS_BY_USER?userId=123";
         result = catalog.validateEndpointProperties(uri);
         assertTrue(result.isSuccess());
 
-        uri = "zendesk:GET_TOPICS_BY_USER?userId=123&unknown=true";
+        uri = "zendesk:get-topics-by-user?userId=123&unknown=true";
         result = catalog.validateEndpointProperties(uri);
         assertFalse(result.isSuccess());
         assertTrue(result.getUnknown().contains("unknown"));
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 8aec277..6d51003 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,7 +17,6 @@
 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;
@@ -49,11 +48,7 @@ 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);
+            text = StringHelper.asEnumConstantValue(text);
             for (Enum enumValue : enumClass.getEnumConstants()) {
                 if (enumValue.name().equalsIgnoreCase(text)) {
                     return type.cast(enumValue);
diff --git a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
index ee96f82..21d1b94 100644
--- a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
+++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
@@ -272,7 +272,8 @@ public abstract class AbstractCamelCatalog {
                 if (!multiValue && !valuePlaceholder && !lookup && enums != null) {
                     boolean found = false;
                     for (String s : enums) {
-                        if (value.equalsIgnoreCase(s)) {
+                        String valueEC = StringHelper.asEnumConstantValue(value);
+                        if (value.equalsIgnoreCase(s) || valueEC.equalsIgnoreCase(s)) {
                             found = true;
                             break;
                         }
@@ -1100,8 +1101,10 @@ public abstract class AbstractCamelCatalog {
             List<String> enums = row.getEnums();
             if (!optionPlaceholder && !lookup && enums != null) {
                 boolean found = false;
+                String valueEC = StringHelper.asEnumConstantValue(value);
                 for (String s : enums) {
-                    if (value.equalsIgnoreCase(s)) {
+                    // equals as is or using the enum naming style
+                    if (value.equalsIgnoreCase(s) || valueEC.equalsIgnoreCase(s)) {
                         found = true;
                         break;
                     }
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
index eb3d339..389a002 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
@@ -877,4 +877,19 @@ public final class StringHelper {
         }
     }
 
+    /**
+     * Converts the value to an enum constant value that is in the form of upper cased with underscore.
+     */
+    public static String asEnumConstantValue(String value) {
+        if (value == null || value.isEmpty()) {
+            return value;
+        }
+        value = StringHelper.camelCaseToDash(value);
+        // replace double dashes
+        value = value.replaceAll("-+", "-");
+        // replace dash with underscore and upper case
+        value = value.replace('-', '_').toUpperCase(Locale.ENGLISH);
+        return value;
+    }
+
 }