You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ji...@apache.org on 2024/03/20 10:56:42 UTC

(camel-quarkus) 10/33: Include dev-consoles into camel-catalog

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

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

commit b3f9ceb78ba9a083d3fe146a486579070dfe3377
Author: James Netherton <ja...@gmail.com>
AuthorDate: Sun Mar 10 09:35:19 2024 +0000

    Include dev-consoles into camel-catalog
---
 .../catalog/quarkus/QuarkusRuntimeProvider.java    | 21 +++++++++++++
 .../quarkus/QuarkusRuntimeProviderTest.java        | 12 ++++++++
 .../ROOT/pages/reference/extensions/core.adoc      |  8 +++++
 .../core/deployment/CamelNativeImageProcessor.java |  5 +++
 .../catalog/BuildTimeJsonSchemaResolver.java       |  5 +++
 .../org/apache/camel/quarkus/core/CamelConfig.java | 11 +++++++
 .../camel/quarkus/core/FastCamelContext.java       | 20 ++++++++++++
 .../org/apache/camel/quarkus/maven/CqCatalog.java  | 36 +++++++++++++++++++---
 .../org/apache/camel/quarkus/maven/CqUtils.java    |  4 +++
 .../quarkus/maven/PrepareCatalogQuarkusMojo.java   |  7 +++--
 .../quarkus/maven/UpdateExtensionDocPageMojo.java  |  2 ++
 11 files changed, 125 insertions(+), 6 deletions(-)

