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 2018/09/20 09:41:11 UTC
[camel] 02/02: CAMEL-12824: camel-route-parser - Add parser for
rest-dsl
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch rest-dsl-parser
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 9ace61230ef846c82ce87421e5ede81ef08d6baa
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Sep 20 11:35:45 2018 +0200
CAMEL-12824: camel-route-parser - Add parser for rest-dsl
---
.../org/apache/camel/parser/RestDslParser.java | 3 ++
.../helper/CamelJavaRestDslParserHelper.java | 62 +++++++++++++++++++---
.../camel/parser/java/MyRestDslRouteBuilder.java | 13 ++++-
.../camel/parser/java/RoasterJavaRestDslTest.java | 14 +++--
4 files changed, 81 insertions(+), 11 deletions(-)
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RestDslParser.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RestDslParser.java
index fb29182..e8dd599 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RestDslParser.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RestDslParser.java
@@ -33,6 +33,9 @@ import org.jboss.forge.roaster.model.source.MethodSource;
*/
public final class RestDslParser {
+ // TODO: add support for rest services (eg rest().get() ...)
+ // TODO: add XML rest-dsl parser also
+
private RestDslParser() {
}
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
index 38cc0c1..0b36844 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
@@ -82,6 +82,11 @@ public final class CamelJavaRestDslParserHelper {
if (line > -1) {
node.setLineNumber("" + line);
}
+ pos = exp.getStartPosition() + exp.getLength();
+ line = findLineNumber(fullyQualifiedFileName, pos);
+ if (line > -1) {
+ node.setLineNumberEnd("" + line);
+ }
node.setFileName(fullyQualifiedFileName);
node.setClassName(clazz.getQualifiedName());
node.setMethodName(configureMethod.getName());
@@ -138,11 +143,59 @@ public final class CamelJavaRestDslParserHelper {
private void doParseRestConfiguration(RestConfigurationDetails node, String fullyQualifiedFileName,
JavaClassSource clazz, MethodSource<JavaClassSource> configureMethod, Block block,
MethodInvocation mi) {
+
+ // end line number is the first node in the method chain we parse
+ if (node.getLineNumberEnd() == null) {
+ int pos = mi.getStartPosition() + mi.getLength();
+ int line = findLineNumber(fullyQualifiedFileName, pos);
+ if (line > -1) {
+ node.setLineNumberEnd("" + line);
+ }
+ }
+
String name = mi.getName().getIdentifier();
- if ("port".equals(name)) {
+ if ("component".equals(name)) {
+ node.setComponent(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("apiComponent".equals(name)) {
+ node.setApiComponent(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("producerComponent".equals(name)) {
+ node.setProducerComponent(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("scheme".equals(name)) {
+ node.setScheme(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("host".equals(name)) {
+ node.setHost(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("apiHost".equals(name)) {
+ node.setApiHost(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("port".equals(name)) {
node.setPort(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("producerApiDoc".equals(name)) {
+ node.setProducerApiDoc(extractValueFromFirstArgument(clazz, block, mi));
} else if ("contextPath".equals(name)) {
node.setContextPath(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("apiContextPath".equals(name)) {
+ node.setApiContextPath(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("apiContextRouteId".equals(name)) {
+ node.setApiContextRouteId(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("apiContextIdPattern".equals(name)) {
+ node.setApiContextIdPattern(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("apiContextListening".equals(name)) {
+ node.setApiContextListening(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("apiVendorExtension".equals(name)) {
+ node.setApiVendorExtension(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("hostNameResolver".equals(name)) {
+ node.setHostNameResolver(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("bindingMode".equals(name)) {
+ node.setBindingMode(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("skipBindingOnErrorCode".equals(name)) {
+ node.setSkipBindingOnErrorCode(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("clientRequestValidation".equals(name)) {
+ node.setClientRequestValidation(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("enableCORS".equals(name)) {
+ node.setEnableCORS(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("jsonDataFormat".equals(name)) {
+ node.setJsonDataFormat(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("xmlDataFormat".equals(name)) {
+ node.setXmlDataFormat(extractValueFromFirstArgument(clazz, block, mi));
}
}
@@ -234,13 +287,10 @@ public final class CamelJavaRestDslParserHelper {
return "{{" + name + "}}";
}
- // if its a qualified name (usually a constant field in another class)
- // then add a dummy value as we cannot find the field value in other classes and maybe even outside the
- // source code we have access to
+ // if its a qualified name, then its an enum where we should grab the simple name
if (expression instanceof QualifiedName) {
QualifiedName qn = (QualifiedName) expression;
- String name = qn.getFullyQualifiedName();
- return "{{" + name + "}}";
+ return qn.getName().getIdentifier();
}
if (expression instanceof SimpleName) {
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRestDslRouteBuilder.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRestDslRouteBuilder.java
index b73f77d..26957fa 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRestDslRouteBuilder.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRestDslRouteBuilder.java
@@ -17,12 +17,23 @@
package org.apache.camel.parser.java;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.rest.RestBindingMode;
+import org.apache.camel.model.rest.RestHostNameResolver;
public class MyRestDslRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
- restConfiguration().contextPath("myapi").port(1234);
+ restConfiguration()
+ .contextPath("myapi").port(1234)
+ .component("jetty")
+ .apiComponent("swagger")
+ .apiHost("localhost")
+ .apiContextPath("myapi/swagger")
+ .skipBindingOnErrorCode(true)
+ .scheme("https")
+ .hostNameResolver(RestHostNameResolver.allLocalIp)
+ .bindingMode(RestBindingMode.json);
rest()
.get("/foo")
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaRestDslTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaRestDslTest.java
index 81a19a4..34f1db0 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaRestDslTest.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaRestDslTest.java
@@ -25,13 +25,9 @@ import org.apache.camel.test.junit4.CamelTestSupport;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class RoasterJavaRestDslTest extends CamelTestSupport {
- private static final Logger LOG = LoggerFactory.getLogger(RoasterJavaRestDslTest.class);
-
@Override
public boolean isDumpRouteCoverage() {
return false;
@@ -45,11 +41,21 @@ public class RoasterJavaRestDslTest extends CamelTestSupport {
"src/test/java/org/apache/camel/parser/java/MyRestDslRouteBuilder.java", true);
assertEquals(1, list.size());
RestConfigurationDetails details = list.get(0);
+ assertEquals("27", details.getLineNumber());
+ assertEquals("36", details.getLineNumberEnd());
assertEquals("src/test/java/org/apache/camel/parser/java/MyRestDslRouteBuilder.java", details.getFileName());
assertEquals("configure", details.getMethodName());
assertEquals("org.apache.camel.parser.java.MyRestDslRouteBuilder", details.getClassName());
assertEquals("1234", details.getPort());
assertEquals("myapi", details.getContextPath());
+ assertEquals("jetty", details.getComponent());
+ assertEquals("json", details.getBindingMode());
+ assertEquals("swagger", details.getApiComponent());
+ assertEquals("myapi/swagger", details.getApiContextPath());
+ assertEquals("localhost", details.getApiHost());
+ assertEquals("true", details.getSkipBindingOnErrorCode());
+ assertEquals("https", details.getScheme());
+ assertEquals("allLocalIp", details.getHostNameResolver());
}
}