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/21 13:07:39 UTC
[camel] branch rest-dsl-parser updated: 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
The following commit(s) were added to refs/heads/rest-dsl-parser by this push:
new f0854fc CAMEL-12824: camel-route-parser - Add parser for rest-dsl
f0854fc is described below
commit f0854fcd747e45aa8593e8e1274ff410b6f4e73d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 21 15:02:12 2018 +0200
CAMEL-12824: camel-route-parser - Add parser for rest-dsl
---
.../helper/CamelJavaRestDslParserHelper.java | 33 ++++++++++++++
.../parser/helper/CamelXmlRestDslParserHelper.java | 50 ++++++++++++++++++++++
.../parser/model/RestConfigurationDetails.java | 43 +++++++++++++++++++
.../camel/parser/java/MyRestDslRouteBuilder.java | 7 ++-
.../camel/parser/java/RoasterJavaRestDslTest.java | 12 +++++-
.../apache/camel/parser/xml/XmlRestDslTest.java | 20 ++++++---
.../org/apache/camel/parser/xml/myrest.xml | 5 +++
7 files changed, 161 insertions(+), 9 deletions(-)
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 0b36844..d111a84 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
@@ -196,6 +196,30 @@ public final class CamelJavaRestDslParserHelper {
node.setJsonDataFormat(extractValueFromFirstArgument(clazz, block, mi));
} else if ("xmlDataFormat".equals(name)) {
node.setXmlDataFormat(extractValueFromFirstArgument(clazz, block, mi));
+ } else if ("componentProperty".equals(name)) {
+ String key = extractValueFromFirstArgument(clazz, block, mi);
+ String value = extractValueFromSecondArgument(clazz, block, mi);
+ node.addComponentProperty(key, value);
+ } else if ("endpointProperty".equals(name)) {
+ String key = extractValueFromFirstArgument(clazz, block, mi);
+ String value = extractValueFromSecondArgument(clazz, block, mi);
+ node.addEndpointProperty(key, value);
+ } else if ("consumerProperty".equals(name)) {
+ String key = extractValueFromFirstArgument(clazz, block, mi);
+ String value = extractValueFromSecondArgument(clazz, block, mi);
+ node.addConsumerProperty(key, value);
+ } else if ("dataFormatProperty".equals(name)) {
+ String key = extractValueFromFirstArgument(clazz, block, mi);
+ String value = extractValueFromSecondArgument(clazz, block, mi);
+ node.addDataFormatProperty(key, value);
+ } else if ("apiProperty".equals(name)) {
+ String key = extractValueFromFirstArgument(clazz, block, mi);
+ String value = extractValueFromSecondArgument(clazz, block, mi);
+ node.addApiProperty(key, value);
+ } else if ("corsHeaderProperty".equals(name)) {
+ String key = extractValueFromFirstArgument(clazz, block, mi);
+ String value = extractValueFromSecondArgument(clazz, block, mi);
+ node.addCorsHeader(key, value);
}
}
@@ -208,6 +232,15 @@ public final class CamelJavaRestDslParserHelper {
return null;
}
+ private static String extractValueFromSecondArgument(JavaClassSource clazz, Block block, MethodInvocation mi) {
+ List args = mi.arguments();
+ if (args != null && args.size() > 1) {
+ Expression exp = (Expression) args.get(1);
+ return getLiteralValue(clazz, block, exp);
+ }
+ return null;
+ }
+
@SuppressWarnings("unchecked")
private static FieldSource<JavaClassSource> getField(JavaClassSource clazz, Block block, SimpleName ref) {
String fieldName = ref.getIdentifier();
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlRestDslParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlRestDslParserHelper.java
index 17c667b..0e83c1f 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlRestDslParserHelper.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlRestDslParserHelper.java
@@ -70,6 +70,56 @@ public final class CamelXmlRestDslParserHelper {
detail.setXmlDataFormat(extractAttribute(map, "xmlDataFormat"));
}
+ if ("componentProperty".equals(xmlNode.getNodeName())
+ && (xmlNode.getParentNode() != null && "restConfiguration".equals(xmlNode.getParentNode().getNodeName()))) {
+ NamedNodeMap map = xmlNode.getAttributes();
+ String key = extractAttribute(map, "key");
+ String value = extractAttribute(map, "value");
+ if (key != null && value != null) {
+ detail.addComponentProperty(key, value);
+ }
+ } else if ("endpointProperty".equals(xmlNode.getNodeName())
+ && (xmlNode.getParentNode() != null && "restConfiguration".equals(xmlNode.getParentNode().getNodeName()))) {
+ NamedNodeMap map = xmlNode.getAttributes();
+ String key = extractAttribute(map, "key");
+ String value = extractAttribute(map, "value");
+ if (key != null && value != null) {
+ detail.addEndpointProperty(key, value);
+ }
+ } else if ("consumerProperty".equals(xmlNode.getNodeName())
+ && (xmlNode.getParentNode() != null && "restConfiguration".equals(xmlNode.getParentNode().getNodeName()))) {
+ NamedNodeMap map = xmlNode.getAttributes();
+ String key = extractAttribute(map, "key");
+ String value = extractAttribute(map, "value");
+ if (key != null && value != null) {
+ detail.addConsumerProperty(key, value);
+ }
+ } else if ("dataFormatProperty".equals(xmlNode.getNodeName())
+ && (xmlNode.getParentNode() != null && "restConfiguration".equals(xmlNode.getParentNode().getNodeName()))) {
+ NamedNodeMap map = xmlNode.getAttributes();
+ String key = extractAttribute(map, "key");
+ String value = extractAttribute(map, "value");
+ if (key != null && value != null) {
+ detail.addDataFormatProperty(key, value);
+ }
+ } else if ("apiProperty".equals(xmlNode.getNodeName())
+ && (xmlNode.getParentNode() != null && "restConfiguration".equals(xmlNode.getParentNode().getNodeName()))) {
+ NamedNodeMap map = xmlNode.getAttributes();
+ String key = extractAttribute(map, "key");
+ String value = extractAttribute(map, "value");
+ if (key != null && value != null) {
+ detail.addApiProperty(key, value);
+ }
+ } else if ("corsHeaders".equals(xmlNode.getNodeName())
+ && (xmlNode.getParentNode() != null && "restConfiguration".equals(xmlNode.getParentNode().getNodeName()))) {
+ NamedNodeMap map = xmlNode.getAttributes();
+ String key = extractAttribute(map, "key");
+ String value = extractAttribute(map, "value");
+ if (key != null && value != null) {
+ detail.addCorsHeader(key, value);
+ }
+ }
+
// walk the rest of the children
NodeList children = xmlNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/RestConfigurationDetails.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/RestConfigurationDetails.java
index c38cb65..b1db413 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/RestConfigurationDetails.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/RestConfigurationDetails.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.parser.model;
+import java.util.LinkedHashMap;
import java.util.Map;
public class RestConfigurationDetails {
@@ -325,4 +326,46 @@ public class RestConfigurationDetails {
public void setCorsHeaders(Map<String, String> corsHeaders) {
this.corsHeaders = corsHeaders;
}
+
+ public void addComponentProperty(String key, String value) {
+ if (componentProperties == null) {
+ componentProperties = new LinkedHashMap<>();
+ }
+ componentProperties.put(key, value);
+ }
+
+ public void addEndpointProperty(String key, String value) {
+ if (endpointProperties == null) {
+ endpointProperties = new LinkedHashMap<>();
+ }
+ endpointProperties.put(key, value);
+ }
+
+ public void addConsumerProperty(String key, String value) {
+ if (consumerProperties == null) {
+ consumerProperties = new LinkedHashMap<>();
+ }
+ consumerProperties.put(key, value);
+ }
+
+ public void addDataFormatProperty(String key, String value) {
+ if (dataFormatProperties == null) {
+ dataFormatProperties = new LinkedHashMap<>();
+ }
+ dataFormatProperties.put(key, value);
+ }
+
+ public void addApiProperty(String key, String value) {
+ if (apiProperties == null) {
+ apiProperties = new LinkedHashMap<>();
+ }
+ apiProperties.put(key, value);
+ }
+
+ public void addCorsHeader(String key, String value) {
+ if (corsHeaders == null) {
+ corsHeaders = new LinkedHashMap<>();
+ }
+ corsHeaders.put(key, value);
+ }
}
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 26957fa..1d914af 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
@@ -33,7 +33,12 @@ public class MyRestDslRouteBuilder extends RouteBuilder {
.skipBindingOnErrorCode(true)
.scheme("https")
.hostNameResolver(RestHostNameResolver.allLocalIp)
- .bindingMode(RestBindingMode.json);
+ .bindingMode(RestBindingMode.json)
+ .componentProperty("foo", "123")
+ .endpointProperty("pretty", "false")
+ .consumerProperty("bar", "456")
+ .corsHeaderProperty("key1", "value1")
+ .corsHeaderProperty("key2", "value2");
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 34f1db0..dedf9ae 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
@@ -42,7 +42,7 @@ public class RoasterJavaRestDslTest extends CamelTestSupport {
assertEquals(1, list.size());
RestConfigurationDetails details = list.get(0);
assertEquals("27", details.getLineNumber());
- assertEquals("36", details.getLineNumberEnd());
+ assertEquals("41", 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());
@@ -56,6 +56,16 @@ public class RoasterJavaRestDslTest extends CamelTestSupport {
assertEquals("true", details.getSkipBindingOnErrorCode());
assertEquals("https", details.getScheme());
assertEquals("allLocalIp", details.getHostNameResolver());
+
+ assertEquals(1, details.getComponentProperties().size());
+ assertEquals("123", details.getComponentProperties().get("foo"));
+ assertEquals(1, details.getEndpointProperties().size());
+ assertEquals("false", details.getEndpointProperties().get("pretty"));
+ assertEquals(1, details.getEndpointProperties().size());
+ assertEquals("456", details.getConsumerProperties().get("bar"));
+ assertEquals(2, details.getCorsHeaders().size());
+ assertEquals("value1", details.getCorsHeaders().get("key1"));
+ assertEquals("value2", details.getCorsHeaders().get("key2"));
}
}
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlRestDslTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlRestDslTest.java
index 856c1e2..6acc2c6 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlRestDslTest.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlRestDslTest.java
@@ -23,15 +23,12 @@ import java.util.List;
import org.apache.camel.parser.XmlRestDslParser;
import org.apache.camel.parser.model.RestConfigurationDetails;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
public class XmlRestDslTest {
- private static final Logger LOG = LoggerFactory.getLogger(XmlParseTreeTest.class);
-
@Test
public void testXmlTree() throws Exception {
InputStream is = new FileInputStream("src/test/resources/org/apache/camel/parser/xml/myrest.xml");
@@ -42,11 +39,11 @@ public class XmlRestDslTest {
assertEquals(1, list.size());
RestConfigurationDetails details = list.get(0);
assertEquals("src/test/resources/org/apache/camel/camel/parser/xml/myrest.xml", details.getFileName());
- assertEquals(null, details.getMethodName());
- assertEquals(null, details.getClassName());
+ assertNull(details.getMethodName());
+ assertNull(details.getClassName());
assertEquals("29", details.getLineNumber());
- assertEquals("30", details.getLineNumberEnd());
+ assertEquals("35", details.getLineNumberEnd());
assertEquals("1234", details.getPort());
assertEquals("myapi", details.getContextPath());
assertEquals("jetty", details.getComponent());
@@ -58,6 +55,15 @@ public class XmlRestDslTest {
assertEquals("https", details.getScheme());
assertEquals("allLocalIp", details.getHostNameResolver());
+ assertEquals(1, details.getComponentProperties().size());
+ assertEquals("123", details.getComponentProperties().get("foo"));
+ assertEquals(1, details.getEndpointProperties().size());
+ assertEquals("false", details.getEndpointProperties().get("pretty"));
+ assertEquals(1, details.getEndpointProperties().size());
+ assertEquals("456", details.getConsumerProperties().get("bar"));
+ assertEquals(2, details.getCorsHeaders().size());
+ assertEquals("value1", details.getCorsHeaders().get("key1"));
+ assertEquals("value2", details.getCorsHeaders().get("key2"));
}
}
diff --git a/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myrest.xml b/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myrest.xml
index ef54669..370be9e 100644
--- a/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myrest.xml
+++ b/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myrest.xml
@@ -27,6 +27,11 @@
<restConfiguration component="jetty" port="1234" bindingMode="json" apiComponent="swagger" scheme="https"
contextPath="myapi" apiContextPath="myapi/swagger" hostNameResolver="allLocalIp" apiHost="localhost"
skipBindingOnErrorCode="true">
+ <componentProperty key="foo" value="123"/>
+ <endpointProperty key="pretty" value="false"/>
+ <consumerProperty key="bar" value="456"/>
+ <corsHeaders key="key1" value="value1"/>
+ <corsHeaders key="key2" value="value2"/>
</restConfiguration>
</camelContext>