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);