diff --git a/catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java b/catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java
index ab9f6fabdb..4760cda6e2 100644
--- a/catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java
+++ b/catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java
@@ -34,10 +34,12 @@ public class QuarkusRuntimeProvider implements RuntimeProvider {
 
     private static final String COMPONENT_DIR = "org/apache/camel/catalog/quarkus/components";
     private static final String DATAFORMAT_DIR = "org/apache/camel/catalog/quarkus/dataformats";
+    private static final String DEV_CONSOLE_DIR = "org/apache/camel/catalog/quarkus/consoles";
     private static final String LANGUAGE_DIR = "org/apache/camel/catalog/quarkus/languages";
     private static final String TRANSFORMER_DIR = "org/apache/camel/catalog/quarkus/transformers";
     private static final String OTHER_DIR = "org/apache/camel/catalog/quarkus/others";
     private static final String COMPONENTS_CATALOG = "org/apache/camel/catalog/quarkus/components.properties";
+    private static final String DEV_CONSOLE_CATALOG = "org/apache/camel/catalog/quarkus/consoles.properties";
     private static final String DATA_FORMATS_CATALOG = "org/apache/camel/catalog/quarkus/dataformats.properties";
     private static final String LANGUAGE_CATALOG = "org/apache/camel/catalog/quarkus/languages.properties";
     private static final String TRANSFORMER_CATALOG = "org/apache/camel/catalog/quarkus/transformers.properties";
@@ -80,6 +82,11 @@ public class QuarkusRuntimeProvider implements RuntimeProvider {
         return DATAFORMAT_DIR;
     }
 
+    @Override
+    public String getDevConsoleJSonSchemaDirectory() {
+        return DEV_CONSOLE_DIR;
+    }
+
     @Override
     public String getLanguageJSonSchemaDirectory() {
         return LANGUAGE_DIR;
@@ -123,6 +130,20 @@ public class QuarkusRuntimeProvider implements RuntimeProvider {
         return names;
     }
 
+    @Override
+    public List<String> findDevConsoleNames() {
+        List<String> names = new ArrayList<>();
+        InputStream is = camelCatalog.getVersionManager().getResourceAsStream(DEV_CONSOLE_CATALOG);
+        if (is != null) {
+            try {
+                CatalogHelper.loadLines(is, names);
+            } catch (IOException e) {
+                // ignore
+            }
+        }
+        return names;
+    }
+
     @Override
     public List<String> findLanguageNames() {
         List<String> names = new ArrayList<>();
diff --git a/catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java b/catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java
index e3adf83bc6..c508552b4b 100644
--- a/catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java
+++ b/catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java
@@ -152,6 +152,18 @@ public class QuarkusRuntimeProviderTest {
         assertTrue(names.contains("zipFile"));
     }
 
+    @Test
+    public void testFindDevConsoleNames() throws Exception {
+        List<String> names = catalog.findDevConsoleNames();
+
+        assertNotNull(names);
+        assertFalse(names.isEmpty());
+
+        assertTrue(names.contains("context"));
+        assertTrue(names.contains("endpoint"));
+        assertTrue(names.contains("jvm"));
+    }
+
     @Test
     public void testFindLanguageNames() throws Exception {
         List<String> names = catalog.findLanguageNames();
diff --git a/docs/modules/ROOT/pages/reference/extensions/core.adoc b/docs/modules/ROOT/pages/reference/extensions/core.adoc
index 4ca4a1b84c..3523c7b170 100644
--- a/docs/modules/ROOT/pages/reference/extensions/core.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/core.adoc
@@ -200,6 +200,14 @@ Setting this to `false` helps to reduce the size of the native image. In JVM mod
 | `boolean`
 | `true`
 
+|icon:lock[title=Fixed at build time] [[quarkus.camel.runtime-catalog.devconsoles]]`link:#quarkus.camel.runtime-catalog.devconsoles[quarkus.camel.runtime-catalog.devconsoles]`
+
+If `true` the Runtime Camel Catalog embedded in the application will contain JSON schemas of Camel dev consoles available in the application; otherwise dev console JSON schemas will not be available in the Runtime Camel Catalog and any attempt to access those will result in a RuntimeException.
+
+Setting this to `false` helps to reduce the size of the native image. In JVM mode, there is no real benefit of setting this flag to `false` except for making the behavior consistent with native mode.
+| `boolean`
+| `true`
+
 |icon:lock[title=Fixed at build time] [[quarkus.camel.runtime-catalog.models]]`link:#quarkus.camel.runtime-catalog.models[quarkus.camel.runtime-catalog.models]`
 
 If `true` the Runtime Camel Catalog embedded in the application will contain JSON schemas of Camel EIP models available in the application; otherwise EIP model JSON schemas will not be available in the Runtime Camel Catalog and any attempt to access those will result in a RuntimeException.
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java
index 4711587b18..5d551123ff 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java
@@ -43,6 +43,7 @@ import org.apache.camel.Producer;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.engine.DefaultComponentResolver;
 import org.apache.camel.impl.engine.DefaultDataFormatResolver;
+import org.apache.camel.impl.engine.DefaultDevConsoleResolver;
 import org.apache.camel.impl.engine.DefaultLanguageResolver;
 import org.apache.camel.impl.engine.DefaultTransformerResolver;
 import org.apache.camel.quarkus.core.CamelConfig;
@@ -190,6 +191,10 @@ public class CamelNativeImageProcessor {
                             && service.path.startsWith(DefaultDataFormatResolver.DATAFORMAT_RESOURCE_PATH)) {
                         resources.add(new NativeImageResourceBuildItem(jsonPath));
                     }
+                    if (config.runtimeCatalog.devconsoles
+                            && service.path.startsWith(DefaultDevConsoleResolver.DEV_CONSOLE_RESOURCE_PATH)) {
+                        resources.add(new NativeImageResourceBuildItem(jsonPath));
+                    }
                     if (config.runtimeCatalog.languages
                             && service.path.startsWith(DefaultLanguageResolver.LANGUAGE_RESOURCE_PATH)) {
                         resources.add(new NativeImageResourceBuildItem(jsonPath));
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/catalog/BuildTimeJsonSchemaResolver.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/catalog/BuildTimeJsonSchemaResolver.java
index 907941a605..0da3f16b3a 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/catalog/BuildTimeJsonSchemaResolver.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/catalog/BuildTimeJsonSchemaResolver.java
@@ -44,6 +44,11 @@ public class BuildTimeJsonSchemaResolver implements JSonSchemaResolver {
         return resolveJsonSchema("dataformat", name);
     }
 
+    @Override
+    public String getDevConsoleJSonSchema(String name) {
+        throw new UnsupportedOperationException("DevConsole JSON schema resolution is not supported");
+    }
+
     @Override
     public String getLanguageJSonSchema(String name) {
         return resolveJsonSchema("language", name);
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
index 7ba39b5430..0fcffc19ac 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
@@ -329,6 +329,17 @@ public class CamelConfig {
         @ConfigItem(defaultValue = "true")
         public boolean dataformats;
 
+        /**
+         * If {@code true} the Runtime Camel Catalog embedded in the application will contain JSON schemas of Camel
+         * dev consoles available in the application; otherwise dev console JSON schemas will not be available in the
+         * Runtime Camel Catalog and any attempt to access those will result in a RuntimeException.
+         * <p>
+         * Setting this to {@code false} helps to reduce the size of the native image. In JVM mode, there is no real
+         * benefit of setting this flag to {@code false} except for making the behavior consistent with native mode.
+         */
+        @ConfigItem(defaultValue = "true")
+        public boolean devconsoles;
+
         /**
          * If {@code true} the Runtime Camel Catalog embedded in the application will contain JSON schemas of Camel
          * EIP models available in the application; otherwise EIP model JSON schemas will not be available in the
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
index 64ff4fe5e6..1c04bf4c02 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
@@ -24,9 +24,11 @@ import org.apache.camel.CatalogCamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.component.microprofile.config.CamelMicroProfilePropertiesSource;
+import org.apache.camel.console.DevConsole;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.engine.DefaultComponentResolver;
 import org.apache.camel.impl.engine.DefaultDataFormatResolver;
+import org.apache.camel.impl.engine.DefaultDevConsoleResolver;
 import org.apache.camel.impl.engine.DefaultLanguageResolver;
 import org.apache.camel.impl.engine.DefaultShutdownStrategy;
 import org.apache.camel.model.ModelCamelContext;
@@ -241,6 +243,24 @@ public class FastCamelContext extends DefaultCamelContext implements CatalogCame
         return getJsonSchema(clazz.getPackage().getName(), dataFormatName);
     }
 
+    @Override
+    public String getDevConsoleParameterJsonSchema(String devConsoleName) throws IOException {
+        Class<?> clazz;
+
+        Object instance = getRegistry().lookupByNameAndType(devConsoleName, DevConsole.class);
+        if (instance != null) {
+            clazz = instance.getClass();
+        } else {
+            clazz = getCamelContextExtension().getFactoryFinder(DefaultDevConsoleResolver.DEV_CONSOLE_RESOURCE_PATH)
+                    .findClass(devConsoleName).orElse(null);
+            if (clazz == null) {
+                return null;
+            }
+        }
+
+        return getJsonSchema(clazz.getPackage().getName(), devConsoleName);
+    }
+
     @Override
     public String getLanguageParameterJsonSchema(String languageName) throws IOException {
         Class<?> clazz;
diff --git a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java
index 4091a17914..906a2c11ba 100644
--- a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java
+++ b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java
@@ -40,6 +40,7 @@ import org.apache.camel.catalog.impl.CatalogHelper;
 import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.DataFormatModel;
+import org.apache.camel.tooling.model.DevConsoleModel;
 import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.OtherModel;
@@ -164,8 +165,7 @@ public class CqCatalog {
     }
 
     public Stream<ArtifactModel<?>> models() {
-        return kinds()
-                .flatMap(kind -> models(kind));
+        return kinds().flatMap(this::models);
     }
 
     public Stream<ArtifactModel<?>> models(org.apache.camel.catalog.Kind kind) {
@@ -193,12 +193,15 @@ public class CqCatalog {
         case component:
             rawJson = JsonMapper.createParameterJsonSchema((ComponentModel) model);
             break;
-        case language:
-            rawJson = JsonMapper.createParameterJsonSchema((LanguageModel) model);
+        case console:
+            rawJson = JsonMapper.createParameterJsonSchema((DevConsoleModel) model);
             break;
         case dataformat:
             rawJson = JsonMapper.createParameterJsonSchema((DataFormatModel) model);
             break;
+        case language:
+            rawJson = JsonMapper.createParameterJsonSchema((LanguageModel) model);
+            break;
         case transformer:
             rawJson = JsonMapper.createParameterJsonSchema((TransformerModel) model);
             break;
@@ -324,11 +327,13 @@ public class CqCatalog {
 
         private static final String COMPONENT_DIR = CQ_CATALOG_DIR + "/components";
         private static final String DATAFORMAT_DIR = CQ_CATALOG_DIR + "/dataformats";
+        private static final String DEV_CONSOLE_DIR = CQ_CATALOG_DIR + "/consoles";
         private static final String LANGUAGE_DIR = CQ_CATALOG_DIR + "/languages";
         private static final String TRANSFORMER_DIR = CQ_CATALOG_DIR + "/transformers";
         private static final String OTHER_DIR = CQ_CATALOG_DIR + "/others";
         private static final String COMPONENTS_CATALOG = CQ_CATALOG_DIR + "/components.properties";
         private static final String DATA_FORMATS_CATALOG = CQ_CATALOG_DIR + "/dataformats.properties";
+        private static final String DEV_CONSOLE_CATALOG = CQ_CATALOG_DIR + "/consoles.properties";
         private static final String LANGUAGE_CATALOG = CQ_CATALOG_DIR + "/languages.properties";
         private static final String TRANSFORMER_CATALOG = CQ_CATALOG_DIR + "/transformers.properties";
         private static final String OTHER_CATALOG = CQ_CATALOG_DIR + "/others.properties";
@@ -374,6 +379,11 @@ public class CqCatalog {
             return DATAFORMAT_DIR;
         }
 
+        @Override
+        public String getDevConsoleJSonSchemaDirectory() {
+            return DEV_CONSOLE_DIR;
+        }
+
         @Override
         public String getLanguageJSonSchemaDirectory() {
             return LANGUAGE_DIR;
@@ -397,6 +407,10 @@ public class CqCatalog {
             return DATA_FORMATS_CATALOG;
         }
 
+        private String getDevConsoleCatalog() {
+            return DEV_CONSOLE_CATALOG;
+        }
+
         protected String getLanguageCatalog() {
             return LANGUAGE_CATALOG;
         }
@@ -437,6 +451,20 @@ public class CqCatalog {
             return names;
         }
 
+        @Override
+        public List<String> findDevConsoleNames() {
+            List<String> names = new ArrayList<>();
+            InputStream is = getCamelCatalog().getVersionManager().getResourceAsStream(getDevConsoleCatalog());
+            if (is != null) {
+                try {
+                    CatalogHelper.loadLines(is, names);
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+            return names;
+        }
+
         @Override
         public List<String> findLanguageNames() {
             List<String> names = new ArrayList<>();
diff --git a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java
index 8512694874..28aa748c29 100644
--- a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java
+++ b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java
@@ -175,6 +175,8 @@ public class CqUtils {
         switch (kind) {
         case component:
             return "component";
+        case console:
+            return "console";
         case dataformat:
             return "data format";
         case language:
@@ -265,6 +267,8 @@ public class CqUtils {
         switch (kind) {
         case component:
             return JsonMapper.generateComponentModel(JsonMapper.asJsonObject((ComponentModel) model));
+        case console:
+            return null;
         case dataformat:
             return JsonMapper.generateDataFormatModel(JsonMapper.asJsonObject((DataFormatModel) model));
         case language:
diff --git a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
index 4202644a5f..4c9e91aed6 100644
--- a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
+++ b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
@@ -32,6 +32,7 @@ import org.apache.camel.catalog.Kind;
 import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.DataFormatModel;
+import org.apache.camel.tooling.model.DevConsoleModel;
 import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.OtherModel;
 import org.apache.camel.tooling.model.SupportLevel;
@@ -130,10 +131,12 @@ public class PrepareCatalogQuarkusMojo extends AbstractExtensionListMojo {
                         final Kind extKind = ext.getKind();
                         if (extKind == Kind.component) {
                             model = new ComponentModel();
-                        } else if (extKind == Kind.language) {
-                            model = new LanguageModel();
+                        } else if (extKind == Kind.console) {
+                            model = new DevConsoleModel();
                         } else if (extKind == Kind.dataformat) {
                             model = new DataFormatModel();
+                        } else if (extKind == Kind.language) {
+                            model = new LanguageModel();
                         } else if (extKind == Kind.transformer) {
                             model = new TransformerModel();
                         } else {
diff --git a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java
index 36ba535db0..af6ec15ac5 100644
--- a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java
+++ b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java
@@ -55,6 +55,7 @@ import org.apache.camel.quarkus.maven.processor.SectionIdPostProcessor;
 import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.tooling.model.BaseModel;
 import org.apache.camel.tooling.model.ComponentModel;
+import org.apache.camel.tooling.model.DevConsoleModel;
 import org.apache.camel.tooling.model.TransformerModel;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -112,6 +113,7 @@ public class UpdateExtensionDocPageMojo extends AbstractDocGeneratorMojo {
                 templatesUriBase, encoding);
 
         final List<ArtifactModel<?>> models = catalog.filterModels(ext.getRuntimeArtifactIdBase())
+                .filter(artifactModel -> !(artifactModel instanceof DevConsoleModel))
                 .filter(artifactModel -> !(artifactModel instanceof TransformerModel))
                 .filter(artifactModel -> !artifactModel.getArtifactId().equals("camel-management"))
                 .filter(artifactModel -> !artifactModel.getArtifactId().equals("camel-yaml-io"))