Parse xml route tree in the same structure as in java
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/193c51d5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/193c51d5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/193c51d5 Branch: refs/heads/parser2 Commit: 193c51d585fd1a9288841682a066d0a1541d36a3 Parents: aed1326 Author: Claus Ibsen <[email protected]> Authored: Mon Oct 9 15:28:10 2017 +0200 Committer: Claus Ibsen <[email protected]> Committed: Mon Oct 9 15:28:10 2017 +0200 ---------------------------------------------------------------------- .../parser/helper/CamelXmlTreeParserHelper.java | 28 +++++++++++++++++--- .../camel/parser/xml/XmlParseTreeTest.java | 5 ++-- 2 files changed, 27 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/193c51d5/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java ---------------------------------------------------------------------- diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java index a9a75d9..6125304 100644 --- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java +++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java @@ -30,14 +30,36 @@ public final class CamelXmlTreeParserHelper { private CamelXmlTreeParserHelper() { } - public static List<CamelNodeDetails> parseCamelRouteTree(Node route, String routeId, CamelNodeDetails parent, + public static List<CamelNodeDetails> parseCamelRouteTree(Node xmlNode, String routeId, CamelNodeDetails route, String baseDir, String fullyQualifiedFileName) { CamelNodeDetailsFactory nodeFactory = CamelNodeDetailsFactory.newInstance(); List<CamelNodeDetails> answer = new ArrayList<>(); - walkXmlTree(nodeFactory, route, parent); - answer.add(parent); + walkXmlTree(nodeFactory, xmlNode, route); + + // now parse the route node and build the correct model/tree structure of the EIPs + // re-create factory as we rebuild the tree + nodeFactory = CamelNodeDetailsFactory.newInstance(); + CamelNodeDetails parent = route.getOutputs().get(0); + + // we dont want the route element and only start with from + for (int i = 0; i < route.getOutputs().size(); i++) { + CamelNodeDetails node = route.getOutputs().get(i); + String name = node.getName(); + + if ("from".equals(name)) { + CamelNodeDetails from = nodeFactory.copyNode(null, "from", node); + from.setFileName(fullyQualifiedFileName); + answer.add(from); + parent = from; + } else { + // add straight to parent + parent.addOutput(node); + node.setFileName(fullyQualifiedFileName); + } + } + return answer; } http://git-wip-us.apache.org/repos/asf/camel/blob/193c51d5/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java ---------------------------------------------------------------------- diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java index d65f287..3fc26ff 100644 --- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java +++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java @@ -42,7 +42,7 @@ public class XmlParseTreeTest { assertEquals(1, list.size()); CamelNodeDetails details = list.get(0); - assertEquals("org/apache/camel/camel/parser/xml/mycamel.xml", details.getFileName()); + assertEquals("src/test/resources/org/apache/camel/camel/parser/xml/mycamel.xml", details.getFileName()); assertEquals("myRoute", details.getRouteId()); assertEquals(null, details.getMethodName()); assertEquals(null, details.getClassName()); @@ -50,8 +50,7 @@ public class XmlParseTreeTest { String tree = details.dump(0); LOG.info("\n" + tree); - assertTrue(tree.contains("29\troute")); - assertTrue(tree.contains("32\t from")); + assertTrue(tree.contains("32\tfrom")); assertTrue(tree.contains("35\t transform")); assertTrue(tree.contains("36\t simple")); assertTrue(tree.contains("39\t to"));
