You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2023/03/07 15:01:06 UTC

[camel] branch camel-3.20.x updated (6bde8293b8f -> 2e69a49826d)

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

fmariani pushed a change to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git


    from 6bde8293b8f CAMEL-19113 Platform-http-vertx: consume with comma separated does not work (#9474)
     new eeb86151a6b CAMEL-19120: export configurable template
     new 20de31317a5 Backport catalog
     new 0b709dba266 CAMEL-19030: camel-jbang - doc and catalog to support --camel-version option
     new 9409d967ce7 CAMEL-19030: camel-jbang - doc and catalog to support --runtime and fix loading quarkus catalog
     new 8efbec41a70 CAMEL-19042: amel-quarkus-catalog - Uses 0.0.1 version
     new e438ff29528 Implements CAMEL-19044 (#9355)
     new cd020bc9330 CAMEL-18983: camel-jbang - export - Add known maven repos such when using camel-jira.
     new 2e69a49826d camel-jbang - Add native column for quarkus

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/camel/catalog/CamelCatalog.java     |  10 +
 .../apache/camel/catalog/DefaultCamelCatalog.java  |   6 +
 .../org/apache/camel/catalog/CamelCatalogTest.java |  18 ++
 .../resources/org/apache/camel/catalog/bar/foo.txt |   1 +
 .../camel/dsl/jbang/core/commands/Export.java      |   1 +
 .../dsl/jbang/core/commands/ExportBaseCommand.java |  30 ++-
 .../dsl/jbang/core/commands/ExportCamelMain.java   |   2 +-
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  93 +-------
 .../dsl/jbang/core/commands/ExportSpringBoot.java  | 141 +++--------
 .../apache/camel/dsl/jbang/core/commands/Run.java  |   8 +
 .../core/commands/catalog/CatalogBaseCommand.java  |  85 ++++++-
 .../core/commands/catalog/CatalogComponent.java    |   5 +-
 .../core/commands/catalog/CatalogDataFormat.java   |   3 +-
 .../jbang/core/commands/catalog/CatalogDoc.java    |  53 ++++-
 .../core/commands/catalog/CatalogLanguage.java     |   3 +-
 .../jbang/core/commands/catalog/CatalogOther.java  |   1 +
 .../camel/dsl/jbang/core/common/CatalogLoader.java | 264 +++++++++++++++++++++
 .../camel/main/download/DownloadListener.java      |   7 +
 .../main/download/MavenDependencyDownloader.java   |  14 ++
 19 files changed, 525 insertions(+), 220 deletions(-)
 create mode 100644 catalog/camel-catalog/src/test/resources/org/apache/camel/catalog/bar/foo.txt
 create mode 100644 dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java


[camel] 08/08: camel-jbang - Add native column for quarkus

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2e69a49826d2a8ae1c95bd39c9f48fac207e3782
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 12 16:37:10 2023 +0100

    camel-jbang - Add native column for quarkus
---
 .../java/org/apache/camel/dsl/jbang/core/commands/Run.java   |  1 -
 .../dsl/jbang/core/commands/catalog/CatalogBaseCommand.java  | 12 ++++++++++++
 .../dsl/jbang/core/commands/catalog/CatalogComponent.java    |  3 ++-
 .../dsl/jbang/core/commands/catalog/CatalogDataFormat.java   |  1 +
 .../camel/dsl/jbang/core/commands/catalog/CatalogDoc.java    |  6 ++++--
 .../dsl/jbang/core/commands/catalog/CatalogLanguage.java     |  1 +
 .../camel/dsl/jbang/core/commands/catalog/CatalogOther.java  |  1 +
 7 files changed, 21 insertions(+), 4 deletions(-)

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 be238706898..aab691a7208 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
@@ -1066,7 +1066,6 @@ class Run extends CamelCommand {
             onDownloadDependency(groupId, artifactId, version);
         }
 
-        @Override
         public void onExtraRepository(String repo) {
             if (!repos.contains(repo)) {
                 writeSettings("repository", repo);
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
index c2da5a87677..f3f3a9043e3 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
@@ -193,6 +193,10 @@ public abstract class CatalogBaseCommand extends CamelCommand {
         }
     }
 
+    String nativeSupported(Row r) {
+        return r.nativeSupported ? "x" : "";
+    }
+
     static String fixQuarkusSince(String since) {
         // quarkus-catalog may have 0.1 and 0.0.1 versions that are really 1.0
         if (since != null && since.startsWith("0")) {
@@ -201,11 +205,19 @@ public abstract class CatalogBaseCommand extends CamelCommand {
         return since;
     }
 
+    static List<String> findComponentNames(CamelCatalog catalog) {
+        List<String> answer = catalog.findComponentNames();
+        // remove empty (spring boot catalog has a bug)
+        answer.removeIf(String::isBlank);
+        return answer;
+    }
+
     static class Row {
         String name;
         String title;
         String level;
         String since;
+        boolean nativeSupported;
         String description;
         String label;
         String gav;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java
index 4da2893c545..0aa23f7b500 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java
@@ -34,7 +34,7 @@ public class CatalogComponent extends CatalogBaseCommand {
     @Override
     List<CatalogBaseCommand.Row> collectRows() {
         List<Row> rows = new ArrayList<>();
-        for (String name : catalog.findComponentNames()) {
+        for (String name : findComponentNames(catalog)) {
             ComponentModel model = catalog.componentModel(name);
             Row row = new Row();
             row.name = model.getScheme();
@@ -44,6 +44,7 @@ public class CatalogComponent extends CatalogBaseCommand {
             row.description = model.getDescription();
             row.label = model.getLabel() != null ? model.getLabel() : "";
             row.deprecated = model.isDeprecated();
+            row.nativeSupported = model.isNativeSupported();
             row.gav = getGAV(model);
             rows.add(row);
         }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java
index 569595cf337..5b6cc1cbc44 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java
@@ -44,6 +44,7 @@ public class CatalogDataFormat extends CatalogBaseCommand {
             row.description = model.getDescription();
             row.label = model.getLabel() != null ? model.getLabel() : "";
             row.deprecated = model.isDeprecated();
+            row.nativeSupported = model.isNativeSupported();
             row.gav = getGAV(model);
             rows.add(row);
         }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
index 2495657e01f..6b2c865a03c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
@@ -45,6 +45,8 @@ import org.apache.camel.tooling.model.OtherModel;
 import org.apache.camel.util.StringHelper;
 import picocli.CommandLine;
 
+import static org.apache.camel.dsl.jbang.core.commands.catalog.CatalogBaseCommand.findComponentNames;
+
 @CommandLine.Command(name = "doc",
                      description = "Shows documentation for kamelet, component, and other Camel resources")
 public class CatalogDoc extends CamelCommand {
@@ -172,7 +174,7 @@ public class CatalogDoc extends CamelCommand {
                 suggestions = SuggestSimilarHelper.didYouMean(KameletCatalogHelper.findKameletNames(kameletsVersion), name);
             } else {
                 // assume its a component
-                suggestions = SuggestSimilarHelper.didYouMean(catalog.findComponentNames(), name);
+                suggestions = SuggestSimilarHelper.didYouMean(findComponentNames(catalog), name);
             }
             if (suggestions != null) {
                 String type = kamelet ? "kamelet" : "component";
@@ -185,7 +187,7 @@ public class CatalogDoc extends CamelCommand {
             if ("kamelet".equals(prefix)) {
                 suggestions = SuggestSimilarHelper.didYouMean(KameletCatalogHelper.findKameletNames(kameletsVersion), name);
             } else if ("component".equals(prefix)) {
-                suggestions = SuggestSimilarHelper.didYouMean(catalog.findComponentNames(), name);
+                suggestions = SuggestSimilarHelper.didYouMean(findComponentNames(catalog), name);
             } else if ("dataformat".equals(prefix)) {
                 suggestions = SuggestSimilarHelper.didYouMean(catalog.findDataFormatNames(), name);
             } else if ("language".equals(prefix)) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java
index b2128805c20..4c0faf51b80 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java
@@ -44,6 +44,7 @@ public class CatalogLanguage extends CatalogBaseCommand {
             row.description = model.getDescription();
             row.label = model.getLabel() != null ? model.getLabel() : "";
             row.deprecated = model.isDeprecated();
+            row.nativeSupported = model.isNativeSupported();
             row.gav = getGAV(model);
             rows.add(row);
         }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogOther.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogOther.java
index 8b3b4e8a448..c874a37f253 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogOther.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogOther.java
@@ -44,6 +44,7 @@ public class CatalogOther extends CatalogBaseCommand {
             row.description = model.getDescription();
             row.label = model.getLabel() != null ? model.getLabel() : "";
             row.deprecated = model.isDeprecated();
+            row.nativeSupported = model.isNativeSupported();
             row.gav = getGAV(model);
             rows.add(row);
         }


[camel] 01/08: CAMEL-19120: export configurable template

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit eeb86151a6b3e3766adb2d19c39ff890452cc1f1
Author: Croway <fe...@gmail.com>
AuthorDate: Tue Mar 7 14:29:56 2023 +0100

    CAMEL-19120: export configurable template
---
 .../org/apache/camel/catalog/CamelCatalog.java     |  10 +
 .../apache/camel/catalog/DefaultCamelCatalog.java  |   6 +
 .../org/apache/camel/catalog/CamelCatalogTest.java |  18 ++
 .../resources/org/apache/camel/catalog/bar/foo.txt |   1 +
 .../camel/dsl/jbang/core/commands/Export.java      |   1 +
 .../dsl/jbang/core/commands/ExportBaseCommand.java |   4 +
 .../dsl/jbang/core/commands/ExportSpringBoot.java  |  37 ++-
 .../camel/dsl/jbang/core/common/CatalogLoader.java | 264 +++++++++++++++++++++
 8 files changed, 336 insertions(+), 5 deletions(-)

diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index ff9bcf1d13c..6938c48e009 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.catalog;
 
+import java.io.InputStream;
 import java.net.URISyntaxException;
 import java.util.List;
 import java.util.Map;
@@ -570,4 +571,13 @@ public interface CamelCatalog {
      */
     ArtifactModel<?> modelFromMavenGAV(String groupId, String artifactId, String version);
 
+    /**
+     * Load resource from catalog classpath
+     *
+     * @param  kind The resource kind, ex. camel-jbang
+     * @param  name The resource name
+     * @return      An input stream for reading the resource; null if the resource could not be found
+     */
+    InputStream loadResource(String kind, String name);
+
 }
diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index 8791b097985..775294144f3 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -63,6 +63,7 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa
     private static final String ARCHETYPES_CATALOG = "org/apache/camel/catalog/archetypes/archetype-catalog.xml";
     private static final String SCHEMAS_XML = "org/apache/camel/catalog/schemas";
     private static final String MAIN_DIR = "org/apache/camel/catalog/main";
+    private static final String BASE_RESOURCE_DIR = "org/apache/camel/catalog";
 
     private final VersionHelper version = new VersionHelper();
 
@@ -495,6 +496,11 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa
         return null;
     }
 
+    @Override
+    public InputStream loadResource(String kind, String name) {
+        return versionManager.getResourceAsStream(BASE_RESOURCE_DIR + "/" + kind + "/" + name);
+    }
+
     private static boolean matchArtifact(ArtifactModel<?> am, String groupId, String artifactId, String version) {
         return groupId.equals(am.getGroupId()) && artifactId.equals(am.getArtifactId())
                 && (version == null || version.isBlank() || version.equals(am.getVersion()));
diff --git a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 407ec076ce2..97f09b0eba5 100644
--- a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -17,6 +17,9 @@
 package org.apache.camel.catalog;
 
 import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -1577,4 +1580,19 @@ public class CamelCatalogTest {
         Assertions.assertEquals("Sent and receive messages to/from a JMS Queue or Topic.", am.getDescription());
     }
 
+    @Test
+    public void loadFooResourceWithBarKind() throws IOException {
+        InputStream is = catalog.loadResource("bar", "foo.txt");
+        Assertions.assertNotNull(is);
+
+        String content = new String(is.readAllBytes(), StandardCharsets.UTF_8);
+        Assertions.assertEquals("Hello Camel", content);
+    }
+
+    @Test
+    public void loadNotExistingResource() {
+        InputStream is = catalog.loadResource("bar", "not_exists");
+        Assertions.assertNull(is);
+    }
+
 }
diff --git a/catalog/camel-catalog/src/test/resources/org/apache/camel/catalog/bar/foo.txt b/catalog/camel-catalog/src/test/resources/org/apache/camel/catalog/bar/foo.txt
new file mode 100644
index 00000000000..1d9ad12b82a
--- /dev/null
+++ b/catalog/camel-catalog/src/test/resources/org/apache/camel/catalog/bar/foo.txt
@@ -0,0 +1 @@
+Hello Camel
\ No newline at end of file
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 3eb0815a346..22d599ff96a 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
@@ -107,6 +107,7 @@ class Export extends ExportBaseCommand {
         cmd.gradleWrapper = this.gradleWrapper;
         cmd.buildTool = this.buildTool;
         cmd.quiet = this.quiet;
+        cmd.additionalProperties = this.additionalProperties;
         // run export
         return cmd.export();
     }
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 86b3b048485..ca607ec635a 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
@@ -135,6 +135,10 @@ abstract class ExportBaseCommand extends CamelCommand {
     @CommandLine.Option(names = { "--fresh" }, description = "Make sure we use fresh (i.e. non-cached) resources")
     protected boolean fresh;
 
+    @CommandLine.Option(names = { "--additional-properties" },
+                        description = "Additional maven properties, ex. --additional-properties=prop1=foo,prop2=bar")
+    protected String additionalProperties;
+
     @CommandLine.Option(names = { "--logging" }, defaultValue = "false",
                         description = "Can be used to turn on logging (logs to file in <user home>/.camel directory)")
     boolean logging;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index b956a4aac63..b839674fd34 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -22,16 +22,19 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.catalog.RuntimeProvider;
 import org.apache.camel.catalog.VersionManager;
+import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.main.KameletMain;
 import org.apache.camel.main.download.DependencyDownloaderClassLoader;
@@ -147,13 +150,22 @@ class ExportSpringBoot extends Export {
     private void createMavenPom(File settings, File profile, File pom, Set<String> deps) throws Exception {
         String[] ids = gav.split(":");
 
-        String context = readResourceTemplate("templates/spring-boot-pom.tmpl");
-
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
         String repos = getMavenRepos(prop, camelSpringBootVersion);
 
-        CamelCatalog catalog = loadSpringBootCatalog(repos, camelSpringBootVersion);
+        CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
+
+        // First try to load a specialized template from the catalog, if the catalog does not provide it
+        // fallback to the template defined in camel-jbang-core
+        String context;
+        InputStream template = catalog.loadResource("camel-jbang", "spring-boot-pom.tmpl");
+        if (template != null) {
+            context = IOHelper.loadText(template);
+        } else {
+            context = readResourceTemplate("templates/spring-boot-pom.tmpl");
+        }
+
         String camelVersion = catalog.getLoadedVersion();
 
         context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
@@ -162,6 +174,21 @@ class ExportSpringBoot extends Export {
         context = context.replaceAll("\\{\\{ \\.SpringBootVersion }}", springBootVersion);
         context = context.replaceFirst("\\{\\{ \\.JavaVersion }}", javaVersion);
         context = context.replaceFirst("\\{\\{ \\.CamelVersion }}", camelVersion);
+        if (camelSpringBootVersion != null) {
+            context = context.replaceFirst("\\{\\{ \\.CamelSpringBootVersion }}", camelSpringBootVersion);
+        }
+        if (additionalProperties != null) {
+            String properties = Arrays.stream(additionalProperties.split(","))
+                    .map(property -> {
+                        String[] keyValueProperty = property.split("=");
+                        String mavenProperty = String.format("\t\t<%s>%s</%s>", keyValueProperty[0], keyValueProperty[1],
+                                keyValueProperty[0]);
+                        return mavenProperty;
+                    })
+                    .map(property -> property + System.lineSeparator())
+                    .collect(Collectors.joining());
+            context = context.replaceFirst("\\{\\{ \\.AdditionalProperties }}", properties);
+        }
 
         // Convert jkube properties to maven properties
         Properties allProps = new CamelCaseOrderedProperties();
@@ -176,7 +203,7 @@ class ExportSpringBoot extends Export {
         context = context.replaceFirst(Pattern.quote("{{ .jkubeProperties }}"),
                 Matcher.quoteReplacement(sbJKube.toString()));
 
-        if (repos == null) {
+        if (repos == null || repos.isEmpty()) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", "");
         } else {
             int i = 1;
@@ -276,7 +303,7 @@ class ExportSpringBoot extends Export {
         context = context.replaceFirst("\\{\\{ \\.JavaVersion }}", javaVersion);
         context = context.replaceAll("\\{\\{ \\.CamelVersion }}", camelVersion);
 
-        if (repos == null) {
+        if (repos == null || repos.isEmpty()) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", "");
         } else {
             StringBuilder sb = new StringBuilder();
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
new file mode 100644
index 00000000000..49030808388
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
@@ -0,0 +1,264 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.common;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.catalog.RuntimeProvider;
+import org.apache.camel.catalog.VersionManager;
+import org.apache.camel.main.KameletMain;
+import org.apache.camel.main.download.DependencyDownloaderClassLoader;
+import org.apache.camel.main.download.DownloadException;
+import org.apache.camel.main.download.MavenArtifact;
+import org.apache.camel.main.download.MavenDependencyDownloader;
+
+public final class CatalogLoader {
+
+    private static final String DEFAULT_CAMEL_CATALOG = "org.apache.camel.catalog.DefaultCamelCatalog";
+
+    private static final String SPRING_BOOT_CATALOG_PROVIDER = "org.apache.camel.springboot.catalog.SpringBootRuntimeProvider";
+
+    private static final String QUARKUS_CATALOG_PROVIDER = "org.apache.camel.catalog.quarkus.QuarkusRuntimeProvider";
+
+    private CatalogLoader() {
+    }
+
+    public static CamelCatalog loadCatalog(String repos, String version) throws Exception {
+        if (version == null) {
+            CamelCatalog answer = new DefaultCamelCatalog();
+            answer.enableCache();
+            return answer;
+        }
+
+        // use kamelet-main to dynamic download dependency via maven
+        KameletMain main = new KameletMain();
+        try {
+            main.setRepos(repos);
+            // enable stub in silent mode so we do not use real components
+            main.setStub(true);
+            main.start();
+
+            // wrap downloaded catalog files in an isolated classloader
+            DependencyDownloaderClassLoader cl
+                    = new DependencyDownloaderClassLoader(null);
+
+            // download camel-catalog for that specific version
+            MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
+            MavenArtifact ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", version);
+            if (ma != null) {
+                cl.addFile(ma.getFile());
+            } else {
+                throw new IOException("Cannot download org.apache.camel:camel-catalog:" + version);
+            }
+
+            // re-create answer with the classloader to be able to load resources in this catalog
+            Class<CamelCatalog> clazz2
+                    = main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG,
+                            CamelCatalog.class);
+            CamelCatalog answer = main.getCamelContext().getInjector().newInstance(clazz2);
+            answer.setVersionManager(new DownloadCatalogVersionManager(version, cl));
+            answer.enableCache();
+            return answer;
+        } finally {
+            main.stop();
+        }
+    }
+
+    public static CamelCatalog loadSpringBootCatalog(String repos, String version) throws Exception {
+        CamelCatalog answer = new DefaultCamelCatalog();
+        if (version == null) {
+            version = answer.getCatalogVersion();
+        }
+
+        // use kamelet-main to dynamic download dependency via maven
+        KameletMain main = new KameletMain();
+        try {
+            main.setRepos(repos);
+            main.start();
+
+            // wrap downloaded catalog files in an isolated classloader
+            DependencyDownloaderClassLoader cl
+                    = new DependencyDownloaderClassLoader(main.getCamelContext().getApplicationContextClassLoader());
+
+            // download camel-catalog for that specific version
+            MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
+            MavenArtifact ma;
+            String camelCatalogVersion = version;
+            try {
+                ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", camelCatalogVersion);
+            } catch (DownloadException ex) {
+                // fallback, in case camel spring boot version differ from camel version
+                camelCatalogVersion = answer.getCatalogVersion();
+                ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", camelCatalogVersion);
+            }
+            if (ma != null) {
+                cl.addFile(ma.getFile());
+            } else {
+                throw new IOException("Cannot download org.apache.camel:camel-catalog:" + camelCatalogVersion);
+            }
+
+            ma = downloader.downloadArtifact("org.apache.camel.springboot", "camel-catalog-provider-springboot", version);
+            if (ma != null) {
+                cl.addFile(ma.getFile());
+            } else {
+                throw new IOException(
+                        "Cannot download org.apache.camel.springboot:camel-catalog-provider-springboot:" + version);
+            }
+
+            answer.setVersionManager(new DownloadCatalogVersionManager(version, cl));
+            Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) cl.loadClass(SPRING_BOOT_CATALOG_PROVIDER);
+            if (clazz != null) {
+                RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz);
+                if (provider != null) {
+                    answer.setRuntimeProvider(provider);
+                }
+            }
+            answer.enableCache();
+
+        } finally {
+            main.stop();
+        }
+
+        return answer;
+    }
+
+    public static CamelCatalog loadQuarkusCatalog(String repos, String quarkusVersion) {
+        String camelQuarkusVersion = null;
+        CamelCatalog answer = new DefaultCamelCatalog(true);
+
+        // quarkus version must end with .Final
+        if (quarkusVersion == null) {
+            return answer;
+        }
+        if (!quarkusVersion.endsWith(".Final")) {
+            quarkusVersion += ".Final";
+        }
+
+        // use kamelet-main to dynamic download dependency via maven
+        KameletMain main = new KameletMain();
+        try {
+            main.setRepos(repos);
+            main.start();
+
+            // shrinkwrap does not return POM file as result (they are hardcoded to be filtered out)
+            // so after this we download a JAR and then use its File location to compute the file for the downloaded POM
+            MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
+            MavenArtifact ma = downloader.downloadArtifact("io.quarkus.platform", "quarkus-camel-bom:pom", quarkusVersion);
+            if (ma != null && ma.getFile() != null) {
+                String name = ma.getFile().getAbsolutePath();
+                File file = new File(name);
+                if (file.exists()) {
+                    DocumentBuilderFactory dbf = XmlHelper.createDocumentBuilderFactory();
+                    DocumentBuilder db = dbf.newDocumentBuilder();
+                    Document dom = db.parse(file);
+
+                    // grab what exact camelVersion and camelQuarkusVersion we are using
+                    NodeList nl = dom.getElementsByTagName("dependency");
+                    for (int i = 0; i < nl.getLength(); i++) {
+                        Element node = (Element) nl.item(i);
+                        String g = node.getElementsByTagName("groupId").item(0).getTextContent();
+                        String a = node.getElementsByTagName("artifactId").item(0).getTextContent();
+                        if ("org.apache.camel.quarkus".equals(g) && "camel-quarkus-catalog".equals(a)) {
+                            camelQuarkusVersion = node.getElementsByTagName("version").item(0).getTextContent();
+                        }
+                    }
+                }
+            }
+
+            if (camelQuarkusVersion != null) {
+                // download camel-quarkus-catalog we use to know if we have an extension or not
+                downloader.downloadDependency("org.apache.camel.quarkus", "camel-quarkus-catalog", camelQuarkusVersion);
+
+                Class<RuntimeProvider> clazz = main.getCamelContext().getClassResolver().resolveClass(QUARKUS_CATALOG_PROVIDER,
+                        RuntimeProvider.class);
+                if (clazz != null) {
+                    RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz);
+                    if (provider != null) {
+                        // re-create answer with the classloader that loaded quarkus to be able to load resources in this catalog
+                        Class<CamelCatalog> clazz2
+                                = main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG,
+                                        CamelCatalog.class);
+                        answer = main.getCamelContext().getInjector().newInstance(clazz2);
+                        answer.setRuntimeProvider(provider);
+                        // use classloader that loaded quarkus provider to ensure we can load its resources
+                        answer.getVersionManager().setClassLoader(main.getCamelContext().getApplicationContextClassLoader());
+                        answer.enableCache();
+                    }
+                }
+            }
+        } catch (Exception e) {
+            // ignore
+        } finally {
+            main.stop();
+        }
+
+        return answer;
+    }
+
+    private static final class DownloadCatalogVersionManager implements VersionManager {
+
+        private ClassLoader classLoader;
+        private final String version;
+
+        public DownloadCatalogVersionManager(String version, ClassLoader classLoader) {
+            this.version = version;
+            this.classLoader = classLoader;
+        }
+
+        @Override
+        public void setClassLoader(ClassLoader classLoader) {
+            this.classLoader = classLoader;
+        }
+
+        @Override
+        public String getLoadedVersion() {
+            return version;
+        }
+
+        @Override
+        public boolean loadVersion(String version) {
+            return this.version.equals(version);
+        }
+
+        @Override
+        public String getRuntimeProviderLoadedVersion() {
+            return version;
+        }
+
+        @Override
+        public boolean loadRuntimeProviderVersion(String groupId, String artifactId, String version) {
+            return true;
+        }
+
+        @Override
+        public InputStream getResourceAsStream(String name) {
+            return classLoader.getResourceAsStream(name);
+        }
+    }
+
+}


[camel] 04/08: CAMEL-19030: camel-jbang - doc and catalog to support --runtime and fix loading quarkus catalog

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9409d967ce78c4c8e36c9ead70f17bcc82a38e0a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 12 16:09:50 2023 +0100

    CAMEL-19030: camel-jbang - doc and catalog to support --runtime and fix loading quarkus catalog
---
 .../jbang/core/commands/catalog/CatalogBaseCommand.java | 17 +++++++++++++++--
 .../dsl/jbang/core/commands/catalog/CatalogDoc.java     | 13 +++++++++++--
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
index 2d54738820d..8191361e77c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
@@ -41,6 +41,13 @@ public abstract class CatalogBaseCommand extends CamelCommand {
                         description = "To run using a different Camel version than the default version.")
     String camelVersion;
 
+    @CommandLine.Option(names = { "--runtime" }, description = "Runtime (spring-boot, quarkus, or camel-main)")
+    String runtime;
+
+    @CommandLine.Option(names = { "--quarkus-version" }, description = "Quarkus Platform version",
+                        defaultValue = "2.16.0.Final")
+    String quarkusVersion;
+
     @CommandLine.Option(names = { "--repos" },
                         description = "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)")
     String repos;
@@ -78,11 +85,17 @@ public abstract class CatalogBaseCommand extends CamelCommand {
     }
 
     CamelCatalog loadCatalog() throws Exception {
+        // silent logging when download catalogs
+        RuntimeUtil.configureLog("off", false, false, false, false);
+
+        if ("spring-boot".equals(runtime)) {
+            return CatalogLoader.loadSpringBootCatalog(repos, camelVersion);
+        } else if ("quarkus".equals(runtime)) {
+            return CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
+        }
         if (camelVersion == null) {
             return new DefaultCamelCatalog(true);
         } else {
-            // silent logging when download catalogs
-            RuntimeUtil.configureLog("off", false, false, false, false);
             return CatalogLoader.loadCatalog(repos, camelVersion);
         }
     }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
index a32f33aafc0..c782dda308e 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
@@ -57,6 +57,9 @@ public class CatalogDoc extends CamelCommand {
                         description = "To run using a different Camel version than the default version.")
     String camelVersion;
 
+    @CommandLine.Option(names = { "--runtime" }, description = "Runtime (spring-boot, quarkus, or camel-main)")
+    String runtime;
+
     @CommandLine.Option(names = { "--repos" },
                         description = "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)")
     String repos;
@@ -90,11 +93,17 @@ public class CatalogDoc extends CamelCommand {
     }
 
     CamelCatalog loadCatalog() throws Exception {
+        // silent logging when download catalogs
+        RuntimeUtil.configureLog("off", false, false, false, false);
+
+        if ("spring-boot".equals(runtime)) {
+            return CatalogLoader.loadSpringBootCatalog(repos, camelVersion);
+        } else if ("quarkus".equals(runtime)) {
+            return CatalogLoader.loadQuarkusCatalog(repos, camelVersion);
+        }
         if (camelVersion == null) {
             return new DefaultCamelCatalog(true);
         } else {
-            // silent logging when download catalogs
-            RuntimeUtil.configureLog("off", false, false, false, false);
             return CatalogLoader.loadCatalog(repos, camelVersion);
         }
     }


[camel] 03/08: CAMEL-19030: camel-jbang - doc and catalog to support --camel-version option

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0b709dba2667bb6476a294c551f7b431e75d661d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 12 13:18:18 2023 +0100

    CAMEL-19030: camel-jbang - doc and catalog to support --camel-version option
---
 .../core/commands/catalog/CatalogBaseCommand.java  | 22 +++++++++++++++++++++-
 .../jbang/core/commands/catalog/CatalogDoc.java    | 22 +++++++++++++++++++++-
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
index a5f9a9e0d30..2d54738820d 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
@@ -28,6 +28,8 @@ import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
+import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.dsl.jbang.core.common.VersionHelper;
 import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.tooling.model.ArtifactModel;
@@ -35,6 +37,14 @@ import picocli.CommandLine;
 
 public abstract class CatalogBaseCommand extends CamelCommand {
 
+    @CommandLine.Option(names = { "--camel-version" },
+                        description = "To run using a different Camel version than the default version.")
+    String camelVersion;
+
+    @CommandLine.Option(names = { "--repos" },
+                        description = "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)")
+    String repos;
+
     @CommandLine.Option(names = { "--sort" },
                         description = "Sort by name, support-level, or description", defaultValue = "name")
     String sort;
@@ -55,7 +65,7 @@ public abstract class CatalogBaseCommand extends CamelCommand {
                         description = "Filter by version more recent (inclusive)")
     String sinceAfter;
 
-    final CamelCatalog catalog = new DefaultCamelCatalog(true);
+    CamelCatalog catalog;
 
     public CatalogBaseCommand(CamelJBangMain main) {
         super(main);
@@ -67,6 +77,16 @@ public abstract class CatalogBaseCommand extends CamelCommand {
         return model.getGroupId() + ":" + model.getArtifactId() + ":" + model.getVersion();
     }
 
+    CamelCatalog loadCatalog() throws Exception {
+        if (camelVersion == null) {
+            return new DefaultCamelCatalog(true);
+        } else {
+            // silent logging when download catalogs
+            RuntimeUtil.configureLog("off", false, false, false, false);
+            return CatalogLoader.loadCatalog(repos, camelVersion);
+        }
+    }
+
     @Override
     public Integer call() throws Exception {
         // configure logging first
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
index cd849c62397..a32f33aafc0 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
@@ -32,6 +32,8 @@ import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
+import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.main.util.SuggestSimilarHelper;
 import org.apache.camel.tooling.model.BaseOptionModel;
@@ -51,6 +53,14 @@ public class CatalogDoc extends CamelCommand {
                             arity = "1")
     String name;
 
+    @CommandLine.Option(names = { "--camel-version" },
+                        description = "To run using a different Camel version than the default version.")
+    String camelVersion;
+
+    @CommandLine.Option(names = { "--repos" },
+                        description = "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)")
+    String repos;
+
     @CommandLine.Option(names = { "--url" },
                         description = "Prints the link to the online documentation on the Camel website",
                         defaultValue = "false")
@@ -73,12 +83,22 @@ public class CatalogDoc extends CamelCommand {
             "--kamelets-version" }, description = "Apache Camel Kamelets version", defaultValue = "3.20.1.1")
     String kameletsVersion;
 
-    final CamelCatalog catalog = new DefaultCamelCatalog(true);
+    CamelCatalog catalog;
 
     public CatalogDoc(CamelJBangMain main) {
         super(main);
     }
 
+    CamelCatalog loadCatalog() throws Exception {
+        if (camelVersion == null) {
+            return new DefaultCamelCatalog(true);
+        } else {
+            // silent logging when download catalogs
+            RuntimeUtil.configureLog("off", false, false, false, false);
+            return CatalogLoader.loadCatalog(repos, camelVersion);
+        }
+    }
+
     @Override
     public Integer call() throws Exception {
         // configure logging first


[camel] 06/08: Implements CAMEL-19044 (#9355)

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e438ff29528f9c189316d470d24870e130dcc03d
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Wed Feb 15 12:24:23 2023 -0500

    Implements CAMEL-19044 (#9355)
    
    * Implements CAMEL-19044
    
    * Replace Vert.x JSON library to camel-util-json
---
 .../core/commands/catalog/CatalogBaseCommand.java  | 30 +++++++++++++++++-----
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
index 111d946ba50..c2da5a87677 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.catalog;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
@@ -33,6 +34,7 @@ import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.dsl.jbang.core.common.VersionHelper;
 import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.tooling.model.ArtifactModel;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 
 public abstract class CatalogBaseCommand extends CamelCommand {
@@ -72,6 +74,10 @@ public abstract class CatalogBaseCommand extends CamelCommand {
                         description = "Filter by version more recent (inclusive)")
     String sinceAfter;
 
+    @CommandLine.Option(names = { "--json" },
+                        description = "Output in JSON Format")
+    boolean jsonOutput;
+
     CamelCatalog catalog;
 
     public CatalogBaseCommand(CamelJBangMain main) {
@@ -131,12 +137,24 @@ public abstract class CatalogBaseCommand extends CamelCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            System.out.println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList(
-                    new Column().header("NAME").visible(!gav).dataAlign(HorizontalAlign.LEFT).maxWidth(30).with(r -> r.name),
-                    new Column().header("ARTIFACT-ID").visible(gav).dataAlign(HorizontalAlign.LEFT).with(this::shortGav),
-                    new Column().header("LEVEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.level),
-                    new Column().header("SINCE").dataAlign(HorizontalAlign.RIGHT).with(r -> r.since),
-                    new Column().header("DESCRIPTION").dataAlign(HorizontalAlign.LEFT).with(this::shortDescription))));
+            if (jsonOutput) {
+                System.out.println(
+                        Jsoner.serialize(
+                                rows.stream().map(row -> Map.of(
+                                        "name", row.name,
+                                        "level", row.level,
+                                        "native", row.nativeSupported)).collect(Collectors.toList())));
+            } else {
+                System.out.println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList(
+                        new Column().header("NAME").visible(!gav).dataAlign(HorizontalAlign.LEFT).maxWidth(30)
+                                .with(r -> r.name),
+                        new Column().header("ARTIFACT-ID").visible(gav).dataAlign(HorizontalAlign.LEFT).with(this::shortGav),
+                        new Column().header("LEVEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.level),
+                        new Column().header("NATIVE").dataAlign(HorizontalAlign.CENTER)
+                                .visible("quarkus".equals(runtime)).with(this::nativeSupported),
+                        new Column().header("SINCE").dataAlign(HorizontalAlign.RIGHT).with(r -> r.since),
+                        new Column().header("DESCRIPTION").dataAlign(HorizontalAlign.LEFT).with(this::shortDescription))));
+            }
         }
 
         return 0;


[camel] 02/08: Backport catalog

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 20de31317a525e9c0892fa94bf5257ba73ac9333
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 12 11:24:22 2023 +0100

    Backport catalog
---
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  89 +-----------------
 .../dsl/jbang/core/commands/ExportSpringBoot.java  | 100 +--------------------
 2 files changed, 5 insertions(+), 184 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index 4c1010eaafe..fd4bafaf3c3 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -28,21 +28,9 @@ import java.util.Set;
 import java.util.StringJoiner;
 import java.util.stream.Collectors;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
 import org.apache.camel.catalog.CamelCatalog;
-import org.apache.camel.catalog.DefaultCamelCatalog;
-import org.apache.camel.catalog.RuntimeProvider;
+import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
-import org.apache.camel.dsl.jbang.core.common.XmlHelper;
-import org.apache.camel.main.KameletMain;
-import org.apache.camel.main.download.MavenArtifact;
-import org.apache.camel.main.download.MavenDependencyDownloader;
 import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.util.CamelCaseOrderedProperties;
@@ -53,11 +41,7 @@ import org.apache.commons.io.FileUtils;
 
 class ExportQuarkus extends Export {
 
-    private static final String DEFAULT_CAMEL_CATALOG = "org.apache.camel.catalog.DefaultCamelCatalog";
-    private static final String QUARKUS_CATALOG_PROVIDER = "org.apache.camel.catalog.quarkus.QuarkusRuntimeProvider";
-
     private String camelVersion;
-    private String camelQuarkusVersion;
 
     public ExportQuarkus(CamelJBangMain main) {
         super(main);
@@ -243,11 +227,12 @@ class ExportQuarkus extends Export {
         // quarkus controls the camel version
         String repos = getMavenRepos(prop, quarkusVersion);
 
-        CamelCatalog catalog = loadQuarkusCatalog(repos);
+        CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
         if (camelVersion == null) {
             camelVersion = catalog.getCatalogVersion();
         }
         String camelVersion = catalog.getCatalogVersion();
+        String camelQuarkusVersion = catalog.otherModel("camel-core-engine").getVersion();
 
         context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
         context = context.replaceFirst("\\{\\{ \\.ArtifactId }}", ids[1]);
@@ -351,7 +336,7 @@ class ExportQuarkus extends Export {
         // quarkus controls the camel version
         String repos = getMavenRepos(prop, quarkusVersion);
 
-        CamelCatalog catalog = loadQuarkusCatalog(repos);
+        CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
         if (camelVersion == null) {
             camelVersion = catalog.getCatalogVersion();
         }
@@ -455,70 +440,4 @@ class ExportQuarkus extends Export {
         return answer;
     }
 
-    private CamelCatalog loadQuarkusCatalog(String repos) {
-        CamelCatalog answer = new DefaultCamelCatalog(true);
-
-        // use kamelet-main to dynamic download dependency via maven
-        KameletMain main = new KameletMain();
-        try {
-            main.setRepos(repos);
-            main.start();
-
-            // shrinkwrap does not return POM file as result (they are hardcoded to be filtered out)
-            // so after this we download a JAR and then use its File location to compute the file for the downloaded POM
-            MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
-            MavenArtifact ma = downloader.downloadArtifact("io.quarkus.platform", "quarkus-camel-bom:pom", quarkusVersion);
-            if (ma != null && ma.getFile() != null) {
-                String name = ma.getFile().getAbsolutePath();
-                File file = new File(name);
-                if (file.exists()) {
-                    DocumentBuilderFactory dbf = XmlHelper.createDocumentBuilderFactory();
-                    DocumentBuilder db = dbf.newDocumentBuilder();
-                    Document dom = db.parse(file);
-
-                    // grab what exact camelVersion and camelQuarkusVersion we are using
-                    NodeList nl = dom.getElementsByTagName("dependency");
-                    for (int i = 0; i < nl.getLength(); i++) {
-                        Element node = (Element) nl.item(i);
-                        String g = node.getElementsByTagName("groupId").item(0).getTextContent();
-                        String a = node.getElementsByTagName("artifactId").item(0).getTextContent();
-                        if ("org.apache.camel".equals(g) && "camel-core-engine".equals(a)) {
-                            camelVersion = node.getElementsByTagName("version").item(0).getTextContent();
-                        } else if ("org.apache.camel.quarkus".equals(g) && "camel-quarkus-catalog".equals(a)) {
-                            camelQuarkusVersion = node.getElementsByTagName("version").item(0).getTextContent();
-                        }
-                    }
-                }
-            }
-
-            if (camelQuarkusVersion != null) {
-                // download camel-quarkus-catalog we use to know if we have an extension or not
-                downloader.downloadDependency("org.apache.camel.quarkus", "camel-quarkus-catalog", camelQuarkusVersion);
-
-                Class<RuntimeProvider> clazz = main.getCamelContext().getClassResolver().resolveClass(QUARKUS_CATALOG_PROVIDER,
-                        RuntimeProvider.class);
-                if (clazz != null) {
-                    RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz);
-                    if (provider != null) {
-                        // re-create answer with the classloader that loaded quarkus to be able to load resources in this catalog
-                        Class<CamelCatalog> clazz2
-                                = main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG,
-                                        CamelCatalog.class);
-                        answer = main.getCamelContext().getInjector().newInstance(clazz2);
-                        answer.setRuntimeProvider(provider);
-                        // use classloader that loaded quarkus provider to ensure we can load its resources
-                        answer.getVersionManager().setClassLoader(main.getCamelContext().getApplicationContextClassLoader());
-                        answer.enableCache();
-                    }
-                }
-            }
-        } catch (Exception e) {
-            // ignore
-        } finally {
-            main.stop();
-        }
-
-        return answer;
-    }
-
 }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index b839674fd34..76519f658a2 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -31,15 +31,8 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import org.apache.camel.catalog.CamelCatalog;
-import org.apache.camel.catalog.DefaultCamelCatalog;
-import org.apache.camel.catalog.RuntimeProvider;
-import org.apache.camel.catalog.VersionManager;
 import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
-import org.apache.camel.main.KameletMain;
-import org.apache.camel.main.download.DependencyDownloaderClassLoader;
-import org.apache.camel.main.download.MavenArtifact;
-import org.apache.camel.main.download.MavenDependencyDownloader;
 import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.util.CamelCaseOrderedProperties;
@@ -50,7 +43,6 @@ import org.apache.commons.io.FileUtils;
 class ExportSpringBoot extends Export {
 
     private static final String DEFAULT_CAMEL_CATALOG = "org.apache.camel.catalog.DefaultCamelCatalog";
-    private static final String SPRING_BOOT_CATALOG_PROVIDER = "org.apache.camel.springboot.catalog.SpringBootRuntimeProvider";
 
     public ExportSpringBoot(CamelJBangMain main) {
         super(main);
@@ -293,7 +285,7 @@ class ExportSpringBoot extends Export {
         RuntimeUtil.loadProperties(prop, settings);
         String repos = getMavenRepos(prop, camelSpringBootVersion);
 
-        CamelCatalog catalog = loadSpringBootCatalog(repos, camelSpringBootVersion);
+        CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
         String camelVersion = catalog.getLoadedVersion();
 
         context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
@@ -405,55 +397,6 @@ class ExportSpringBoot extends Export {
         return super.applicationPropertyLine(key, value);
     }
 
-    private CamelCatalog loadSpringBootCatalog(String repos, String version) throws Exception {
-        CamelCatalog answer = new DefaultCamelCatalog();
-        if (version == null) {
-            version = answer.getCatalogVersion();
-        }
-
-        // use kamelet-main to dynamic download dependency via maven
-        KameletMain main = new KameletMain();
-        try {
-            main.setRepos(repos);
-            main.start();
-
-            // wrap downloaded catalog files in an isolated classloader
-            DependencyDownloaderClassLoader cl
-                    = new DependencyDownloaderClassLoader(main.getCamelContext().getApplicationContextClassLoader());
-
-            // download camel-catalog for that specific version
-            MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
-            MavenArtifact ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", version);
-            if (ma != null) {
-                cl.addFile(ma.getFile());
-            } else {
-                throw new IOException("Cannot download org.apache.camel:camel-catalog:" + version);
-            }
-            ma = downloader.downloadArtifact("org.apache.camel.springboot", "camel-catalog-provider-springboot", version);
-            if (ma != null) {
-                cl.addFile(ma.getFile());
-            } else {
-                throw new IOException(
-                        "Cannot download org.apache.camel.springboot:camel-catalog-provider-springboot:" + version);
-            }
-
-            answer.setVersionManager(new SpringBootCatalogVersionManager(version, cl));
-            Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) cl.loadClass(SPRING_BOOT_CATALOG_PROVIDER);
-            if (clazz != null) {
-                RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz);
-                if (provider != null) {
-                    answer.setRuntimeProvider(provider);
-                }
-            }
-            answer.enableCache();
-
-        } finally {
-            main.stop();
-        }
-
-        return answer;
-    }
-
     private String readResourceTemplate(String name) throws IOException {
         InputStream is = ExportSpringBoot.class.getClassLoader().getResourceAsStream(name);
         String text = IOHelper.loadText(is);
@@ -461,45 +404,4 @@ class ExportSpringBoot extends Export {
         return text;
     }
 
-    private final class SpringBootCatalogVersionManager implements VersionManager {
-
-        private ClassLoader classLoader;
-        private final String version;
-
-        public SpringBootCatalogVersionManager(String version, ClassLoader classLoader) {
-            this.version = version;
-            this.classLoader = classLoader;
-        }
-
-        @Override
-        public void setClassLoader(ClassLoader classLoader) {
-            this.classLoader = classLoader;
-        }
-
-        @Override
-        public String getLoadedVersion() {
-            return version;
-        }
-
-        @Override
-        public boolean loadVersion(String version) {
-            return this.version.equals(version);
-        }
-
-        @Override
-        public String getRuntimeProviderLoadedVersion() {
-            return version;
-        }
-
-        @Override
-        public boolean loadRuntimeProviderVersion(String groupId, String artifactId, String version) {
-            return true;
-        }
-
-        @Override
-        public InputStream getResourceAsStream(String name) {
-            return classLoader.getResourceAsStream(name);
-        }
-    }
-
 }


[camel] 07/08: CAMEL-18983: camel-jbang - export - Add known maven repos such when using camel-jira.

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cd020bc9330ee7d267d3bda393d19147f1c6d4b3
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Mar 6 09:26:00 2023 +0100

    CAMEL-18983: camel-jbang - export - Add known maven repos such when using camel-jira.
---
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 26 +++++++++++++++-------
 .../dsl/jbang/core/commands/ExportCamelMain.java   |  2 +-
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  4 ++--
 .../dsl/jbang/core/commands/ExportSpringBoot.java  |  4 ++--
 .../apache/camel/dsl/jbang/core/commands/Run.java  |  9 ++++++++
 .../camel/main/download/DownloadListener.java      |  7 ++++++
 .../main/download/MavenDependencyDownloader.java   | 14 ++++++++++++
 7 files changed, 53 insertions(+), 13 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 ca607ec635a..b9a108a4885 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
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
+import java.util.StringJoiner;
 import java.util.TreeSet;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -498,23 +499,32 @@ abstract class ExportBaseCommand extends CamelCommand {
      * @param  camelVersion the camel version
      * @return              repositories or null if none are in use
      */
-    protected static String getMavenRepos(Properties prop, String camelVersion) {
-        String answer = prop.getProperty("camel.jbang.repos");
+    protected static String getMavenRepos(File settings, Properties prop, String camelVersion) throws Exception {
+        StringJoiner sj = new StringJoiner(",");
+
+        String repos = prop.getProperty("camel.jbang.repos");
+        if (repos != null) {
+            sj.add(repos);
+        }
 
         if (camelVersion == null) {
             camelVersion = new DefaultCamelCatalog().getCatalogVersion();
         }
-
         // include apache snapshot repo if we use SNAPSHOT version of Camel
         if (camelVersion.endsWith("-SNAPSHOT")) {
-            if (answer == null) {
-                answer = "https://repository.apache.org/content/groups/snapshots/";
-            } else if (!answer.contains("https://repository.apache.org/content/groups/snapshots/")) {
-                answer += ",https://repository.apache.org/content/groups/snapshots/";
+            sj.add("https://repository.apache.org/content/groups/snapshots/");
+        }
+
+        // there may be additional extra repositories
+        List<String> lines = Files.readAllLines(settings.toPath());
+        for (String line : lines) {
+            if (line.startsWith("repository=")) {
+                String r = StringHelper.after(line, "repository=");
+                sj.add(r);
             }
         }
 
-        return answer;
+        return sj.toString();
     }
 
     protected static boolean hasModeline(File settings) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
index 3303b0c8472..d25e7945322 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
@@ -142,7 +142,7 @@ class ExportCamelMain extends Export {
 
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
-        String repos = getMavenRepos(prop, camelVersion);
+        String repos = getMavenRepos(settings, prop, camelVersion);
         if (repos == null) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", "");
         } else {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index fd4bafaf3c3..0bc1edf443c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -225,7 +225,7 @@ class ExportQuarkus extends Export {
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
         // quarkus controls the camel version
-        String repos = getMavenRepos(prop, quarkusVersion);
+        String repos = getMavenRepos(settings, prop, quarkusVersion);
 
         CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
         if (camelVersion == null) {
@@ -334,7 +334,7 @@ class ExportQuarkus extends Export {
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
         // quarkus controls the camel version
-        String repos = getMavenRepos(prop, quarkusVersion);
+        String repos = getMavenRepos(settings, prop, quarkusVersion);
 
         CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
         if (camelVersion == null) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index 76519f658a2..3348211f2b3 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -144,7 +144,7 @@ class ExportSpringBoot extends Export {
 
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
-        String repos = getMavenRepos(prop, camelSpringBootVersion);
+        String repos = getMavenRepos(settings, prop, camelSpringBootVersion);
 
         CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
 
@@ -283,7 +283,7 @@ class ExportSpringBoot extends Export {
 
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
-        String repos = getMavenRepos(prop, camelSpringBootVersion);
+        String repos = getMavenRepos(settings, prop, camelSpringBootVersion);
 
         CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
         String camelVersion = catalog.getLoadedVersion();
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 a543981cd9f..be238706898 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
@@ -1044,6 +1044,7 @@ class Run extends CamelCommand {
 
     private class RunDownloadListener implements DownloadListener {
         final Set<String> downloaded = new HashSet<>();
+        final Set<String> repos = new HashSet<>();
         final Set<String> kamelets = new HashSet<>();
         final Set<String> modelines = new HashSet<>();
 
@@ -1065,6 +1066,14 @@ class Run extends CamelCommand {
             onDownloadDependency(groupId, artifactId, version);
         }
 
+        @Override
+        public void onExtraRepository(String repo) {
+            if (!repos.contains(repo)) {
+                writeSettings("repository", repo);
+                repos.add(repo);
+            }
+        }
+
         @Override
         public void onLoadingKamelet(String name) {
             if (!kamelets.contains(name)) {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
index d9707c31197..842aa0c5ceb 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
@@ -33,6 +33,13 @@ public interface DownloadListener {
         // noop
     }
 
+    /**
+     * Some dependencies require third-party maven repositories to be downloaded.
+     */
+    default void onExtraRepository(String repo) {
+        // noop
+    }
+
     /**
      * Uses an existing already downloaded dependency
      */
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
index 33d9841a97e..55a04316ce6 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
@@ -361,6 +361,13 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
             if (!apacheSnapshotsIncluded && "org.apache.camel".equals(groupId) && version.contains("SNAPSHOT")) {
                 repositories.add(apacheSnapshots);
             }
+            List<RemoteRepository> extaRepositories = new ArrayList<>();
+            // include extra repositories (if any)
+            extaRepositories.addAll(resolveExtraRepositories(extraRepos));
+            // and from known extra repositories (if any)
+            String known = knownReposResolver.getRepo(artifactId);
+            extaRepositories.addAll(resolveExtraRepositories(known));
+            repositories.addAll(extaRepositories);
 
             List<MavenArtifact> artifacts = resolveDependenciesViaAether(deps, repositories, transitively);
             List<File> files = new ArrayList<>();
@@ -391,6 +398,13 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
                     listener.onDownloadedDependency(groupId, artifactId, version);
                 }
             }
+            if (!extaRepositories.isEmpty()) {
+                for (RemoteRepository repo : extaRepositories) {
+                    for (DownloadListener listener : downloadListeners) {
+                        listener.onExtraRepository(repo.getUrl());
+                    }
+                }
+            }
 
         }, gav);
     }


[camel] 05/08: CAMEL-19042: amel-quarkus-catalog - Uses 0.0.1 version

Posted by fm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8efbec41a70f1e45f00a760310c3a327145223d9
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 12 16:18:20 2023 +0100

    CAMEL-19042: amel-quarkus-catalog - Uses 0.0.1 version
---
 .../jbang/core/commands/catalog/CatalogBaseCommand.java  |  8 ++++++++
 .../jbang/core/commands/catalog/CatalogComponent.java    |  2 +-
 .../jbang/core/commands/catalog/CatalogDataFormat.java   |  2 +-
 .../dsl/jbang/core/commands/catalog/CatalogDoc.java      | 16 ++++++++++++----
 .../dsl/jbang/core/commands/catalog/CatalogLanguage.java |  2 +-
 5 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
index 8191361e77c..111d946ba50 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
@@ -175,6 +175,14 @@ public abstract class CatalogBaseCommand extends CamelCommand {
         }
     }
 
+    static String fixQuarkusSince(String since) {
+        // quarkus-catalog may have 0.1 and 0.0.1 versions that are really 1.0
+        if (since != null && since.startsWith("0")) {
+            return "1.0";
+        }
+        return since;
+    }
+
     static class Row {
         String name;
         String title;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java
index a2c30ada5be..4da2893c545 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogComponent.java
@@ -40,7 +40,7 @@ public class CatalogComponent extends CatalogBaseCommand {
             row.name = model.getScheme();
             row.title = model.getTitle();
             row.level = model.getSupportLevel().name();
-            row.since = model.getFirstVersionShort();
+            row.since = fixQuarkusSince(model.getFirstVersionShort());
             row.description = model.getDescription();
             row.label = model.getLabel() != null ? model.getLabel() : "";
             row.deprecated = model.isDeprecated();
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java
index 9f254c386be..569595cf337 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDataFormat.java
@@ -40,7 +40,7 @@ public class CatalogDataFormat extends CatalogBaseCommand {
             row.name = model.getName();
             row.title = model.getTitle();
             row.level = model.getSupportLevel().name();
-            row.since = model.getFirstVersionShort();
+            row.since = fixQuarkusSince(model.getFirstVersionShort());
             row.description = model.getDescription();
             row.label = model.getLabel() != null ? model.getLabel() : "";
             row.deprecated = model.isDeprecated();
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
index c782dda308e..2495657e01f 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
@@ -360,7 +360,7 @@ public class CatalogDoc extends CamelCommand {
         } else {
             System.out.printf("Component Name: %s%n", cm.getName());
         }
-        System.out.printf("Since: %s%n", cm.getFirstVersionShort());
+        System.out.printf("Since: %s%n", fixQuarkusSince(cm.getFirstVersionShort()));
         System.out.println("");
         if (cm.isProducerOnly()) {
             System.out.println("Only producer is supported");
@@ -457,7 +457,7 @@ public class CatalogDoc extends CamelCommand {
         } else {
             System.out.printf("Dataformat Name: %s%n", dm.getName());
         }
-        System.out.printf("Since: %s%n", dm.getFirstVersionShort());
+        System.out.printf("Since: %s%n", fixQuarkusSince(dm.getFirstVersionShort()));
         System.out.println("");
         System.out.printf("%s%n", dm.getDescription());
         System.out.println("");
@@ -514,7 +514,7 @@ public class CatalogDoc extends CamelCommand {
         } else {
             System.out.printf("Language Name: %s%n", lm.getName());
         }
-        System.out.printf("Since: %s%n", lm.getFirstVersionShort());
+        System.out.printf("Since: %s%n", fixQuarkusSince(lm.getFirstVersionShort()));
         System.out.println("");
         System.out.printf("%s%n", lm.getDescription());
         System.out.println("");
@@ -571,7 +571,7 @@ public class CatalogDoc extends CamelCommand {
         } else {
             System.out.printf("Miscellaneous Name: %s%n", om.getName());
         }
-        System.out.printf("Since: %s%n", om.getFirstVersionShort());
+        System.out.printf("Since: %s%n", fixQuarkusSince(om.getFirstVersionShort()));
         System.out.println("");
         System.out.printf("%s%n", om.getDescription());
         System.out.println("");
@@ -681,4 +681,12 @@ public class CatalogDoc extends CamelCommand {
                 .collect(Collectors.toList());
     }
 
+    static String fixQuarkusSince(String since) {
+        // quarkus-catalog may have 0.1 and 0.0.1 versions that are really 1.0
+        if (since != null && since.startsWith("0")) {
+            return "1.0";
+        }
+        return since;
+    }
+
 }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java
index d6a22346349..b2128805c20 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogLanguage.java
@@ -40,7 +40,7 @@ public class CatalogLanguage extends CatalogBaseCommand {
             row.name = model.getName();
             row.title = model.getTitle();
             row.level = model.getSupportLevel().name();
-            row.since = model.getFirstVersionShort();
+            row.since = fixQuarkusSince(model.getFirstVersionShort());
             row.description = model.getDescription();
             row.label = model.getLabel() != null ? model.getLabel() : "";
             row.deprecated = model.isDeprecated();