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/05/24 05:32:56 UTC

[camel] branch main updated: CAMEL-18139: camel-jbang - Run from clipboard does not work for java

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 dce91e64366 CAMEL-18139: camel-jbang - Run from clipboard does not work for java
dce91e64366 is described below

commit dce91e6436669552a806409c3482b93be80dda7a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue May 24 07:32:40 2022 +0200

    CAMEL-18139: camel-jbang - Run from clipboard does not work for java
---
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 32 ++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 8576f6cd5d5..cb8a66d406c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -40,6 +40,8 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -78,6 +80,12 @@ class Run extends CamelCommand {
     private static final String OPENAPI_GENERATED_FILE = ".camel-jbang/generated-openapi.yaml";
     private static final String CLIPBOARD_GENERATED_FILE = ".camel-jbang/generated-clipboard";
 
+    private static final Pattern PACKAGE_PATTERN = Pattern.compile(
+            "^\\s*package\\s+([a-zA-Z][\\.\\w]*)\\s*;.*$", Pattern.MULTILINE);
+
+    private static final Pattern CLASS_PATTERN = Pattern.compile(
+            "^\\s*public class\\s+([a-zA-Z0-9]*)[\\s+|;].*$", Pattern.MULTILINE);
+
     private CamelContext context;
     private File lockFile;
     private ScheduledExecutorService executor;
@@ -596,6 +604,14 @@ class Run extends CamelCommand {
         Object t = c.getData(DataFlavor.stringFlavor);
         if (t != null) {
             String fn = CLIPBOARD_GENERATED_FILE + "." + ext;
+            if ("java".equals(ext)) {
+                String fqn = determineClassName(t.toString());
+                if (fqn == null) {
+                    throw new IllegalArgumentException(
+                            "Cannot determine the Java class name from the source in the clipboard");
+                }
+                fn = fqn + ".java";
+            }
             Files.write(Paths.get(fn), t.toString().getBytes(StandardCharsets.UTF_8));
             file = "file:" + fn;
         }
@@ -761,4 +777,20 @@ class Run extends CamelCommand {
         }
     }
 
+    private static String determineClassName(String content) {
+        Matcher matcher = PACKAGE_PATTERN.matcher(content);
+        String pn = matcher.find() ? matcher.group(1) : null;
+
+        matcher = CLASS_PATTERN.matcher(content);
+        String cn = matcher.find() ? matcher.group(1) : null;
+
+        String fqn;
+        if (pn != null) {
+            fqn = pn + "." + cn;
+        } else {
+            fqn = cn;
+        }
+        return fqn;
+    }
+
 }