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 623e27d2d06b6b9932d472866b9e47e5e7200003 Author: James Netherton <jamesnether...@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"))