Camel catalog - Add api to validate endpoint uri

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cbf31791
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cbf31791
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cbf31791

Branch: refs/heads/camel-2.16.x
Commit: cbf317918742ce68bd5e744d0299c01a4f3c99f8
Parents: 9aeccdb
Author: Claus Ibsen <davscl...@apache.org>
Authored: Tue Dec 22 10:08:44 2015 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Dec 23 09:42:56 2015 +0100

----------------------------------------------------------------------
 .../camel/catalog/DefaultCamelCatalog.java      | 13 ++++++++---
 .../camel/catalog/EndpointValidationResult.java | 23 +++++++++++++++++++-
 .../apache/camel/catalog/JSonSchemaHelper.java  | 17 +++++++++++++++
 .../apache/camel/catalog/CamelCatalogTest.java  | 11 +++++++++-
 4 files changed, 59 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/cbf31791/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index 9ad91bd..d9aebec 100644
--- 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -47,6 +47,7 @@ import static 
org.apache.camel.catalog.JSonSchemaHelper.getRow;
 import static org.apache.camel.catalog.JSonSchemaHelper.isPropertyBoolean;
 import static org.apache.camel.catalog.JSonSchemaHelper.isPropertyInteger;
 import static org.apache.camel.catalog.JSonSchemaHelper.isPropertyNumber;
+import static org.apache.camel.catalog.JSonSchemaHelper.isPropertyObject;
 import static org.apache.camel.catalog.JSonSchemaHelper.isPropertyRequired;
 import static org.apache.camel.catalog.URISupport.createQueryString;
 import static org.apache.camel.catalog.URISupport.isEmpty;
