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

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

commit e65694ff05bb53120de4c6818d74162b2c629c32
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Oct 11 15:51:05 2024 +0200

    CAMEL-21342: camel-kamelet-main - openapi generator should be optional and 
downloaded dynamically
---
 .../apache/camel/model/rest/ParamDefinition.java   |  6 ++---
 dsl/camel-kamelet-main/pom.xml                     | 17 +++++++-------
 .../reload/OpenApiGeneratorReloadStrategy.java     | 26 +++++++++++++++++-----
 tooling/openapi-rest-dsl-generator/pom.xml         |  2 +-
 .../camel/generator/openapi/RestDslGenerator.java  | 13 +++++++++++
 .../generator/openapi/RestDslXmlGenerator.java     |  4 ++--
 .../generator/openapi/RestDslYamlGenerator.java    |  4 ++--
 7 files changed, 49 insertions(+), 23 deletions(-)

diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
index cf755f98e55..fa86aeacda3 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
@@ -104,7 +104,7 @@ public class ParamDefinition {
     }
 
     public String getDescription() {
-        return description != null ? description : "";
+        return description;
     }
 
     /**
@@ -118,7 +118,7 @@ public class ParamDefinition {
      * Sets the parameter default value.
      */
     public String getDefaultValue() {
-        return defaultValue != null ? defaultValue : "";
+        return defaultValue;
     }
 
     public void setDefaultValue(String defaultValue) {
@@ -159,7 +159,7 @@ public class ParamDefinition {
     }
 
     public String getDataType() {
-        return dataType != null ? dataType : "string";
+        return dataType;
     }
 
     /**
diff --git a/dsl/camel-kamelet-main/pom.xml b/dsl/camel-kamelet-main/pom.xml
index 531ed1dcd0d..22b0b68f97d 100644
--- a/dsl/camel-kamelet-main/pom.xml
+++ b/dsl/camel-kamelet-main/pom.xml
@@ -64,6 +64,14 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-kamelet</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-xml-jaxp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-xml-io</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-bean</artifactId>
@@ -126,21 +134,12 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-catalog-console</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-openapi-rest-dsl-generator</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-resourceresolver-github</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-xml-io</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-xml-io-dsl</artifactId>
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
index 846cf37e81e..544b778491a 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
@@ -17,14 +17,15 @@
 package org.apache.camel.main.reload;
 
 import java.io.File;
+import java.lang.reflect.Method;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import org.apache.camel.generator.openapi.RestDslGenerator;
+import org.apache.camel.CamelContext;
+import org.apache.camel.main.download.DependencyDownloader;
 import org.apache.camel.support.FileWatcherResourceReloadStrategy;
+import org.apache.camel.support.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,6 +41,7 @@ public class OpenApiGeneratorReloadStrategy extends 
FileWatcherResourceReloadStr
     private static final String OPENAPI_GENERATED_FILE = 
".camel-jbang/generated-openapi.yaml";
 
     private final File openapi;
+    private Method method;
 
     public OpenApiGeneratorReloadStrategy(File openapi) {
         String parent = openapi.getParent();
@@ -58,9 +60,7 @@ public class OpenApiGeneratorReloadStrategy extends 
FileWatcherResourceReloadStr
 
             LOG.info("Generating open-api rest-dsl from: {}", openapi);
             try {
-                OpenAPIV3Parser parser = new OpenAPIV3Parser();
-                OpenAPI document = parser.read(openapi.getAbsolutePath());
-                String out = 
RestDslGenerator.toYaml(document).generate(getCamelContext(), false);
+                String out = (String) ObjectHelper.invokeMethodSafe(method, 
null, getCamelContext(), openapi);
                 Files.write(Paths.get(OPENAPI_GENERATED_FILE), out.getBytes());
             } catch (Exception e) {
                 LOG.warn("Error generating open-api rest-dsl due: {}", 
e.getMessage(), e);
@@ -68,4 +68,18 @@ public class OpenApiGeneratorReloadStrategy extends 
FileWatcherResourceReloadStr
         });
     }
 
+    @Override
+    protected void doInit() throws Exception {
+        super.doInit();
+
+        DependencyDownloader downloader = 
getCamelContext().hasService(DependencyDownloader.class);
+        // these are extra dependencies used in special use-case so download 
as hidden
+        downloader.downloadHiddenDependency("org.apache.camel", 
"camel-openapi-rest-dsl-generator",
+                getCamelContext().getVersion());
+
+        // the generator is invoked via reflection
+        Class<?> clazz = getCamelContext().getClassResolver()
+                
.resolveMandatoryClass("org.apache.camel.generator.openapi.RestDslGenerator");
+        method = clazz.getDeclaredMethod("generateToYaml", CamelContext.class, 
File.class);
+    }
 }
diff --git a/tooling/openapi-rest-dsl-generator/pom.xml 
b/tooling/openapi-rest-dsl-generator/pom.xml
index b878c429a3e..1a5563b3275 100644
--- a/tooling/openapi-rest-dsl-generator/pom.xml
+++ b/tooling/openapi-rest-dsl-generator/pom.xml
@@ -41,7 +41,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-xml-jaxb</artifactId>
+            <artifactId>camel-xml-io</artifactId>
         </dependency>
         <dependency>
             <groupId>com.squareup</groupId>
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
index f4e839c13b3..ab2d0e7b1da 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.generator.openapi;
 
+import java.io.File;
 import java.net.URI;
 import java.nio.file.Path;
 import java.util.List;
@@ -27,6 +28,8 @@ import javax.annotation.processing.Filer;
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.servers.Server;
 import io.swagger.v3.oas.models.servers.ServerVariable;
+import io.swagger.v3.parser.OpenAPIV3Parser;
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
 
 import static org.apache.camel.util.ObjectHelper.notNull;
@@ -239,4 +242,14 @@ public abstract class RestDslGenerator<G> {
     public static RestDslYamlGenerator toYaml(final OpenAPI document) {
         return new RestDslYamlGenerator(document);
     }
+
+    public static RestDslYamlGenerator toYaml(File path) {
+        OpenAPIV3Parser parser = new OpenAPIV3Parser();
+        OpenAPI document = parser.read(path.getAbsolutePath());
+        return new RestDslYamlGenerator(document);
+    }
+
+    public static String generateToYaml(CamelContext camelContext, File path) 
throws Exception {
+        return toYaml(path).generate(camelContext);
+    }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
index 0082d9909b1..fc8fc0d8882 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
@@ -37,8 +37,8 @@ import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.PathItem;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.xml.LwModelToXMLDumper;
 
 public class RestDslXmlGenerator extends RestDslGenerator<RestDslXmlGenerator> 
{
 
@@ -60,7 +60,7 @@ public class RestDslXmlGenerator extends 
RestDslGenerator<RestDslXmlGenerator> {
         }
 
         final RestsDefinition rests = emitter.result();
-        final String xml = 
PluginHelper.getModelToXMLDumper(context).dumpModelAsXml(context, rests);
+        final String xml = new LwModelToXMLDumper().dumpModelAsXml(context, 
rests);
 
         final DocumentBuilderFactory builderFactory = 
DocumentBuilderFactory.newInstance();
         builderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, 
true);
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
index 6882f482e90..5c042ee13f2 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
@@ -52,8 +52,8 @@ import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.PathItem;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.xml.LwModelToXMLDumper;
 
 public class RestDslYamlGenerator extends 
RestDslGenerator<RestDslYamlGenerator> {
 
@@ -85,7 +85,7 @@ public class RestDslYamlGenerator extends 
RestDslGenerator<RestDslYamlGenerator>
         }
 
         final RestsDefinition rests = emitter.result();
-        final String xml = 
PluginHelper.getModelToXMLDumper(context).dumpModelAsXml(context, rests);
+        final String xml = new LwModelToXMLDumper().dumpModelAsXml(context, 
rests);
 
         final DocumentBuilderFactory builderFactory = 
DocumentBuilderFactory.newInstance();
         builderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, 
true);

Reply via email to