This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 20a7b949cb5d camel-jbang - Add plugin for route-parser (#20591)
20a7b949cb5d is described below
commit 20a7b949cb5d72a31292fd64b70acc0e6ce0306e
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Dec 23 18:53:07 2025 +0100
camel-jbang - Add plugin for route-parser (#20591)
* camel-jbang - Add plugin for route-parser
* CAMEL-22799: camel-route-parser - Remove camell-cdi parsing
---
bom/camel-bom/pom.xml | 5 +
.../apache/camel/parser/RouteBuilderParser.java | 3 +-
.../camel/parser/helper/CamelJavaParserHelper.java | 8 +-
.../helper/CamelJavaRestDslParserHelper.java | 3 +-
.../parser/helper/CamelJavaTreeParserHelper.java | 7 +-
.../parser/model/CamelNodeDetailsFactory.java | 4 +-
.../camel/dsl/jbang/core/common/PluginType.java | 3 +-
.../jbang/core/commands/plugin/PluginGetTest.java | 22 ++--
.../{ => camel-jbang-plugin-route-parser}/pom.xml | 47 ++++---
.../camel-jbang-plugin-route-parser | 2 +
.../jbang/core/commands/parser/ParserPlugin.java | 25 ++--
.../core/commands/parser/RouteParserCommand.java | 143 +++++++++++++++++++++
dsl/camel-jbang/pom.xml | 1 +
parent/pom.xml | 5 +
14 files changed, 217 insertions(+), 61 deletions(-)
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index e399a6774f85..869f1c3f83db 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1222,6 +1222,11 @@
<artifactId>camel-jbang-plugin-kubernetes</artifactId>
<version>4.17.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-jbang-plugin-route-parser</artifactId>
+ <version>4.17.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jbang-plugin-test</artifactId>
diff --git
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
index f9843e3c961e..82971fdaf6f8 100644
---
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
+++
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
@@ -237,8 +237,7 @@ public final class RouteBuilderParser {
}
private static boolean isValid(Annotation<JavaClassSource> ann) {
- return "org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
- || "org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+ return
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName());
}
static List<MethodSource<JavaClassSource>> findAllConfigureMethods(
diff --git
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
index a5467100a034..c283bf32c4d1 100644
---
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
+++
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
@@ -348,10 +348,7 @@ public final class CamelJavaParserHelper {
FieldSource<JavaClassSource> field = ParserCommon.getField(clazz,
block, (SimpleName) arg);
if (field != null) {
// find the endpoint uri from the annotation
- AnnotationSource<JavaClassSource> annotation =
field.getAnnotation("org.apache.camel.cdi.Uri");
- if (annotation == null) {
- annotation =
field.getAnnotation("org.apache.camel.EndpointInject");
- }
+ AnnotationSource<JavaClassSource> annotation =
field.getAnnotation("org.apache.camel.EndpointInject");
if (annotation != null) {
Expression exp =
extractExpression(annotation.getInternal());
String uri = CamelJavaParserHelper.getLiteralValue(clazz,
block, exp);
@@ -527,8 +524,7 @@ public final class CamelJavaParserHelper {
// is the field annotated with a Camel endpoint
if (field.getAnnotations() != null) {
for (Annotation<JavaClassSource> ann :
field.getAnnotations()) {
- boolean valid =
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
- ||
"org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+ boolean valid =
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName());
if (valid) {
Expression exp =
extractExpression(ann.getInternal());
if (exp != null) {
diff --git
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
index 0b870e9e8854..a03de3df2e39 100644
---
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
+++
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
@@ -623,8 +623,7 @@ public final class CamelJavaRestDslParserHelper {
}
private static boolean isValid(Annotation<JavaClassSource> ann) {
- return "org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
- || "org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+ return
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName());
}
private static boolean isNumericOperator(JavaClassSource clazz, Block
block, Expression expression) {
diff --git
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaTreeParserHelper.java
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaTreeParserHelper.java
index 0c0599a1bb1c..457260319865 100644
---
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaTreeParserHelper.java
+++
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaTreeParserHelper.java
@@ -270,10 +270,6 @@ public final class CamelJavaTreeParserHelper {
return node;
}
- /**
- * @deprecated currently not in use
- */
- @Deprecated
public static String getLiteralValue(JavaClassSource clazz, Block block,
Expression expression) {
// unwrap parenthesis
if (expression instanceof ParenthesizedExpression) {
@@ -310,8 +306,7 @@ public final class CamelJavaTreeParserHelper {
// is the field annotated with a Camel endpoint
if (field.getAnnotations() != null) {
for (Annotation<JavaClassSource> ann :
field.getAnnotations()) {
- boolean valid =
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
- ||
"org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+ boolean valid =
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName());
if (valid) {
Expression exp = (Expression) ann.getInternal();
if (exp instanceof SingleMemberAnnotation) {
diff --git
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
index e6ec6bdaf432..0e51603ebe6e 100644
---
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
+++
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
@@ -31,7 +31,7 @@ public final class CamelNodeDetailsFactory {
return new CamelNodeDetails(parent, name, ++order);
}
- public CamelNodeDetails copyNode(CamelNodeDetails parent, String name,
CamelNodeDetails copoy) {
- return new CamelNodeDetails(parent, name, ++order, copoy);
+ public CamelNodeDetails copyNode(CamelNodeDetails parent, String name,
CamelNodeDetails copy) {
+ return new CamelNodeDetails(parent, name, ++order, copy);
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginType.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginType.java
index 98c0b081e897..5c952404d3b0 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginType.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginType.java
@@ -27,7 +27,8 @@ public enum PluginType {
KUBERNETES("kubernetes", "kubernetes", "Run Camel applications on
Kubernetes", "4.8.0", null),
GENERATE("generate", "generate", "Generate code such as DTOs", "4.8.0",
null),
EDIT("edit", "edit", "Edit Camel files with suggestions", "4.12.0", null),
- TEST("test", "test", "Manage tests for Camel applications", "4.14.0",
null);
+ TEST("test", "test", "Manage tests for Camel applications", "4.14.0",
null),
+ ROUTE_PARSER("route-parser", "route-parser", "Parses Java route and dumps
route structure", "4.17.0", null);
private final String name;
private final String command;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
index 0bd83461a02a..887c0af4a879 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/plugin/PluginGetTest.java
@@ -70,12 +70,12 @@ class PluginGetTest extends CamelCommandBaseTestSupport {
command.doCall();
List<String> output = printer.getLines();
- Assertions.assertEquals(7, output.size());
+ Assertions.assertEquals(8, output.size());
Assertions.assertEquals("Supported plugins:", output.get(0));
- Assertions.assertEquals("NAME COMMAND DEPENDENCY
DESCRIPTION",
+ Assertions.assertEquals("NAME COMMAND DEPENDENCY
DESCRIPTION",
output.get(2));
Assertions.assertEquals(
- "kubernetes kubernetes
org.apache.camel:camel-jbang-plugin-kubernetes %s"
+ "kubernetes kubernetes
org.apache.camel:camel-jbang-plugin-kubernetes %s"
.formatted(PluginType.KUBERNETES.getDescription()),
output.get(3));
}
@@ -120,31 +120,35 @@ class PluginGetTest extends CamelCommandBaseTestSupport {
command.doCall();
List<String> output = printer.getLines();
- Assertions.assertEquals(10, output.size());
+ Assertions.assertEquals(11, output.size());
Assertions.assertEquals("NAME COMMAND DEPENDENCY
DESCRIPTION", output.get(0));
Assertions.assertEquals(
"foo-plugin foo org.apache.camel:foo-plugin:1.0.0
Plugin foo-plugin called with command foo",
output.get(1));
Assertions.assertEquals("Supported plugins:", output.get(3));
- Assertions.assertEquals("NAME COMMAND DEPENDENCY
DESCRIPTION",
+ Assertions.assertEquals("NAME COMMAND DEPENDENCY
DESCRIPTION",
output.get(5));
Assertions.assertEquals(
- "kubernetes kubernetes
org.apache.camel:camel-jbang-plugin-kubernetes %s"
+ "kubernetes kubernetes
org.apache.camel:camel-jbang-plugin-kubernetes %s"
.formatted(PluginType.KUBERNETES.getDescription()),
output.get(6));
Assertions.assertEquals(
- "generate generate
org.apache.camel:camel-jbang-plugin-generate %s"
+ "generate generate
org.apache.camel:camel-jbang-plugin-generate %s"
.formatted(PluginType.GENERATE.getDescription()),
output.get(7));
Assertions.assertEquals(
- "edit edit
org.apache.camel:camel-jbang-plugin-edit %s"
+ "edit edit
org.apache.camel:camel-jbang-plugin-edit %s"
.formatted(PluginType.EDIT.getDescription()),
output.get(8));
Assertions.assertEquals(
- "test test
org.apache.camel:camel-jbang-plugin-test %s"
+ "test test
org.apache.camel:camel-jbang-plugin-test %s"
.formatted(PluginType.TEST.getDescription()),
output.get(9));
+ Assertions.assertEquals(
+ "route-parser route-parser
org.apache.camel:camel-jbang-plugin-route-parser %s"
+ .formatted(PluginType.ROUTE_PARSER.getDescription()),
+ output.get(10));
}
}
diff --git a/dsl/camel-jbang/pom.xml
b/dsl/camel-jbang/camel-jbang-plugin-route-parser/pom.xml
similarity index 56%
copy from dsl/camel-jbang/pom.xml
copy to dsl/camel-jbang/camel-jbang-plugin-route-parser/pom.xml
index d7bbf0cf4cbb..e6fed824f978 100644
--- a/dsl/camel-jbang/pom.xml
+++ b/dsl/camel-jbang/camel-jbang-plugin-route-parser/pom.xml
@@ -18,30 +18,41 @@
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.camel</groupId>
- <artifactId>dsl</artifactId>
+ <artifactId>camel-jbang-parent</artifactId>
<version>4.17.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
- <artifactId>camel-jbang-parent</artifactId>
- <packaging>pom</packaging>
-
- <name>Camel :: JBang :: Parent</name>
- <description>Camel JBang Modules (parent)</description>
-
- <modules>
- <module>camel-jbang-console</module>
- <module>camel-jbang-core</module>
- <module>camel-jbang-main</module>
- <module>camel-jbang-plugin-generate</module>
- <module>camel-jbang-plugin-edit</module>
- <module>camel-jbang-plugin-kubernetes</module>
- <module>camel-jbang-plugin-test</module>
- <module>camel-jbang-it</module>
- <module>camel-launcher</module>
- </modules>
+ <artifactId>camel-jbang-plugin-route-parser</artifactId>
+
+ <name>Camel :: JBang :: Plugin :: Route Parser</name>
+ <description>Camel JBang Edit Route Parser</description>
+
+ <properties>
+ <firstVersion>4.17.0</firstVersion>
+ <label>jbang</label>
+ <supportLevel>Preview</supportLevel>
+ <camel-prepare-component>false</camel-prepare-component>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-jbang-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-route-parser</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.forge.roaster</groupId>
+ <artifactId>roaster-jdt</artifactId>
+ <version>${roaster-version}</version>
+ </dependency>
+ </dependencies>
</project>
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/generated/resources/META-INF/services/org/apache/camel/camel-jbang-plugin/camel-jbang-plugin-route-parser
b/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/generated/resources/META-INF/services/org/apache/camel/camel-jbang-plugin/camel-jbang-plugin-route-parser
new file mode 100644
index 000000000000..f89c31e6b57d
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/generated/resources/META-INF/services/org/apache/camel/camel-jbang-plugin/camel-jbang-plugin-route-parser
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.dsl.jbang.core.commands.parser.ParserPlugin
diff --git
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
b/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/main/java/org/apache/camel/dsl/jbang/core/commands/parser/ParserPlugin.java
similarity index 58%
copy from
catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
copy to
dsl/camel-jbang/camel-jbang-plugin-route-parser/src/main/java/org/apache/camel/dsl/jbang/core/commands/parser/ParserPlugin.java
index e6ec6bdaf432..c6608535b448 100644
---
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetailsFactory.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/main/java/org/apache/camel/dsl/jbang/core/commands/parser/ParserPlugin.java
@@ -14,24 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.parser.model;
+package org.apache.camel.dsl.jbang.core.commands.parser;
-public final class CamelNodeDetailsFactory {
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.CamelJBangPlugin;
+import org.apache.camel.dsl.jbang.core.common.Plugin;
+import picocli.CommandLine;
- private int order;
+@CamelJBangPlugin(name = "camel-jbang-plugin-route-parser", firstVersion =
"4.17.0")
+public class ParserPlugin implements Plugin {
- private CamelNodeDetailsFactory() {
+ @Override
+ public void customize(CommandLine commandLine, CamelJBangMain main) {
+ commandLine.addSubcommand("route-parser", new
RouteParserCommand(main));
}
- public static CamelNodeDetailsFactory newInstance() {
- return new CamelNodeDetailsFactory();
- }
-
- public CamelNodeDetails newNode(CamelNodeDetails parent, String name) {
- return new CamelNodeDetails(parent, name, ++order);
- }
-
- public CamelNodeDetails copyNode(CamelNodeDetails parent, String name,
CamelNodeDetails copoy) {
- return new CamelNodeDetails(parent, name, ++order, copoy);
- }
}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/main/java/org/apache/camel/dsl/jbang/core/commands/parser/RouteParserCommand.java
b/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/main/java/org/apache/camel/dsl/jbang/core/commands/parser/RouteParserCommand.java
new file mode 100644
index 000000000000..8dc73960f8bd
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-route-parser/src/main/java/org/apache/camel/dsl/jbang/core/commands/parser/RouteParserCommand.java
@@ -0,0 +1,143 @@
+/*
+ * 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.dsl.jbang.core.commands.parser;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.commands.CommandHelper;
+import org.apache.camel.parser.RouteBuilderParser;
+import org.apache.camel.parser.model.CamelNodeDetails;
+import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.StopWatch;
+import org.fusesource.jansi.Ansi;
+import org.fusesource.jansi.AnsiConsole;
+import org.jboss.forge.roaster.Roaster;
+import org.jboss.forge.roaster.model.source.JavaClassSource;
+import picocli.CommandLine;
+
[email protected](name = "route-parser", description = "Parses Java route
and dumps route structure")
+public class RouteParserCommand extends CamelCommand {
+
+ @CommandLine.Parameters(description = { "The Camel RouteBuilder Java
source files to parse." },
+ arity = "1..9",
+ paramLabel = "<files>",
+ parameterConsumer = FilesConsumer.class)
+ Path[] filePaths;
+ List<String> files = new ArrayList<>();
+
+ @CommandLine.Option(names = { "--raw" },
+ description = "To output raw without metadata")
+ boolean raw;
+
+ @CommandLine.Option(names = { "--watch" },
+ description = "Execute periodically and showing output
fullscreen")
+ boolean watch;
+
+ private CommandHelper.ReadConsoleTask waitUserTask;
+
+ public RouteParserCommand(CamelJBangMain main) {
+ super(main);
+ }
+
+ @Override
+ public Integer doCall() throws Exception {
+ int exit;
+ final AtomicBoolean running = new AtomicBoolean(true);
+ if (watch) {
+ Thread t = new Thread(() -> {
+ waitUserTask = new CommandHelper.ReadConsoleTask(() ->
running.set(false));
+ waitUserTask.run();
+ }, "WaitForUser");
+ t.start();
+ do {
+ exit = doWatchCall();
+ if (exit == 0) {
+ // use 2-sec delay in watch mode
+ try {
+ StopWatch watch = new StopWatch();
+ while (running.get() && watch.taken() < 2000) {
+ Thread.sleep(100);
+ }
+ } catch (Exception e) {
+ running.set(false);
+ }
+ }
+ } while (exit == 0 && running.get());
+ } else {
+ exit = doWatchCall();
+ }
+ return exit;
+ }
+
+ protected Integer doWatchCall() throws Exception {
+ for (String file : files) {
+ Integer code = doDumpFile(file);
+ if (code != 0) {
+ return code;
+ }
+ }
+ return 0;
+ }
+
+ protected Integer doDumpFile(String file) throws Exception {
+ File f = new File(file);
+ if (!f.exists() || !f.isFile()) {
+ printer().printErr("File not found: " + file);
+ return -1;
+ }
+ String ext = FileUtil.onlyExt(file);
+ if (!"java".equals(ext)) {
+ printer().printErr("Only .java source file is supported");
+ return -1;
+ }
+ JavaClassSource clazz = (JavaClassSource) Roaster.parse(f);
+ List<CamelNodeDetails> list =
RouteBuilderParser.parseRouteBuilderTree(clazz, file, true);
+ if (watch) {
+ clearScreen();
+ }
+ for (var route : list) {
+ printer().println();
+ if (!raw) {
+ printer().printf("Source: %s%n", route.getFileName());
+
printer().println("--------------------------------------------------------------------------------");
+ }
+ String tree = route.dump(0);
+ printer().println(tree);
+ printer().println();
+ }
+ return 0;
+ }
+
+ protected void clearScreen() {
+ AnsiConsole.out().print(Ansi.ansi().eraseScreen().cursor(1, 1));
+ }
+
+ static class FilesConsumer extends
CamelCommand.ParameterConsumer<RouteParserCommand> {
+ protected void doConsumeParameters(Stack<String> args,
RouteParserCommand cmd) {
+ String arg = args.pop();
+ cmd.files.add(arg);
+ }
+ }
+
+}
diff --git a/dsl/camel-jbang/pom.xml b/dsl/camel-jbang/pom.xml
index d7bbf0cf4cbb..fea393926c71 100644
--- a/dsl/camel-jbang/pom.xml
+++ b/dsl/camel-jbang/pom.xml
@@ -40,6 +40,7 @@
<module>camel-jbang-plugin-generate</module>
<module>camel-jbang-plugin-edit</module>
<module>camel-jbang-plugin-kubernetes</module>
+ <module>camel-jbang-plugin-route-parser</module>
<module>camel-jbang-plugin-test</module>
<module>camel-jbang-it</module>
<module>camel-launcher</module>
diff --git a/parent/pom.xml b/parent/pom.xml
index dfd4138ba96f..7ede630cfd8f 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -3050,6 +3050,11 @@
<artifactId>camel-jbang-plugin-kubernetes</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-jbang-plugin-route-parser</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jbang-plugin-test</artifactId>