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 2016/01/01 11:23:53 UTC

[3/7] camel git commit: Camel catalog - Add api to validate simple language

Camel catalog - Add api to validate simple language


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

Branch: refs/heads/master
Commit: 635ab04bc75624859849a3dd76b93463efb29f8c
Parents: 0b82cfb
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 31 17:29:11 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jan 1 11:22:34 2016 +0100

----------------------------------------------------------------------
 platforms/catalog/pom.xml                       |  7 +++
 .../org/apache/camel/catalog/CamelCatalog.java  | 20 +++++++++
 .../camel/catalog/DefaultCamelCatalog.java      | 40 +++++++++++++++++
 .../camel/catalog/SimpleValidationResult.java   | 45 ++++++++++++++++++++
 .../apache/camel/catalog/CamelCatalogTest.java  | 26 +++++++++++
 5 files changed, 138 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/635ab04b/platforms/catalog/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/catalog/pom.xml b/platforms/catalog/pom.xml
index 94321d2..bfd5019 100644
--- a/platforms/catalog/pom.xml
+++ b/platforms/catalog/pom.xml
@@ -47,6 +47,13 @@
       <scope>test</scope>
     </dependency>
 
+    <!-- for testing simple language parser -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>

http://git-wip-us.apache.org/repos/asf/camel/blob/635ab04b/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index 5fedead..4d3f5e4 100644
--- a/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -199,6 +199,26 @@ public interface CamelCatalog {
     EndpointValidationResult validateEndpointProperties(String uri);
 
     /**
+     * Parses and validates the simple expression.
+     * <p/>
+     * <b>Important:</b> This requires having <tt>camel-core</tt> on the classpath
+     *
+     * @param simple  the simple expression
+     * @return validation result
+     */
+    SimpleValidationResult validateSimpleExpression(String simple);
+
+    /**
+     * Parses and validates the simple predicate
+     * <p/>
+     * <b>Important:</b> This requires having <tt>camel-core</tt> on the classpath
+     *
+     * @param simple  the simple predicate
+     * @return validation result
+     */
+    SimpleValidationResult validateSimplePredicate(String simple);
+
+    /**
      * Returns the component name from the given endpoint uri
      *
      * @param uri  the endpoint uri

http://git-wip-us.apache.org/repos/asf/camel/blob/635ab04b/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 3cde7ba..607a7e5 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
@@ -19,6 +19,7 @@ package org.apache.camel.catalog;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
@@ -1200,6 +1201,45 @@ public class DefaultCamelCatalog implements CamelCatalog {
         return sb.toString();
     }
 
+    @Override
+    public SimpleValidationResult validateSimpleExpression(String simple) {
+        return doValidateSimple(simple, false);
+    }
+
+    @Override
+    public SimpleValidationResult validateSimplePredicate(String simple) {
+        return doValidateSimple(simple, true);
+    }
+
+    private SimpleValidationResult doValidateSimple(String simple, boolean predicate) {
+        SimpleValidationResult answer = new SimpleValidationResult(simple);
+
+        Object instance = null;
+        Class clazz = null;
+        try {
+            clazz = DefaultCamelCatalog.class.getClassLoader().loadClass("org.apache.camel.language.simple.SimpleLanguage");
+            instance = clazz.newInstance();
+        } catch (Exception e) {
+            // ignore
+        }
+
+        if (clazz != null && instance != null) {
+            try {
+                if (predicate) {
+                    instance.getClass().getMethod("createPredicate", String.class).invoke(instance, simple);
+                } else {
+                    instance.getClass().getMethod("createExpression", String.class).invoke(instance, simple);
+                }
+            } catch (InvocationTargetException e) {
+                answer.setError(e.getTargetException().getMessage());
+            } catch (Exception e) {
+                answer.setError(e.getMessage());
+            }
+        }
+
+        return answer;
+    }
+
     /**
      * Special logic for log endpoints to deal when showAll=true
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/635ab04b/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java
new file mode 100644
index 0000000..cd11ef0
--- /dev/null
+++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.catalog;
+
+import java.io.Serializable;
+
+public class SimpleValidationResult implements Serializable {
+
+    private final String simple;
+    private String error;
+
+    public SimpleValidationResult(String simple) {
+        this.simple = simple;
+    }
+
+    public String getSimple() {
+        return simple;
+    }
+
+    public boolean isSuccess() {
+        return error == null;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public String getError() {
+        return error;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/635ab04b/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 0bd8d3b..259272b 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
@@ -566,4 +566,30 @@ public class CamelCatalogTest {
         assertNotNull(tree);
     }
 
+    @Test
+    public void testSimpleExpression() throws Exception {
+        SimpleValidationResult result = catalog.validateSimpleExpression("${body}");
+        assertTrue(result.isSuccess());
+        assertEquals("${body}", result.getSimple());
+
+        result = catalog.validateSimpleExpression("${body");
+        assertFalse(result.isSuccess());
+        assertEquals("${body", result.getSimple());
+        LOG.info(result.getError());
+        assertTrue(result.getError().startsWith("expected symbol functionEnd but was eol at location 5"));
+    }
+
+    @Test
+    public void testSimplePredicate() throws Exception {
+        SimpleValidationResult result = catalog.validateSimplePredicate("${body} == 'abc'");
+        assertTrue(result.isSuccess());
+        assertEquals("${body} == 'abc'", result.getSimple());
+
+        result = catalog.validateSimplePredicate("${body} > ${header.size");
+        assertFalse(result.isSuccess());
+        assertEquals("${body} > ${header.size", result.getSimple());
+        LOG.info(result.getError());
+        assertTrue(result.getError().startsWith("expected symbol functionEnd but was eol at location 22"));
+    }
+
 }