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 2017/10/08 12:02:45 UTC
[02/13] camel git commit: Camel java dsl parser prototype
Camel java dsl parser prototype
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3d3bc4bf
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3d3bc4bf
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3d3bc4bf
Branch: refs/heads/parser2
Commit: 3d3bc4bf35fa222ff78eb3711734caf12430577d
Parents: d884404
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Oct 7 16:59:27 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Oct 7 16:59:27 2017 +0200
----------------------------------------------------------------------
.../mbean/RouteCoverageXmlParser.java | 2 ++
.../helper/AdvancedCamelJavaParserHelper.java | 31 +++++++++---------
.../camel/parser/model/CamelNodeDetails.java | 12 +++++--
.../parser/model/CamelNodeDetailsFactory.java | 33 ++++++++++++++++++++
.../parser/java/MyJavaDslRouteBuilder.java | 6 ++--
.../camel/parser/java/RoasterJavaDslTest.java | 19 ++++++++++-
6 files changed, 83 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/3d3bc4bf/camel-core/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java b/camel-core/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java
index 4633ece..c260e67 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java
@@ -104,6 +104,8 @@ public final class RouteCoverageXmlParser {
el.setAttribute("exchangesTotal", "" + total);
long totalTime = processor.getTotalProcessingTime();
el.setAttribute("totalProcessingTime", "" + totalTime);
+ int index = processor.getIndex();
+ el.setAttribute("index", "" + index);
}
}
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/camel/blob/3d3bc4bf/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/AdvancedCamelJavaParserHelper.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/AdvancedCamelJavaParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/AdvancedCamelJavaParserHelper.java
index 1a5fa0b..c264930 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/AdvancedCamelJavaParserHelper.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/AdvancedCamelJavaParserHelper.java
@@ -24,6 +24,7 @@ import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.catalog.JSonSchemaHelper;
import org.apache.camel.parser.RouteBuilderParser;
import org.apache.camel.parser.model.CamelNodeDetails;
+import org.apache.camel.parser.model.CamelNodeDetailsFactory;
import org.apache.camel.parser.roaster.StatementFieldSource;
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ASTNode;
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
@@ -63,8 +64,9 @@ public final class AdvancedCamelJavaParserHelper {
public CamelNodeDetails parseCamelRoute(JavaClassSource clazz, MethodSource<JavaClassSource> method) {
// find any from which is the start of the route
+ CamelNodeDetailsFactory nodeFactory = CamelNodeDetailsFactory.newInstance();
- CamelNodeDetails route = new CamelNodeDetails(null, "route");
+ CamelNodeDetails route = nodeFactory.newNode(null, "route");
if (method != null) {
MethodDeclaration md = (MethodDeclaration) method.getInternal();
@@ -75,8 +77,7 @@ public final class AdvancedCamelJavaParserHelper {
if (statement instanceof ExpressionStatement) {
ExpressionStatement es = (ExpressionStatement) statement;
Expression exp = es.getExpression();
-
- parseExpression(clazz, block, exp, route);
+ parseExpression(nodeFactory, clazz, block, exp, route);
}
}
}
@@ -85,7 +86,7 @@ public final class AdvancedCamelJavaParserHelper {
// now parse the route node and build a tree structure of the EIPs
String root = route.getOutputs().get(0).getName();
- CamelNodeDetails answer = new CamelNodeDetails(null, root);
+ CamelNodeDetails answer = nodeFactory.newNode(null, root);
CamelNodeDetails parent = answer;
// TODO: use camel catalog to know about these types and when to do what
@@ -96,17 +97,17 @@ public final class AdvancedCamelJavaParserHelper {
// special for some EIPs
if ("choice".equals(name)) {
- CamelNodeDetails output = new CamelNodeDetails(parent, name);
+ CamelNodeDetails output = nodeFactory.newNode(parent, name);
parent.addOutput(output);
parent = output;
} else if ("when".equals(name)) {
parent = grandParent(parent, "choice");
- CamelNodeDetails output = new CamelNodeDetails(parent, name);
+ CamelNodeDetails output = nodeFactory.newNode(parent, name);
parent.addOutput(output);
parent = output;
} else if ("otherwise".equals(name)) {
parent = grandParent(parent, "choice");
- CamelNodeDetails output = new CamelNodeDetails(parent, name);
+ CamelNodeDetails output = nodeFactory.newNode(parent, name);
parent.addOutput(output);
parent = output;
} else if ("end".equals(name) || "endChoice".equals(name) || "endDoTry".equals(name)) {
@@ -120,12 +121,12 @@ public final class AdvancedCamelJavaParserHelper {
boolean hasOutput = hasOutput(name);
if (hasOutput) {
// has output so add as new child node
- CamelNodeDetails output = new CamelNodeDetails(parent, name);
+ CamelNodeDetails output = nodeFactory.newNode(parent, name);
parent.addOutput(output);
parent = output;
} else {
// add straight to itself
- CamelNodeDetails output = new CamelNodeDetails(parent, name);
+ CamelNodeDetails output = nodeFactory.newNode(parent, name);
parent.addOutput(output);
}
}
@@ -160,20 +161,22 @@ public final class AdvancedCamelJavaParserHelper {
}
}
- private void parseExpression(JavaClassSource clazz, Block block, Expression exp, CamelNodeDetails node) {
+ private void parseExpression(CamelNodeDetailsFactory nodeFactory,
+ JavaClassSource clazz, Block block, Expression exp, CamelNodeDetails node) {
if (exp == null) {
return;
}
if (exp instanceof MethodInvocation) {
MethodInvocation mi = (MethodInvocation) exp;
- node = doParseCamelModels(clazz, block, mi, node);
+ node = doParseCamelModels(nodeFactory, clazz, block, mi, node);
// if the method was called on another method, then recursive
exp = mi.getExpression();
- parseExpression(clazz, block, exp, node);
+ parseExpression(nodeFactory, clazz, block, exp, node);
}
}
- private CamelNodeDetails doParseCamelModels(JavaClassSource clazz, Block block, MethodInvocation mi, CamelNodeDetails node) {
+ private CamelNodeDetails doParseCamelModels(CamelNodeDetailsFactory nodeFactory,
+ JavaClassSource clazz, Block block, MethodInvocation mi, CamelNodeDetails node) {
String name = mi.getName().getIdentifier();
// special for Java DSL having some endXXX
@@ -181,7 +184,7 @@ public final class AdvancedCamelJavaParserHelper {
// only include if its a known Camel model
if (isEnd || camelCatalog.findModelNames().contains(name)) {
- CamelNodeDetails newNode = new CamelNodeDetails(node, name);
+ CamelNodeDetails newNode = nodeFactory.newNode(node, name);
node.addPreliminaryOutput(newNode);
return node;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/3d3bc4bf/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java
index 76c3bba..9712347 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java
@@ -21,13 +21,15 @@ import java.util.List;
public class CamelNodeDetails {
+ private final CamelNodeDetails parent;
private final String name;
+ private final int order;
private List<CamelNodeDetails> outputs;
- private CamelNodeDetails parent;
- public CamelNodeDetails(CamelNodeDetails parent, String name) {
+ public CamelNodeDetails(CamelNodeDetails parent, String name, int order) {
this.parent = parent;
this.name = name;
+ this.order = order;
}
public void addPreliminaryOutput(CamelNodeDetails output) {
@@ -53,6 +55,10 @@ public class CamelNodeDetails {
return name;
}
+ public int getOrder() {
+ return order;
+ }
+
public List<CamelNodeDetails> getOutputs() {
return outputs;
}
@@ -63,6 +69,8 @@ public class CamelNodeDetails {
public String dump(int level) {
StringBuilder sb = new StringBuilder();
+ sb.append(order);
+ sb.append("\t");
sb.append(padString(level));
sb.append(name);
if (outputs != null) {
http://git-wip-us.apache.org/repos/asf/camel/blob/3d3bc4bf/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
new file mode 100644
index 0000000..502c2c7
--- /dev/null
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
@@ -0,0 +1,33 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.parser.model;
+
+public class CamelNodeDetailsFactory {
+
+ private int order;
+
+ private CamelNodeDetailsFactory() {
+ }
+
+ public static CamelNodeDetailsFactory newInstance() {
+ return new CamelNodeDetailsFactory();
+ }
+
+ public CamelNodeDetails newNode(CamelNodeDetails parent, String name) {
+ return new CamelNodeDetails(parent, name, ++order);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/3d3bc4bf/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyJavaDslRouteBuilder.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyJavaDslRouteBuilder.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyJavaDslRouteBuilder.java
index 91ff71f..1a98ab8 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyJavaDslRouteBuilder.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyJavaDslRouteBuilder.java
@@ -22,7 +22,7 @@ public class MyJavaDslRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
- from("timer:foo").routeId("bar")
+ from("direct:start").routeId("bar")
.log("I was here")
.setHeader("foo", constant("123"))
.choice()
@@ -31,8 +31,8 @@ public class MyJavaDslRouteBuilder extends RouteBuilder {
.when(header("bar"))
.toD("log:b")
.otherwise()
- .wireTap("mock:tap")
+ .log("none")
.end()
- .to("log:b");
+ .to("mock:result");
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/3d3bc4bf/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaDslTest.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaDslTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaDslTest.java
index 841c608..48e3a3c 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaDslTest.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterJavaDslTest.java
@@ -20,16 +20,22 @@ import java.io.File;
import org.apache.camel.parser.AdvancedRouteBuilderParser;
import org.apache.camel.parser.model.CamelNodeDetails;
+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 RoasterJavaDslTest {
+public class RoasterJavaDslTest extends CamelTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(RoasterJavaDslTest.class);
+ @Override
+ public boolean isDumpRouteCoverage() {
+ return true;
+ }
+
@Test
public void parse() throws Exception {
JavaClassSource clazz = (JavaClassSource) Roaster.parse(new File("src/test/java/org/apache/camel/parser/java/MyJavaDslRouteBuilder.java"));
@@ -41,4 +47,15 @@ public class RoasterJavaDslTest {
System.out.println(tree);
}
+ @Test
+ public void testRouteCoverage() throws Exception {
+ context.addRoutes(new MyJavaDslRouteBuilder());
+
+ getMockEndpoint("mock:result").expectedMessageCount(1);
+
+ template.sendBody("direct:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
}