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/08 09:08:35 UTC
[camel] 02/02: CAMEL-18080: camel-jbang - Run from clipboard
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 cfeffd58405740f74e646424eb13dd42163c723c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun May 8 11:08:11 2022 +0200
CAMEL-18080: camel-jbang - Run from clipboard
---
.../modules/ROOT/pages/camel-jbang.adoc | 31 ++++++++++++++++++++++
.../apache/camel/dsl/jbang/core/commands/Run.java | 23 +++++++++++++---
2 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
index 0d8914836f6..6023ffd6d22 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
@@ -268,6 +268,37 @@ Can be run with camel:
camel run joke.yaml
----
+=== Run from clipboard
+
+You can also run Camel routes directly from the OS clipboard. This allows to copy some code,
+and then quickly run this.
+
+The syntax is
+
+[source,bash]
+----
+camel run clipboard.<extension>
+----
+
+Where `<extension>` is what kind of file the content of the clipboard is, such as `java`, `xml`, or `yaml` etc.
+
+For example. you can copy this to your clipboard and then run it afterwards:
+
+[source,xml]
+----
+<route>
+ <from uri="timer:foo"/>
+ <log message="Hello World"/>
+</route>
+----
+
+[source,bash]
+----
+camel run clipboard.xml
+----
+
+
+
=== Using platform-http component
When a route is started from `platform-http` then CamelJBang will automatically include a VertX HTTP server
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 3b9e035bae4..6b3bb801cc6 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
@@ -16,6 +16,9 @@
*/
package org.apache.camel.dsl.jbang.core.commands;
+import java.awt.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -73,6 +76,7 @@ class Run implements Callable<Integer> {
= new String[] { "properties", "java", "groovy", "js", "jsh", "kts", "xml", "yaml" };
private static final String OPENAPI_GENERATED_FILE = ".camel-jbang/generated-openapi.yaml";
+ private static final String CLIPBOARD_GENERATED_FILE = ".camel-jbang/generated-clipboard";
private CamelContext context;
private File lockFile;
@@ -382,10 +386,23 @@ class Run implements Callable<Integer> {
if (files != null) {
for (String file : files) {
- if (skipFile(file)) {
+ if (file.startsWith("clipboard")) {
+ // run from clipboard
+ String ext = FileUtil.onlyExt(file, true);
+ if (ext == null || ext.isEmpty()) {
+ throw new IllegalArgumentException(
+ "When running from clipboard, an extension is required to let Camel know what kind of file to use");
+ }
+ Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
+ Object t = c.getData(DataFlavor.stringFlavor);
+ if (t != null) {
+ String fn = CLIPBOARD_GENERATED_FILE + "." + ext;
+ Files.write(Paths.get(fn), t.toString().getBytes(StandardCharsets.UTF_8));
+ file = "file:" + fn;
+ }
+ } else if (skipFile(file)) {
continue;
- }
- if (!knownFile(file)) {
+ } else if (!knownFile(file)) {
// non known files to be added on classpath
sjClasspathFiles.add(file);
continue;