@@ -675,12 +676,10 @@ public class DefaultCamelCatalog implements CamelCatalog {
             boolean placeholder = value.startsWith("{{") || 
value.startsWith("${") || value.startsWith("$simple{");
 
             Map<String, String> row = getRow(rows, name);
-            // unknown option
             if (row == null) {
+                // unknown option
                 result.addUnknown(name);
             } else {
-                // invalid value/type
-
                 // is required but the value is empty
                 boolean required = isPropertyRequired(rows, name);
                 if (required && isEmpty(value)) {
@@ -705,6 +704,14 @@ public class DefaultCamelCatalog implements CamelCatalog {
                     }
                 }
 
+                // is reference lookup of bean
+                if (isPropertyObject(rows, name)) {
+                    // must start with # and be at least 2 characters
+                    if (!value.startsWith("#") || value.length() <= 1) {
+                        result.addInvalidReference(name, value);
+                    }
+                }
+
                 // is boolean
                 if (!placeholder && isPropertyBoolean(rows, name)) {
                     // value must be a boolean

http://git-wip-us.apache.org/repos/asf/camel/blob/cbf31791/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java
 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java
index 413aaa5..7bb33e1 100644
--- 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java
+++ 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java
@@ -39,6 +39,7 @@ public class EndpointValidationResult implements Serializable 
{
     private Set<String> required;
     private Map<String, String> invalidEnum;
     private Map<String, String[]> invalidEnumChoices;
+    private Map<String, String> invalidReference;
     private Map<String, String> invalidBoolean;
     private Map<String, String> invalidInteger;
     private Map<String, String> invalidNumber;
@@ -50,7 +51,7 @@ public class EndpointValidationResult implements Serializable 
{
     public boolean isSuccess() {
         return syntaxError == null && unknownComponent == null
                 && unknown == null && required == null && invalidEnum == null 
&& invalidEnumChoices == null
-                && invalidBoolean == null && invalidInteger == null && 
invalidNumber == null;
+                && invalidReference == null && invalidBoolean == null && 
invalidInteger == null && invalidNumber == null;
     }
 
     public void addSyntaxError(String syntaxError) {
@@ -89,6 +90,13 @@ public class EndpointValidationResult implements 
Serializable {
         invalidEnumChoices.put(name, choices);
     }
 
+    public void addInvalidReference(String name, String value) {
+        if (invalidReference == null) {
+            invalidReference = new LinkedHashMap<String, String>();
+        }
+        invalidReference.put(name, value);
+    }
+
     public void addInvalidBoolean(String name, String value) {
         if (invalidBoolean == null) {
             invalidBoolean = new LinkedHashMap<String, String>();;
@@ -130,6 +138,10 @@ public class EndpointValidationResult implements 
Serializable {
         return invalidEnum;
     }
 
+    public Map<String, String> getInvalidReference() {
+        return invalidReference;
+    }
+
     public Map<String, String> getInvalidBoolean() {
         return invalidBoolean;
     }
@@ -177,6 +189,15 @@ public class EndpointValidationResult implements 
Serializable {
                 options.put(entry.getKey(), "Invalid enum value: " + 
entry.getValue() + ". Possible values: " + str);
             }
         }
+        if (invalidReference != null) {
+            for (Map.Entry<String, String> entry : 
invalidReference.entrySet()) {
+                if (!entry.getValue().startsWith("#")) {
+                    options.put(entry.getKey(), "Invalid reference value: " + 
entry.getValue() + " must start with #");
+                } else {
+                    options.put(entry.getKey(), "Invalid reference value: " + 
entry.getValue() + " must not be empty");
+                }
+            }
+        }
         if (invalidBoolean != null) {
             for (Map.Entry<String, String> entry : invalidBoolean.entrySet()) {
                 options.put(entry.getKey(), "Invalid boolean value: " + 
entry.getValue());

http://git-wip-us.apache.org/repos/asf/camel/blob/cbf31791/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java
 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java
index e3e4beb..f0755ef 100644
--- 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java
+++ 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java
@@ -180,6 +180,23 @@ public final class JSonSchemaHelper {
         return false;
     }
 
+    public static boolean isPropertyObject(List<Map<String, String>> rows, 
String name) {
+        for (Map<String, String> row : rows) {
+            String type = null;
+            boolean found = false;
+            if (row.containsKey("name")) {
+                found = name.equals(row.get("name"));
+            }
+            if (row.containsKey("type")) {
+                type = row.get("type");
+            }
+            if (found) {
+                return "object".equals(type);
+            }
+        }
+        return false;
+    }
+
     public static String getPropertyDefaultValue(List<Map<String, String>> 
rows, String name) {
         for (Map<String, String> row : rows) {
             String defaultValue = null;

http://git-wip-us.apache.org/repos/asf/camel/blob/cbf31791/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
 
b/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 74776b5..08b0979 100644
--- 
a/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ 
b/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -407,6 +407,15 @@ public class CamelCatalogTest {
         assertFalse(result.isSuccess());
         assertEquals("unknown", 
result.getInvalidEnum().get("destinationType"));
 
+        // reference okay
+        result = 
catalog.validateEndpointProperties("jms:queue:myqueue?jmsKeyFormatStrategy=#key");
+        assertTrue(result.isSuccess());
+
+        // reference
+        result = 
catalog.validateEndpointProperties("jms:queue:myqueue?jmsKeyFormatStrategy=key");
+        assertFalse(result.isSuccess());
+        assertEquals("key", 
result.getInvalidReference().get("jmsKeyFormatStrategy"));
+
         // okay
         result = 
catalog.validateEndpointProperties("yammer:MESSAGES?accessToken=aaa&consumerKey=bbb&consumerSecret=ccc&useJson=true&initialDelay=500");
         assertTrue(result.isSuccess());
@@ -436,7 +445,7 @@ public class CamelCatalogTest {
 
     @Test
     public void validatePropertiesSummary() throws Exception {
-        EndpointValidationResult result = 
catalog.validateEndpointProperties("yammer:MESSAGES?blah=yada&accessToken=aaa&consumerKey=&useJson=no&initialDelay=five");
+        EndpointValidationResult result = 
catalog.validateEndpointProperties("yammer:MESSAGES?blah=yada&accessToken=aaa&consumerKey=&useJson=no&initialDelay=five&pollStrategy=myStrategy");
         assertFalse(result.isSuccess());
         String reason = result.summaryErrorMessage();
         LOG.info(reason);

Reply via email to