You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/10/21 09:39:44 UTC
[camel] 02/04: CAMEL-20024: camel-core-model - Add description for new bean DSL
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch model-apps
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 6e71c0ba4e599664a14a6dcfc2bc5377eca3a18c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Oct 21 11:18:05 2023 +0200
CAMEL-20024: camel-core-model - Add description for new bean DSL
---
.../org/apache/camel/catalog/models-app.properties | 7 ++++
.../org/apache/camel/catalog/models-app/bean.json | 26 ++++++++++++
.../catalog/{models => models-app}/beans.json | 0
.../catalog/{models => models-app}/camel.json | 0
.../camel/catalog/models-app/constructor.json | 18 ++++++++
.../camel/catalog/models-app/constructors.json | 17 ++++++++
.../camel/catalog/models-app/properties.json | 17 ++++++++
.../apache/camel/catalog/models-app/property.json | 19 +++++++++
.../org/apache/camel/catalog/models.properties | 2 -
.../services/org/apache/camel/model.properties | 2 -
.../resources/org/apache/camel/model/app/bean.json | 26 ++++++++++++
.../org/apache/camel/model/app/constructor.json | 18 ++++++++
.../org/apache/camel/model/app/constructors.json | 17 ++++++++
.../org/apache/camel/model/app/properties.json | 17 ++++++++
.../org/apache/camel/model/app/property.json | 19 +++++++++
.../apache/camel/maven/packaging/GenerateMojo.java | 2 +-
.../camel/maven/packaging/PackageModelMojo.java | 2 +
.../camel/maven/packaging/PrepareCatalogMojo.java | 42 +++++++++++++++++++
.../camel/maven/packaging/SchemaGeneratorMojo.java | 49 +++++++++++++++++++---
19 files changed, 290 insertions(+), 10 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app.properties
new file mode 100644
index 00000000000..2a3a0b1b286
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app.properties
@@ -0,0 +1,7 @@
+bean
+beans
+camel
+constructor
+constructors
+properties
+property
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/bean.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/bean.json
new file mode 100644
index 00000000000..ffb007e78e4
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/bean.json
@@ -0,0 +1,26 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "bean",
+ "title": "Bean",
+ "description": "Define custom beans that can be used in your Camel routes and in general.",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.RegistryBeanDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "name": { "index": 0, "kind": "attribute", "displayName": "Name", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the bean (bean id)" },
+ "type": { "index": 1, "kind": "attribute", "displayName": "Type", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class name (fully qualified) of the bean" },
+ "initMethod": { "index": 2, "kind": "attribute", "displayName": "Init Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments, but may throw any exception." },
+ "destroyMethod": { "index": 3, "kind": "attribute", "displayName": "Destroy Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom destroy method to invoke on bean shutdown, such as when Camel is shutting down. The method must have no arguments, but may throw any exception." },
+ "factoryMethod": { "index": 4, "kind": "attribute", "displayName": "Factory Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of method to invoke when creating the bean via a factory bean." },
+ "factoryBean": { "index": 5, "kind": "attribute", "displayName": "Factory Bean", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of factory bean (bean id) to use for creating the bean." },
+ "scriptLanguage": { "index": 6, "kind": "attribute", "displayName": "Script Language", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc." },
+ "constructors": { "index": 7, "kind": "element", "displayName": "Constructors", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.Integer, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional constructor arguments for creating the bean. Arguments correspond to specific index of the constructor argument list, starting from zero." },
+ "properties": { "index": 8, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional properties to set on the created bean." },
+ "script": { "index": 9, "kind": "element", "displayName": "Script", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com\/foo\/myscript.groovy, resource:file:\/var\/myscript.groovy, then its loaded from the external resource." }
+ }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/beans.json
similarity index 100%
rename from catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json
rename to catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/beans.json
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/camel.json
similarity index 100%
rename from catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel.json
rename to catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/camel.json
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructor.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructor.json
new file mode 100644
index 00000000000..8f81bfdb5ec
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructor.json
@@ -0,0 +1,18 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "constructor",
+ "title": "Constructor",
+ "description": "Bean constructor argument",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanConstructorDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "index": { "index": 0, "kind": "attribute", "displayName": "Index", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor argument index. The first argument must use index 0." },
+ "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The argument value for the constructor." }
+ }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructors.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructors.json
new file mode 100644
index 00000000000..2d1bc3fd03b
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructors.json
@@ -0,0 +1,17 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "constructors",
+ "title": "Constructors",
+ "description": "Bean constructor arguments",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanConstructorsDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "constructor": { "index": 0, "kind": "element", "displayName": "Constructor", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanConstructorDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor arguments" }
+ }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/properties.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/properties.json
new file mode 100644
index 00000000000..c271a00ba25
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/properties.json
@@ -0,0 +1,17 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "properties",
+ "title": "Properties",
+ "description": "Bean properties",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "property": { "index": 0, "kind": "element", "displayName": "Property", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanPropertyDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Bean properties" }
+ }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/property.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/property.json
new file mode 100644
index 00000000000..b3ca7e564c8
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/property.json
@@ -0,0 +1,19 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "property",
+ "title": "Property",
+ "description": "Bean property",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanPropertyDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "key": { "index": 0, "kind": "attribute", "displayName": "Key", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the property" },
+ "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The property value" },
+ "properties": { "index": 2, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Optional nested properties." }
+ }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
index 33d1fd59b17..20ed1838a66 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
@@ -7,12 +7,10 @@ base64
basicAuth
batch-config
bean
-beans
bearerToken
bindy
blacklistServiceFilter
cachingServiceDiscovery
-camel
cbor
choice
circuitBreaker
diff --git a/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties b/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
index 3dcbb97fe86..970b6fa8b3a 100644
--- a/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
+++ b/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
@@ -8,12 +8,10 @@ base64
basicAuth
batch-config
bean
-beans
bearerToken
bindy
blacklistServiceFilter
cachingServiceDiscovery
-camel
cbor
choice
circuitBreaker
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/bean.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/bean.json
new file mode 100644
index 00000000000..ffb007e78e4
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/bean.json
@@ -0,0 +1,26 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "bean",
+ "title": "Bean",
+ "description": "Define custom beans that can be used in your Camel routes and in general.",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.RegistryBeanDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "name": { "index": 0, "kind": "attribute", "displayName": "Name", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the bean (bean id)" },
+ "type": { "index": 1, "kind": "attribute", "displayName": "Type", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class name (fully qualified) of the bean" },
+ "initMethod": { "index": 2, "kind": "attribute", "displayName": "Init Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments, but may throw any exception." },
+ "destroyMethod": { "index": 3, "kind": "attribute", "displayName": "Destroy Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom destroy method to invoke on bean shutdown, such as when Camel is shutting down. The method must have no arguments, but may throw any exception." },
+ "factoryMethod": { "index": 4, "kind": "attribute", "displayName": "Factory Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of method to invoke when creating the bean via a factory bean." },
+ "factoryBean": { "index": 5, "kind": "attribute", "displayName": "Factory Bean", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of factory bean (bean id) to use for creating the bean." },
+ "scriptLanguage": { "index": 6, "kind": "attribute", "displayName": "Script Language", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc." },
+ "constructors": { "index": 7, "kind": "element", "displayName": "Constructors", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.Integer, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional constructor arguments for creating the bean. Arguments correspond to specific index of the constructor argument list, starting from zero." },
+ "properties": { "index": 8, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional properties to set on the created bean." },
+ "script": { "index": 9, "kind": "element", "displayName": "Script", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com\/foo\/myscript.groovy, resource:file:\/var\/myscript.groovy, then its loaded from the external resource." }
+ }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructor.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructor.json
new file mode 100644
index 00000000000..8f81bfdb5ec
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructor.json
@@ -0,0 +1,18 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "constructor",
+ "title": "Constructor",
+ "description": "Bean constructor argument",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanConstructorDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "index": { "index": 0, "kind": "attribute", "displayName": "Index", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor argument index. The first argument must use index 0." },
+ "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The argument value for the constructor." }
+ }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructors.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructors.json
new file mode 100644
index 00000000000..2d1bc3fd03b
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructors.json
@@ -0,0 +1,17 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "constructors",
+ "title": "Constructors",
+ "description": "Bean constructor arguments",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanConstructorsDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "constructor": { "index": 0, "kind": "element", "displayName": "Constructor", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanConstructorDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor arguments" }
+ }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/properties.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/properties.json
new file mode 100644
index 00000000000..c271a00ba25
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/properties.json
@@ -0,0 +1,17 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "properties",
+ "title": "Properties",
+ "description": "Bean properties",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "property": { "index": 0, "kind": "element", "displayName": "Property", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanPropertyDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Bean properties" }
+ }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/property.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/property.json
new file mode 100644
index 00000000000..b3ca7e564c8
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/property.json
@@ -0,0 +1,19 @@
+{
+ "model": {
+ "kind": "model",
+ "name": "property",
+ "title": "Property",
+ "description": "Bean property",
+ "deprecated": false,
+ "label": "configuration",
+ "javaType": "org.apache.camel.model.app.BeanPropertyDefinition",
+ "abstract": false,
+ "input": false,
+ "output": false
+ },
+ "properties": {
+ "key": { "index": 0, "kind": "attribute", "displayName": "Key", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the property" },
+ "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The property value" },
+ "properties": { "index": 2, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Optional nested properties." }
+ }
+}
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
index 880ded01115..bb4cc531bec 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
@@ -32,7 +32,7 @@ public class GenerateMojo extends AbstractGenerateMojo {
protected void doExecute() throws MojoFailureException, MojoExecutionException {
// jandex
invoke(PackageJandexMojo.class);
- // generate-schema
+ // generate model json schema
invoke(SchemaGeneratorMojo.class);
// generate-type-converter-loader
invoke(TypeConverterLoaderGeneratorMojo.class);
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java
index 9001985d3d3..89800bba8e1 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java
@@ -68,6 +68,8 @@ public class PackageModelMojo extends AbstractGeneratorMojo {
try (Stream<Path> jsonFiles
= PackageHelper.findJsonFiles(buildDir.toPath().resolve("classes/org/apache/camel/model"))) {
models = jsonFiles
+ // special for app should not be in the summary
+ .filter(p -> !p.getParent().getFileName().toString().endsWith("app"))
.map(p -> p.getFileName().toString())
// strip out .json from the name
.map(s -> s.substring(0, s.length() - PackageHelper.JSON_SUFIX.length()))
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
index 5b9581db001..b47c7da7c0d 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
@@ -120,6 +120,12 @@ public class PrepareCatalogMojo extends AbstractMojo {
@Parameter(defaultValue = "${project.basedir}/src/generated/resources/org/apache/camel/catalog/models")
protected File modelsOutDir;
+ /**
+ * The output directory for models-app catalog
+ */
+ @Parameter(defaultValue = "${project.basedir}/src/generated/resources/org/apache/camel/catalog/models-app")
+ protected File modelsAppOutDir;
+
/**
* The output directory for XML schemas catalog
*/
@@ -352,6 +358,7 @@ public class PrepareCatalogMojo extends AbstractMojo {
}
executeModel();
+ executeModelApps();
Set<String> components = executeComponents();
Set<String> dataformats = executeDataFormats();
Set<String> languages = executeLanguages();
@@ -381,8 +388,10 @@ public class PrepareCatalogMojo extends AbstractMojo {
// find all json files in camel-core
Path coreDirTarget = modelDir.resolve("target/classes/org/apache/camel/model");
+ Path coreModelAppDirTarget = modelDir.resolve("target/classes/org/apache/camel/model/app");
jsonFiles = allJsonFiles.stream()
.filter(p -> p.startsWith(coreDirTarget))
+ .filter(p -> !p.startsWith(coreModelAppDirTarget))
.collect(Collectors.toCollection(TreeSet::new));
getLog().info("Found " + jsonFiles.size() + " model json files");
@@ -432,6 +441,39 @@ public class PrepareCatalogMojo extends AbstractMojo {
printModelsReport(jsonFiles, duplicateJsonFiles, missingLabels, usedLabels, missingJavaDoc);
}
+ protected void executeModelApps() throws Exception {
+ Path modelDir = this.modelDir.toPath();
+ Path modelsOutDir = this.modelsAppOutDir.toPath();
+
+ getLog().info("================================================================================");
+ getLog().info("Copying all Camel model-app json descriptors");
+
+ // lets use sorted set/maps
+ Set<Path> jsonFiles;
+
+ // find all json files in camel-core
+ Path coreDirTarget = modelDir.resolve("target/classes/org/apache/camel/model/app");
+ jsonFiles = allJsonFiles.stream()
+ .filter(p -> p.startsWith(coreDirTarget))
+ .collect(Collectors.toCollection(TreeSet::new));
+ getLog().info("Found " + jsonFiles.size() + " model-app json files");
+
+ // make sure to create out dir
+ Files.createDirectories(modelsOutDir);
+
+ // Copy all descriptors
+ Map<Path, Path> newJsons = map(jsonFiles, p -> p, p -> modelsOutDir.resolve(p.getFileName()));
+ try (Stream<Path> stream = list(modelsOutDir).filter(p -> !newJsons.containsValue(p))) {
+ stream.forEach(this::delete);
+ }
+ newJsons.forEach(this::copy);
+
+ Path all = modelsOutDir.resolve("../models-app.properties");
+ Set<String> modelNames
+ = jsonFiles.stream().map(PrepareCatalogMojo::asComponentName).collect(Collectors.toCollection(TreeSet::new));
+ FileUtil.updateFile(all, String.join("\n", modelNames) + "\n");
+ }
+
protected Set<String> executeComponents() throws Exception {
Path componentsOutDir = this.componentsOutDir.toPath();
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
index bf1935e2c6f..14443a39c1e 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
@@ -81,6 +81,15 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
public static final DotName XML_ROOT_ELEMENT = DotName.createSimple(XmlRootElement.class.getName());
public static final DotName XML_TYPE = DotName.createSimple(XmlType.class.getName());
+ // special for app package
+ private static final DotName APP_PACKAGE = DotName.createSimple("org.apache.camel.model.app");
+ private static final Map<String, String> APP_NAME_MAPPINGS = Map.of(
+ "BeanConstructorDefinition", "constructor",
+ "BeanConstructorsDefinition", "constructors",
+ "BeanPropertiesDefinition", "properties",
+ "BeanPropertyDefinition", "property",
+ "RegistryBeanDefinition", "bean");
+
// special when using expression/predicates in the model
private static final String ONE_OF_TYPE_NAME = "org.apache.camel.model.ExpressionSubElementDefinition";
private static final String[] ONE_OF_LANGUAGES = new String[] {
@@ -150,12 +159,27 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
.filter(cpa -> cpa.target().asClass().name().toString().startsWith("org.apache.camel.model."))
.map(cpa -> cpa.target().asClass())
.collect(Collectors.toSet());
+
if (!coreElements.isEmpty()) {
getLog().info(String.format("Found %d core elements", coreElements.size()));
}
+ // add special for bean DSL in app package
+ Set<ClassInfo> appElements = index.getClassesInPackage(APP_PACKAGE).stream()
+ .filter(cpa -> cpa.hasAnnotation(XML_TYPE))
+ .filter(cpa -> cpa.kind() == Kind.CLASS)
+ .collect(Collectors.toSet());
+
+ if (!coreElements.isEmpty()) {
+ getLog().info(String.format("Found %d app elements", appElements.size()));
+ }
+
+ Set<ClassInfo> classes = new TreeSet<>(Comparator.comparing(ClassInfo::name));
+ classes.addAll(coreElements);
+ classes.addAll(appElements);
+
// we want them to be sorted
- for (ClassInfo element : coreElements) {
+ for (ClassInfo element : classes) {
processModelClass(element);
}
@@ -189,10 +213,26 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
return;
}
- AnnotationValue annotationValue = element.classAnnotation(XML_ROOT_ELEMENT).value("name");
- String aName = annotationValue != null ? annotationValue.asString() : null;
+ String aName = null;
+ if (element.hasAnnotation(XML_ROOT_ELEMENT)) {
+ AnnotationValue av = element.declaredAnnotation(XML_ROOT_ELEMENT).value("name");
+ aName = av != null ? av.asString() : null;
+ }
if (Strings.isNullOrEmpty(aName) || "##default".equals(aName)) {
- aName = element.classAnnotation(XML_TYPE).value("name").asString();
+ if (element.hasAnnotation(XML_TYPE)) {
+ AnnotationValue av = element.declaredAnnotation(XML_TYPE).value("name");
+ aName = av != null ? av.asString() : null;
+ }
+ }
+ if (aName == null) {
+ // special for app package
+ String sn = element.name().withoutPackagePrefix();
+ aName = APP_NAME_MAPPINGS.get(sn);
+ }
+ if (aName == null) {
+ getLog().warn(
+ "Class is not annotated with @XmlRootElement or @XmlType. Skipping class: " + element.name().toString());
+ return;
}
final String name = aName;
@@ -238,7 +278,6 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
resourcesOutputDir.toPath(),
packageName.replace('.', '/') + "/" + fileName,
json);
-
}
private IndexView getIndex() {