CAMEL-11296: camel-maven-plugin:validate - Allow to detect duplicate route ids
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/76ec4bb2 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/76ec4bb2 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/76ec4bb2 Branch: refs/heads/master Commit: 76ec4bb28d0498f370a667f57497520aa0d23217 Parents: a0126b4 Author: Claus Ibsen <davscl...@apache.org> Authored: Sun May 21 09:49:06 2017 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sun May 21 09:49:06 2017 +0200 ---------------------------------------------------------------------- .../parser/helper/CamelJavaParserHelper.java | 15 ++++++ .../parser/java/MyRouteDuplicateIdTest.java | 52 ++++++++++++++++++ ...DuplicateIdBuilderDCamelTestSupportTest.java | 55 ++++++++++++++++++++ .../camel/parser/xml/myduplicateroutes.xml | 2 +- 4 files changed, 123 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/76ec4bb2/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java ---------------------------------------------------------------------- diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java index a1f7b59..57c5102 100644 --- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java +++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java @@ -224,6 +224,21 @@ public final class CamelJavaParserHelper { String name = mi.getName().getIdentifier(); if (consumers) { + // include route id for consumers + if ("routeId".equals(name)) { + List args = mi.arguments(); + if (args != null) { + for (Object arg : args) { + if (isValidArgument(name, arg)) { + String routeId = getLiteralValue(clazz, block, (Expression) arg); + if (!Strings.isBlank(routeId)) { + int position = ((Expression) arg).getStartPosition(); + uris.add(new ParserResult(name, position, routeId)); + } + } + } + } + } if ("from".equals(name)) { List args = mi.arguments(); if (args != null) { http://git-wip-us.apache.org/repos/asf/camel/blob/76ec4bb2/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRouteDuplicateIdTest.java ---------------------------------------------------------------------- diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRouteDuplicateIdTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRouteDuplicateIdTest.java new file mode 100644 index 0000000..3f2081d --- /dev/null +++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyRouteDuplicateIdTest.java @@ -0,0 +1,52 @@ +/** + * 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.parser.java; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +public class MyRouteDuplicateIdTest extends CamelTestSupport { + + @Override + public boolean isUseRouteBuilder() { + return false; + } + + @Test + public void testFoo() throws Exception { + // noop + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:foo").routeId("foo") + .to("mock:foo"); + + from("direct:bar").routeId("bar") + .to("mock:bar"); + + // duplicate route id on purpose + from("direct:baz").routeId("foo") + .to("mock:baz"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/76ec4bb2/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterRouteDuplicateIdBuilderDCamelTestSupportTest.java ---------------------------------------------------------------------- diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterRouteDuplicateIdBuilderDCamelTestSupportTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterRouteDuplicateIdBuilderDCamelTestSupportTest.java new file mode 100644 index 0000000..2f37fb8 --- /dev/null +++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterRouteDuplicateIdBuilderDCamelTestSupportTest.java @@ -0,0 +1,55 @@ +/** + * 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.parser.java; + +import java.io.File; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.camel.parser.ParserResult; +import org.apache.camel.parser.helper.CamelJavaParserHelper; +import org.jboss.forge.roaster.Roaster; +import org.jboss.forge.roaster.model.source.JavaClassSource; +import org.jboss.forge.roaster.model.source.MethodSource; +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RoasterRouteDuplicateIdBuilderDCamelTestSupportTest { + + private static final Logger LOG = LoggerFactory.getLogger(RoasterRouteDuplicateIdBuilderDCamelTestSupportTest.class); + + @Test + public void parse() throws Exception { + JavaClassSource clazz = (JavaClassSource) Roaster.parse(new File("src/test/java/org/apache/camel/parser/java/MyRouteDuplicateIdTest.java")); + MethodSource<JavaClassSource> method = CamelJavaParserHelper.findConfigureMethod(clazz); + + List<ParserResult> list = CamelJavaParserHelper.parseCamelConsumerUris(method, true, false); + for (ParserResult result : list) { + LOG.info("Consumer: " + result.getElement()); + } + Assert.assertEquals(6, list.size()); + + list = list.stream().filter(r -> r.getNode().equals("routeId")).collect(Collectors.toList()); + Assert.assertEquals(3, list.size()); + Assert.assertEquals("foo", list.get(0).getElement()); + Assert.assertEquals("bar", list.get(1).getElement()); + Assert.assertEquals("foo", list.get(2).getElement()); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/76ec4bb2/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myduplicateroutes.xml ---------------------------------------------------------------------- diff --git a/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myduplicateroutes.xml b/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myduplicateroutes.xml index 6ea349a..60141a2 100644 --- a/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myduplicateroutes.xml +++ b/tooling/camel-route-parser/src/test/resources/org/apache/camel/parser/xml/myduplicateroutes.xml @@ -26,7 +26,7 @@ <from uri="timer:bar?period=5000"/> <to uri="log:bar"/> </route> - <route id="foo"> + <route id="foo"> <!-- duplicate route id on purpose --> <from uri="timer:baz?period=5000"/> <to uri="log:baz"/> </route>