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 <claus.ib...@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; + } + }