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/7caf775d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7caf775d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7caf775d Branch: refs/heads/camel-2.16.x Commit: 7caf775d9a49d172615fbaaa64400ee1a1f8cac8 Parents: e22c1ee Author: Claus Ibsen <davscl...@apache.org> Authored: Sun Dec 20 13:27:38 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Dec 21 13:42:32 2015 +0100 ---------------------------------------------------------------------- .../camel/catalog/DefaultCamelCatalog.java | 2 +- .../apache/camel/catalog/ValidationResult.java | 77 ++++++++++++++++++++ .../apache/camel/catalog/CamelCatalogTest.java | 17 +++++ 3 files changed, 95 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/7caf775d/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 a5385cb..2580536 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 @@ -647,7 +647,7 @@ public class DefaultCamelCatalog implements CamelCatalog { @Override public ValidationResult validateProperties(String uri) { - ValidationResult result = new ValidationResult(); + ValidationResult result = new ValidationResult(uri); Map<String, String> properties; List<Map<String, String>> rows; http://git-wip-us.apache.org/repos/asf/camel/blob/7caf775d/platforms/catalog/src/main/java/org/apache/camel/catalog/ValidationResult.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/ValidationResult.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/ValidationResult.java index 78952cd..4450133 100644 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/ValidationResult.java +++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/ValidationResult.java @@ -24,6 +24,8 @@ import java.util.Set; public class ValidationResult implements Serializable { + private final String uri; + // component private String syntaxError; private String unknownComponent; @@ -36,6 +38,10 @@ public class ValidationResult implements Serializable { private Map<String, String> invalidInteger; private Map<String, String> invalidNumber; + public ValidationResult(String uri) { + this.uri = uri; + } + public boolean isSuccess() { return syntaxError == null && unknownComponent == null && unknown == null && required == null && invalidEnum == null @@ -123,4 +129,75 @@ public class ValidationResult implements Serializable { public Map<String, String> getInvalidNumber() { return invalidNumber; } + + /** + * A human readable summary of the validation errors. + * + * @return the summary, or <tt>null</tt> if no validation errors + */ + public String summaryErrorMessage() { + if (isSuccess()) { + return null; + } + + if (syntaxError != null) { + return "Syntax error " + syntaxError; + } else if (unknownComponent != null) { + return "Unknown component " + unknownComponent; + } + + // for each invalid option build a reason message + Map<String, String> options = new LinkedHashMap<String, String>(); + if (unknown != null) { + for (String name : unknown) { + options.put(name, "Unknown field"); + } + } + if (required != null) { + for (String name : required) { + options.put(name, "Missing required field"); + } + } + if (invalidEnum != null) { + for (Map.Entry<String, String> entry : invalidEnum.entrySet()) { + options.put(entry.getKey(), "Invalid enum value: " + entry.getValue()); + } + } + if (invalidBoolean != null) { + for (Map.Entry<String, String> entry : invalidBoolean.entrySet()) { + options.put(entry.getKey(), "Invalid boolean value: " + entry.getValue()); + } + } + if (invalidInteger != null) { + for (Map.Entry<String, String> entry : invalidInteger.entrySet()) { + options.put(entry.getKey(), "Invalid integer value: " + entry.getValue()); + } + } + if (invalidNumber != null) { + for (Map.Entry<String, String> entry : invalidNumber.entrySet()) { + options.put(entry.getKey(), "Invalid number value: " + entry.getValue()); + } + } + + // build a table with the error summary nicely formatted + // lets use 24 as min length + int maxLen = 24; + for (String key : options.keySet()) { + maxLen = Math.max(maxLen, key.length()); + } + String format = "%" + maxLen + "s %s"; + + // build the human error summary + StringBuilder sb = new StringBuilder(); + sb.append("Endpoint validator error\n"); + sb.append("---------------------------------------------------------------------------------------------------------------------------------------\n"); + sb.append("\n\t").append(uri).append("\n"); + for (Map.Entry<String, String> option : options.entrySet()) { + String out = String.format(format, option.getKey(), option.getValue()); + sb.append("\n\t").append(out); + } + sb.append("\n\n"); + + return sb.toString(); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/7caf775d/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 6862fc8..b33ad5c 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 @@ -24,6 +24,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.BeforeClass; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.apache.camel.catalog.CatalogHelper.loadText; import static org.junit.Assert.assertEquals; @@ -33,6 +35,8 @@ import static org.junit.Assert.assertTrue; public class CamelCatalogTest { + private static final Logger LOG = LoggerFactory.getLogger(CamelCatalogTest.class); + static CamelCatalog catalog; @BeforeClass @@ -431,6 +435,19 @@ public class CamelCatalogTest { } @Test + public void validatePropertiesSummary() throws Exception { + ValidationResult result = catalog.validateProperties("yammer:MESSAGES?blah=yada&accessToken=aaa&consumerKey=&useJson=no&initialDelay=five"); + assertFalse(result.isSuccess()); + String reason = result.summaryErrorMessage(); + LOG.info(reason); + + result = catalog.validateProperties("jms:unknown:myqueue"); + assertFalse(result.isSuccess()); + reason = result.summaryErrorMessage(); + LOG.info(reason); + } + + @Test public void testEndpointComponentName() throws Exception { String name = catalog.endpointComponentName("jms:queue:foo"); assertEquals("jms", name);