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/24 10:45:58 UTC

[camel] branch main updated: CANEL-18426: camel-jbang - Export - Add support for local-kamelets-dir

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 401ce291ee1 CANEL-18426: camel-jbang - Export - Add support for local-kamelets-dir
401ce291ee1 is described below

commit 401ce291ee1ddf9f5c07d97e263381c3804bc3d2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 24 12:45:34 2022 +0200

    CANEL-18426: camel-jbang - Export - Add support for local-kamelets-dir
---
 .../modules/ROOT/pages/camel-jbang.adoc            |  3 ++
 .../camel/dsl/jbang/core/commands/Export.java      |  2 ++
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 33 +++++++++++++++++++---
 .../apache/camel/dsl/jbang/core/commands/Run.java  |  4 +--
 4 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
index 8081bb7f6d6..2983c4a80e1 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
@@ -980,6 +980,9 @@ The follow options related to _exporting_, can be configured in `application.pro
 |`camel.jbang.kameletsVersion`
 |Apache Camel Kamelets version
 
+|`camel.jbang.localKameletDir`
+|Local directory for loading Kamelets
+
 |`camel.jbang.springBootVersion`
 |Spring Boot version
 
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
index 9566f7adeca..12d95034297 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
@@ -47,6 +47,7 @@ class Export extends ExportBaseCommand {
             // allow configuring versions from profile
             this.javaVersion = prop.getProperty("camel.jbang.javaVersion", this.javaVersion);
             this.kameletsVersion = prop.getProperty("camel.jbang.kameletsVersion", this.kameletsVersion);
+            this.localKameletDir = prop.getProperty("camel.jbang.localKameletDir", this.localKameletDir);
             this.quarkusGroupId = prop.getProperty("camel.jbang.quarkusGroupId", this.quarkusGroupId);
             this.quarkusArtifactId = prop.getProperty("camel.jbang.quarkusArtifactId", this.quarkusArtifactId);
             this.quarkusVersion = prop.getProperty("camel.jbang.quarkusVersion", this.quarkusVersion);
@@ -87,6 +88,7 @@ class Export extends ExportBaseCommand {
         cmd.fresh = this.fresh;
         cmd.javaVersion = this.javaVersion;
         cmd.kameletsVersion = this.kameletsVersion;
+        cmd.localKameletDir = this.localKameletDir;
         cmd.logging = this.logging;
         cmd.loggingLevel = this.loggingLevel;
         cmd.mainClassname = this.mainClassname;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 99b581b0231..39086f52361 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -51,7 +51,8 @@ abstract class ExportBaseCommand extends CamelCommand {
             "camel.main.routesIncludePattern",
             "camel.component.properties.location",
             "camel.component.kamelet.location",
-            "camel.jbang.classpathFiles"
+            "camel.jbang.classpathFiles",
+            "camel.jbang.localKameletDir"
     };
 
     @CommandLine.Option(names = { "--profile" }, scope = CommandLine.ScopeType.INHERIT, defaultValue = "application",
@@ -80,6 +81,10 @@ abstract class ExportBaseCommand extends CamelCommand {
             "--kamelets-version" }, description = "Apache Camel Kamelets version", defaultValue = "0.8.1")
     protected String kameletsVersion;
 
+    @CommandLine.Option(names = { "--local-kamelet-dir" },
+                        description = "Local directory for loading Kamelets (takes precedence)")
+    String localKameletDir;
+
     @CommandLine.Option(names = { "--spring-boot-version" }, description = "Spring Boot version",
                         defaultValue = "2.7.3")
     protected String springBootVersion;
@@ -148,6 +153,7 @@ abstract class ExportBaseCommand extends CamelCommand {
         Run run = new Run(getMain());
         // need to declare the profile to use for run
         run.profile = profile;
+        run.localKameletDir = localKameletDir;
         Integer code = run.runSilent();
         return code;
     }
@@ -271,7 +277,7 @@ abstract class ExportBaseCommand extends CamelCommand {
 
         for (String k : SETTINGS_PROP_SOURCE_KEYS) {
             String files = prop.getProperty(k);
-            if (files != null) {
+            if (files != null && !files.isEmpty()) {
                 for (String f : files.split(",")) {
                     String scheme = getScheme(f);
                     if (scheme != null) {
@@ -284,10 +290,16 @@ abstract class ExportBaseCommand extends CamelCommand {
                     String ext = FileUtil.onlyExt(f, true);
                     boolean java = "java".equals(ext);
                     boolean camel = "camel.main.routesIncludePattern".equals(k)
-                            || "camel.component.kamelet.location".equals(k);
+                            || "camel.component.kamelet.location".equals(k)
+                            || "camel.jbang.localKameletDir".equals(k);
                     File target = java ? srcJavaDir : camel ? srcCamelResourcesDir : srcResourcesDir;
                     File source = new File(f);
-                    File out = new File(target, source.getName());
+                    File out;
+                    if (source.isDirectory()) {
+                        out = target;
+                    } else {
+                        out = new File(target, source.getName());
+                    }
                     safeCopy(source, out, true);
                     if (java) {
                         // need to append package name in java source file
@@ -394,6 +406,19 @@ abstract class ExportBaseCommand extends CamelCommand {
             return;
         }
 
+        if (source.isDirectory()) {
+            // flattern files if they are from a directory
+            File[] children = source.listFiles();
+            if (children != null) {
+                for (File child : children) {
+                    if (child.isFile()) {
+                        safeCopy(child, new File(target, child.getName()), override);
+                    }
+                }
+            }
+            return;
+        }
+
         if (!target.exists()) {
             Files.copy(source.toPath(), target.toPath());
         } else if (override) {
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 38298304958..a2057038835 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
@@ -690,8 +690,8 @@ class Run extends CamelCommand {
         if (localKameletDir == null) {
             main = new KameletMain();
         } else {
-            main = new KameletMain("file://" + localKameletDir);
-            writeSettings("localKameletDir", localKameletDir);
+            main = new KameletMain("file:" + localKameletDir);
+            writeSettings("camel.jbang.localKameletDir", localKameletDir);
         }
         return main;
     }