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