This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-4.8.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-4.8.x by this push:
     new b9317282466 CAMEL-21289: camel-jbang - Export with --local-kamelet-dir
b9317282466 is described below

commit b9317282466a141b34cb658ca181c40161cb9ce4
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Sep 30 11:44:44 2024 +0200

    CAMEL-21289: camel-jbang - Export with --local-kamelet-dir
---
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 65 ++++++++++++++++------
 1 file changed, 48 insertions(+), 17 deletions(-)

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 a614c726ae6..958327e5bef 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
@@ -46,6 +46,7 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.dsl.jbang.core.commands.catalog.KameletCatalogHelper;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
 import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
@@ -73,7 +74,8 @@ public abstract class ExportBaseCommand extends CamelCommand {
             "camel.component.kamelet.location",
             "camel.jbang.classpathFiles",
             "camel.jbang.localKameletDir",
-            "camel.jbang.jkubeFiles"
+            "camel.jbang.jkubeFiles",
+            "kamelet"
     };
 
     private static final Pattern PACKAGE_PATTERN = Pattern.compile(
@@ -361,11 +363,24 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
         }
 
         List<String> lines = RuntimeUtil.loadPropertiesLines(settings);
-        // are we using any of the official ASF Kamelets
-        boolean kamelets = lines.stream().anyMatch(l -> 
l.startsWith("kamelet="));
-        // are we using custom kamelets
-        boolean customKamelets
-                = lines.stream().anyMatch(l -> 
(l.startsWith("camel.main.routesIncludePattern=") && 
l.contains(".kamelet.yaml"))
+
+        // check if we use custom and/or official ASF kamelets
+        List<String> officialKamelets = 
KameletCatalogHelper.findKameletNames(kameletsVersion);
+        boolean kamelets = false;
+        boolean asfKamelets = false;
+        for (String line : lines) {
+            if (line.startsWith("kamelet=")) {
+                kamelets = true;
+                String name = StringHelper.after(line, "kamelet=");
+                if (officialKamelets.contains(name)) {
+                    asfKamelets = true;
+                    break;
+                }
+            }
+        }
+        // any other custom kamelets that are loaded via routes
+        kamelets |= lines.stream()
+                .anyMatch(l -> 
(l.startsWith("camel.main.routesIncludePattern=") && 
l.contains(".kamelet.yaml"))
                         || l.startsWith("camel.component.kamelet.location=") 
&& l.contains(".kamelet.yaml"));
         for (String line : lines) {
             if (line.startsWith("dependency=")) {
@@ -375,14 +390,14 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                 boolean skip = v == null || 
v.contains("org.apache.camel:camel-core-languages")
                         || v.contains("org.apache.camel:camel-java-joor-dsl")
                         || v.contains("camel-endpointdsl")
-                        || !(kamelets && !customKamelets) && 
v.contains("org.apache.camel:camel-kamelet");
+                        || !(kamelets) && 
v.contains("org.apache.camel:camel-kamelet");
                 if (!skip) {
                     answer.add(v);
                 }
-                if ((kamelets || customKamelets) && v != null && 
v.contains("org.apache.camel:camel-kamelet")) {
+                if (kamelets && v != null && 
v.contains("org.apache.camel:camel-kamelet")) {
                     // kamelets need yaml-dsl
                     answer.add("camel:yaml-dsl");
-                    if (kamelets) {
+                    if (asfKamelets) {
                         // include JARs for official ASF kamelets
                         answer.add("org.apache.camel.kamelets:camel-kamelets:" 
+ kameletsVersion);
                         
answer.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
@@ -393,10 +408,10 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                 if (!deps.isEmpty()) {
                     for (String d : deps.split(",")) {
                         answer.add(d.trim());
-                        if ((kamelets || customKamelets) && 
d.contains("org.apache.camel:camel-kamelet")) {
+                        if (kamelets && 
d.contains("org.apache.camel:camel-kamelet")) {
                             // kamelets need yaml-dsl
                             answer.add("camel:yaml-dsl");
-                            if (kamelets) {
+                            if (asfKamelets) {
                                 // include JARs for official ASF kamelets
                                 
answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
                                 
answer.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
@@ -438,19 +453,21 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                                 ext = FileUtil.onlyExt(r, false);
                                 if ("kamelet.yaml".equals(ext)) {
                                     answer.add("camel:kamelet");
-                                    if (kamelets) {
+                                    if (asfKamelets) {
+                                        // include JARs for official ASF 
kamelets
                                         
answer.add("mvn:org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
+                                        
answer.add("mvn:org.apache.camel.kamelets:camel-kamelets-utils:" + 
kameletsVersion);
                                     }
                                 }
                             }
                         }
                     }
                 }
-            } else if ((kamelets || customKamelets) && 
line.startsWith("camel.component.kamelet.location=")) {
+            } else if (kamelets && 
line.startsWith("camel.component.kamelet.location=")) {
                 // kamelets need yaml-dsl
                 answer.add("camel:kamelet");
                 answer.add("camel:yaml-dsl");
-                if (kamelets) {
+                if (asfKamelets) {
                     // include JARs for official ASF kamelets
                     answer.add("mvn:org.apache.camel.kamelets:camel-kamelets:" 
+ kameletsVersion);
                     
answer.add("mvn:org.apache.camel.kamelets:camel-kamelets-utils:" + 
kameletsVersion);
@@ -507,6 +524,13 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
 
+        String localKameletDir = 
prop.getProperty("camel.jbang.localKameletDir");
+        if (localKameletDir != null) {
+            String scheme = getScheme(localKameletDir);
+            if (scheme != null) {
+                localKameletDir = localKameletDir.substring(scheme.length() + 
1);
+            }
+        }
         for (String k : SETTINGS_PROP_SOURCE_KEYS) {
             String files = prop.getProperty(k);
             if (files != null && !files.isEmpty()) {
@@ -524,11 +548,11 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                     }
                     String ext = FileUtil.onlyExt(f, true);
                     String ext2 = FileUtil.onlyExt(f, false);
-                    if (ext == null) {
+                    if (!"kamelet".equals(k) && ext == null) {
                         continue;
                     }
                     boolean java = "java".equals(ext);
-                    boolean kamelet = 
"camel.component.kamelet.location".equals(k)
+                    boolean kamelet = "kamelet".equals(k) || 
"camel.component.kamelet.location".equals(k)
                             || "camel.jbang.localKameletDir".equals(k) || 
"kamelet.yaml".equalsIgnoreCase(ext2);
                     boolean camel = !kamelet && 
"camel.main.routesIncludePattern".equals(k);
                     boolean jkube = "camel.jbang.jkubeFiles".equals(k);
@@ -537,7 +561,14 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                     File srcWeb = new File(srcResourcesDir, 
"META-INF/resources");
                     File target = java ? srcJavaDir : camel ? 
srcCamelResourcesDir : kamelet ? srcKameletsResourcesDir
                             : web ? srcWeb : srcResourcesDir;
-                    File source = new File(f);
+
+                    File source;
+                    if ("kamelet".equals(k) && localKameletDir != null) {
+                        // source is a local kamelet
+                        source = new File(localKameletDir, f + 
".kamelet.yaml");
+                    } else {
+                        source = new File(f);
+                    }
                     File out;
                     if (source.isDirectory()) {
                         out = target;

Reply via email to