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 2022/08/26 10:37:03 UTC

[camel] 01/04: CAMEL-18425: camel-cli - Make regular Camel applications work with Camel CLI

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

commit 19b05ef70b08954c5ca8b3d321b77407e2f3e89e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Aug 26 06:36:07 2022 +0200

    CAMEL-18425: camel-cli - Make regular Camel applications work with Camel CLI
---
 .../camel/impl/engine/SimpleCamelContext.java      |  6 +++
 .../camel/cli/connector/LocalCliConnector.java     |  2 -
 .../core/commands/process/CamelContextStatus.java  |  4 +-
 .../core/commands/process/ProcessBaseCommand.java  | 46 ++++++++++++++--------
 4 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 0ea1c69b103..81ec3100073 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -412,6 +412,12 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected CliConnectorFactory createCliConnectorFactory() {
+        // lookup in registry first
+        CliConnectorFactory ccf = getCamelContextReference().getRegistry().findSingleByType(CliConnectorFactory.class);
+        if (ccf != null) {
+            return ccf;
+        }
+        // then classpath scanning
         Optional<CliConnectorFactory> result = ResolverHelper.resolveService(
                 getCamelContextReference(),
                 getBootstrapFactoryFinder(),
diff --git a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
index affeb5dc93a..60500113d95 100644
--- a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
+++ b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
@@ -96,8 +96,6 @@ public class LocalCliConnector extends ServiceSupport implements CamelContextAwa
                 platform = "CDI";
             } else if (sn.contains("kamelet") || camelContext.getName().equals("CamelJBang")) {
                 platform = "JBang";
-                // dev.jbang.BuildConfig
-                // dev.jbang.util.getJBangVersion
             } else {
                 platform = "Camel";
             }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
index 73fba159cf0..64edfda5faf 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
@@ -83,7 +83,7 @@ public class CamelContextStatus extends ProcessBaseCommand {
                         if (root != null) {
                             JsonObject runtime = (JsonObject) root.get("runtime");
                             row.platform = runtime != null ? runtime.getString("platform") : null;
-                            row.platformVersion = runtime != null ? runtime.getString("platformVersion") : null;
+                            row.platformVersion = runtime != null ? runtime.getString("version") : null;
                             JsonObject context = (JsonObject) root.get("context");
                             row.state = context.getString("state").toLowerCase(Locale.ROOT);
                             row.camelVersion = context.getString("version");
@@ -126,7 +126,7 @@ public class CamelContextStatus extends ProcessBaseCommand {
 
     private String getPlatform(Row r) {
         if (r.platformVersion != null) {
-            return r.platform + " v" + r.platformVersion + ")";
+            return r.platform + " v" + r.platformVersion;
         } else {
             return r.platform;
         }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java
index 8181e14150a..14075f5f92e 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java
@@ -70,36 +70,50 @@ abstract class ProcessBaseCommand extends CamelCommand {
     static String extractName(ProcessHandle ph) {
         String cl = ph.info().commandLine().orElse("");
 
+        // TODO: parent/child when mvn spring-boot:run etc
+
+        // try first camel-jbang
         String name = extractCamelJBangName(cl);
-        if (name == null) {
-            name = extractCamelMavenName(cl);
+        if (name != null) {
+            return name;
         }
-        if (name == null) {
-            name = extractCamelMain(cl);
+
+        // this may be a maven plugin run, so check that first
+        String mvn = extractMavenPluginName(cl);
+        if (mvn == null && ph.parent().isPresent()) {
+            // try parent as it may spawn a sub process
+            String clp = ph.parent().get().info().commandLine().orElse("");
+            mvn = extractMavenPluginName(clp);
         }
 
+        name = extractCamelName(cl, mvn);
         return name == null ? "" : name;
     }
 
-    private static String extractCamelMavenName(String cl) {
-        String name = StringHelper.before(cl, " camel:run");
+    private static String extractMavenPluginName(String cl) {
+        String name = StringHelper.after(cl, "org.codehaus.plexus.classworlds.launcher.Launcher");
         if (name != null) {
-            if (name.contains("org.codehaus.plexus.classworlds.launcher.Launcher")) {
-                return "mvn camel:run";
-            }
+            return name.trim();
         }
-
         return null;
     }
 
-    private static String extractCamelMain(String cl) {
+    private static String extractCamelName(String cl, String mvn) {
         if (cl != null) {
-            if (cl.contains("camel-main")) {
+            if (cl.contains("camel-spring-boot") && mvn != null) {
+                return mvn;
+            } else if (cl.contains("camel-quarkus") && mvn != null) {
+                return mvn;
+            } else if ((cl.contains("camel-main") || cl.contains("camel-core")) && mvn != null) {
+                return mvn;
+            } else if (cl.contains("camel-core") && mvn == null) {
                 int pos = cl.lastIndexOf(" ");
-                String after = cl.substring(pos);
-                after = after.trim();
-                if (after.matches("[\\w|.]+")) {
-                    return "camel-main";
+                if (pos != -1) {
+                    String after = cl.substring(pos);
+                    after = after.trim();
+                    if (after.matches("[\\w|.]+")) {
+                        return cl.contains("camel-main") ? "camel-main" : "camel-core";
+                    }
                 }
             }
         }