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

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

commit f48f729ffdc78513287ac23b1c987145e2f697a8
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Jun 1 07:39:27 2022 +0200

    camel-jbang - github resource resolver should be detected if in use or not.
---
 .../camel/impl/engine/DefaultResourceLoader.java   | 17 +++++++++++++
 dsl/camel-kamelet-main/pom.xml                     |  4 ---
 .../main/DependencyDownloaderResourceLoader.java   | 29 ++++++++++++++++++++++
 .../java/org/apache/camel/main/KameletMain.java    |  1 +
 4 files changed, 47 insertions(+), 4 deletions(-)

diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java
index 20182fdc720..81c63ada3a4 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java
@@ -121,6 +121,23 @@ public class DefaultResourceLoader extends ServiceSupport 
implements ResourceLoa
         return rr.resolve(uri);
     }
 
+    /**
+     * Is there an existing resource resolver that can load from the given 
scheme
+     *
+     * @param scheme the scheme
+     */
+    protected boolean hasResourceResolver(String scheme) {
+        ResourceResolver answer = 
getCamelContext().getRegistry().lookupByNameAndType(
+                RESOURCE_LOADER_KEY_PREFIX + scheme,
+                ResourceResolver.class);
+
+        if (answer == null) {
+            answer = resolvers.get(scheme);
+        }
+
+        return answer != null;
+    }
+
     /**
      * Looks up a {@link ResourceResolver} for the given scheme in the 
registry or fallback to a factory finder
      * mechanism if none found.
diff --git a/dsl/camel-kamelet-main/pom.xml b/dsl/camel-kamelet-main/pom.xml
index 4641c8aec6d..e97a54cbc2d 100644
--- a/dsl/camel-kamelet-main/pom.xml
+++ b/dsl/camel-kamelet-main/pom.xml
@@ -96,10 +96,6 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-vertx-http</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-resourceresolver-github</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-yaml-dsl</artifactId>
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderResourceLoader.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderResourceLoader.java
new file mode 100644
index 00000000000..a360540e248
--- /dev/null
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderResourceLoader.java
@@ -0,0 +1,29 @@
+package org.apache.camel.main;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.engine.DefaultResourceLoader;
+import org.apache.camel.spi.Resource;
+import org.apache.camel.util.StringHelper;
+
+class DependencyDownloaderResourceLoader extends DefaultResourceLoader {
+
+    public DependencyDownloaderResourceLoader(CamelContext camelContext) {
+        super(camelContext);
+    }
+
+    @Override
+    public Resource resolveResource(String uri) {
+        String scheme = StringHelper.before(uri, ":");
+        if ("github".equals(scheme) || "gist".equals(scheme)) {
+            if (!hasResourceResolver(scheme)) {
+                // need to download github resolver
+                if (!DownloaderHelper.alreadyOnClasspath(
+                        getCamelContext(), "org.apache.camel", 
"camel-resourceresolver-github", getCamelContext().getVersion())) {
+                    DownloaderHelper.downloadDependency(getCamelContext(), 
"org.apache.camel", "camel-resourceresolver-github", 
getCamelContext().getVersion());
+                }
+            }
+        }
+        return super.resolveResource(uri);
+    }
+
+}
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index d6188a09392..b695a58c7f4 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -295,6 +295,7 @@ public class KameletMain extends MainCommandLineSupport {
                 answer.setComponentResolver(new 
DependencyDownloaderComponentResolver(answer, stub));
                 answer.setDataFormatResolver(new 
DependencyDownloaderDataFormatResolver(answer));
                 answer.setLanguageResolver(new 
DependencyDownloaderLanguageResolver(answer));
+                answer.setResourceLoader(new 
DependencyDownloaderResourceLoader(answer));
                 answer.addService(new DependencyDownloaderKamelet());
             } catch (Exception e) {
                 throw RuntimeCamelException.wrapRuntimeException(e);

Reply via email to