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

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

commit 248f7026ede9c19d4d2b18d11228484218322ebc
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Apr 24 09:58:18 2025 +0200

    CAMEL-22015: camel-jbang - Export with language/dataformat component should 
resolve dependency
---
 .../camel/dsl/jbang/core/commands/ExportTest.java  |  4 +-
 .../java/org/apache/camel/main/KameletMain.java    |  2 +
 .../main/download/DownloadEndpointStrategy.java    | 64 ++++++++++++++++++++++
 3 files changed, 68 insertions(+), 2 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index 565f332a77b..9638633a61d 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -551,7 +551,7 @@ class ExportTest {
         Assertions.assertEquals("route", model.getArtifactId());
         Assertions.assertEquals("1.0.0", model.getVersion());
 
-        /*        if (rt == RuntimeType.main) {
+        if (rt == RuntimeType.main) {
             Assertions.assertTrue(containsDependency(model.getDependencies(), 
"org.apache.camel", "camel-groovy", null));
         } else if (rt == RuntimeType.springBoot) {
             Assertions.assertTrue(
@@ -559,7 +559,7 @@ class ExportTest {
         } else if (rt == RuntimeType.quarkus) {
             Assertions.assertTrue(
                     containsDependency(model.getDependencies(), 
"org.apache.camel.quarkus", "camel-quarkus-groovy", null));
-        }*/
+        }
 
         File f = 
workingDir.toPath().resolve("src/main/resources/demo.groovy").toFile();
         Assertions.assertTrue(f.isFile());
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 dc93855cff4..2559fb89448 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
@@ -58,6 +58,7 @@ import 
org.apache.camel.main.download.DependencyDownloaderRoutesLoader;
 import org.apache.camel.main.download.DependencyDownloaderStrategy;
 import org.apache.camel.main.download.DependencyDownloaderTransformerResolver;
 import org.apache.camel.main.download.DependencyDownloaderUriFactoryResolver;
+import org.apache.camel.main.download.DownloadEndpointStrategy;
 import org.apache.camel.main.download.DownloadListener;
 import org.apache.camel.main.download.DownloadModelineParser;
 import org.apache.camel.main.download.ExportPropertiesParser;
@@ -623,6 +624,7 @@ public class KameletMain extends MainCommandLineSupport {
                     ff, answer, 
Optional.ofNullable(camelVersion).map(Object::toString).orElse(null), export);
             
answer.getCamelContextExtension().addContextPlugin(PeriodTaskResolver.class, 
ptr);
 
+            answer.getCamelContextExtension().registerEndpointCallback(new 
DownloadEndpointStrategy(answer, silent));
             
answer.getCamelContextExtension().addContextPlugin(ComponentResolver.class,
                     new DependencyDownloaderComponentResolver(answer, 
stubPattern, silent, transform));
             
answer.getCamelContextExtension().addContextPlugin(DataFormatResolver.class,
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadEndpointStrategy.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadEndpointStrategy.java
new file mode 100644
index 00000000000..2fb0559c9ed
--- /dev/null
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadEndpointStrategy.java
@@ -0,0 +1,64 @@
+/*
+ * 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.main.download;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.spi.EndpointStrategy;
+import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.StringHelper;
+
+public class DownloadEndpointStrategy implements EndpointStrategy {
+
+    private final CamelContext camelContext;
+
+    public DownloadEndpointStrategy(CamelContext camelContext, boolean silent) 
{
+        this.camelContext = camelContext;
+    }
+
+    @Override
+    public Endpoint registerEndpoint(String uri, Endpoint endpoint) {
+        String scheme = StringHelper.before(uri, ":");
+
+        if ("language".equals(scheme)) {
+            String name = extractName(uri);
+            if (name != null) {
+                camelContext.resolveLanguage(name);
+            }
+        } else if ("dataformat".equals(scheme)) {
+            String name = extractName(uri);
+            if (name != null) {
+                camelContext.resolveDataFormat(name);
+            }
+        }
+        return endpoint;
+    }
+
+    private static String extractName(String uri) {
+        uri = StringHelper.before(uri, "?", uri);
+        int count = StringHelper.countChar(uri, ':');
+        String name;
+        if (count > 1) {
+            name = StringHelper.between(uri, ":", ":");
+        } else {
+            name = StringHelper.after(uri, ":");
+        }
+        name = FileUtil.stripLeadingSeparator(name);
+        return name;
+    }
+
+}

Reply via email to