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/12/23 09:43:57 UTC

[04/14] camel git commit: Camel catalog - Add api to validate endpoint uri

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/f635df5d
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f635df5d
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f635df5d

Branch: refs/heads/master
Commit: f635df5d5cf60f361c8c9fa2135bc73516812f2e
Parents: 56852c6
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Dec 22 10:08:44 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Dec 23 09:05:13 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/f635df5d/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/f635df5d/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/f635df5d/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/f635df5d/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);