This is an automated email from the ASF dual-hosted git repository.
igarashitm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new d9452d61f26 [CAMEL-19836] camel-yaml-dsl: schema: fix
routeConfiguration/{onException,onCompletion,intercept,interceptFrom,interceptSendToEndpoint}
(#11309)
d9452d61f26 is described below
commit d9452d61f269772c77978620db24f28c2ed7c6c5
Author: Tomohisa Igarashi <[email protected]>
AuthorDate: Wed Sep 6 06:29:26 2023 -0400
[CAMEL-19836] camel-yaml-dsl: schema: fix
routeConfiguration/{onException,onCompletion,intercept,interceptFrom,interceptSendToEndpoint}
(#11309)
---
.../apache/camel/spi/annotations/YamlProperty.java | 2 +
.../RouteConfigurationDefinitionDeserializer.java | 14 +++--
.../maven/dsl/yaml/GenerateYamlSchemaMojo.java | 69 +++++++++++++++-------
.../generated/resources/schema/camelYamlDsl.json | 35 +++++++++--
.../apache/camel/spi/annotations/YamlProperty.java | 2 +
5 files changed, 91 insertions(+), 31 deletions(-)
diff --git
a/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/YamlProperty.java
b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/YamlProperty.java
index 922b0d7ea79..764b5b4031e 100644
---
a/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/YamlProperty.java
+++
b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/YamlProperty.java
@@ -43,4 +43,6 @@ public @interface YamlProperty {
String[] values() default {};
String oneOf() default "";
+
+ boolean wrapItem() default false;
}
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java
index eefeb01df99..efecc25942a 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteConfigurationDefinitionDeserializer.java
@@ -44,12 +44,16 @@ import org.snakeyaml.engine.v2.nodes.NodeTuple;
@YamlProperty(name = "id", type = "string"),
@YamlProperty(name = "precondition", type = "string"),
@YamlProperty(name = "error-handler", type =
"object:org.apache.camel.model.ErrorHandlerDefinition"),
- @YamlProperty(name = "intercept", type =
"array:org.apache.camel.model.InterceptDefinition"),
- @YamlProperty(name = "intercept-from", type =
"array:org.apache.camel.model.InterceptFromDefinition"),
- @YamlProperty(name = "intercept-send-to-endpoint",
+ @YamlProperty(name = "intercept", wrapItem = true,
+ type =
"array:org.apache.camel.model.InterceptDefinition"),
+ @YamlProperty(name = "intercept-from", wrapItem = true,
+ type =
"array:org.apache.camel.model.InterceptFromDefinition"),
+ @YamlProperty(name = "intercept-send-to-endpoint", wrapItem
= true,
type =
"array:org.apache.camel.model.InterceptSendToEndpointDefinition"),
- @YamlProperty(name = "on-completion", type =
"array:org.apache.camel.model.OnCompletionDefinition"),
- @YamlProperty(name = "on-exception", type =
"array:org.apache.camel.model.OnExceptionDefinition")
+ @YamlProperty(name = "on-completion", wrapItem = true,
+ type =
"array:org.apache.camel.model.OnCompletionDefinition"),
+ @YamlProperty(name = "on-exception", wrapItem = true,
+ type =
"array:org.apache.camel.model.OnExceptionDefinition")
})
public class RouteConfigurationDefinitionDeserializer extends
YamlDeserializerBase<RouteConfigurationDefinition> {
public RouteConfigurationDefinitionDeserializer() {
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
index 6f49eab9dda..281c211dfc9 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
@@ -235,6 +235,9 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
final String propertyOneOf = annotationValue(property, "oneOf")
.map(AnnotationValue::asString)
.orElse("");
+ final boolean propertyWrapItem = annotationValue(property,
"wrapItem")
+ .map(AnnotationValue::asBoolean)
+ .orElse(false);
boolean isInOneOf = !StringUtils.isEmpty(propertyOneOf);
if (isInOneOf) {
@@ -297,7 +300,8 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
propertyDisplayName,
propertyDefaultValue,
propertyFormat,
- propertyDeprecated);
+ propertyDeprecated,
+ propertyWrapItem);
if (propertyRequired) {
String name = kebabCase ? propertyName :
StringHelper.dashToCamelCase(propertyName);
@@ -320,26 +324,34 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
if (node.has("required")) {
required = node.withArray("required");
}
- Map<String, JsonNode> rebuild = new LinkedHashMap<>();
- // the properties are in mixed kebab-case and camelCase
- for (Iterator<String> it = props.fieldNames(); it.hasNext();) {
- String n = it.next();
- String t = StringHelper.dashToCamelCase(n);
- JsonNode prop = props.get(n);
- rebuild.put(t, prop);
- if (required != null) {
- for (int i = 0; i < required.size(); i++) {
- String r = required.get(i).asText();
- if (r.equals(n)) {
- required.set(i, t);
- }
+ kebabToCamelCaseProperties(props, required);
+ }
+ }
+
+ private void kebabToCamelCaseProperties(ObjectNode props, ArrayNode
required) {
+ Map<String, JsonNode> rebuild = new LinkedHashMap<>();
+ // the properties are in mixed kebab-case and camelCase
+ for (Iterator<String> it = props.fieldNames(); it.hasNext();) {
+ String n = it.next();
+ String t = StringHelper.dashToCamelCase(n);
+ JsonNode prop = props.get(n);
+ JsonNode subProps = prop.findPath("properties");
+ if (!subProps.isMissingNode()) {
+ kebabToCamelCaseProperties((ObjectNode) subProps, null);
+ }
+ rebuild.put(t, prop);
+ if (required != null) {
+ for (int i = 0; i < required.size(); i++) {
+ String r = required.get(i).asText();
+ if (r.equals(n)) {
+ required.set(i, t);
}
}
}
- if (!rebuild.isEmpty()) {
- props.removeAll();
- rebuild.forEach(props::set);
- }
+ }
+ if (!rebuild.isEmpty()) {
+ props.removeAll();
+ rebuild.forEach(props::set);
}
}
@@ -351,7 +363,8 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
String propertyDisplayName,
String propertyDefaultValue,
String propertyFormat,
- boolean deprecated) {
+ boolean deprecated,
+ boolean wrapItem) {
final ObjectNode current = objectDefinition.withObject("/properties/"
+ propertyName);
current.put("type", propertyType);
@@ -385,9 +398,23 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
String arrayType = StringHelper.after(propertyType, ":");
if (arrayType.contains(".")) {
- current.withObject("/items").put("$ref",
"#/items/definitions/" + arrayType);
+ if (wrapItem) {
+ current.withObject("/items")
+ .put("type", "object")
+ .withObject("/properties/" + propertyName)
+ .put("$ref", "#/items/definitions/" + arrayType);
+ } else {
+ current.withObject("/items").put("$ref",
"#/items/definitions/" + arrayType);
+ }
} else {
- current.withObject("/items").put("type", arrayType);
+ if (wrapItem) {
+ current.withObject("/items")
+ .put("type", "object")
+ .withObject("/properties/" + propertyName)
+ .put("type", arrayType);
+ } else {
+ current.withObject("/items").put("type", arrayType);
+ }
}
} else if (propertyType.startsWith("enum:")) {
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index fea10503fad..3c3b0ac7d31 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -4702,31 +4702,56 @@
"intercept" : {
"type" : "array",
"items" : {
- "$ref" :
"#/items/definitions/org.apache.camel.model.InterceptDefinition"
+ "type" : "object",
+ "properties" : {
+ "intercept" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.InterceptDefinition"
+ }
+ }
}
},
"interceptFrom" : {
"type" : "array",
"items" : {
- "$ref" :
"#/items/definitions/org.apache.camel.model.InterceptFromDefinition"
+ "type" : "object",
+ "properties" : {
+ "interceptFrom" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.InterceptFromDefinition"
+ }
+ }
}
},
"interceptSendToEndpoint" : {
"type" : "array",
"items" : {
- "$ref" :
"#/items/definitions/org.apache.camel.model.InterceptSendToEndpointDefinition"
+ "type" : "object",
+ "properties" : {
+ "interceptSendToEndpoint" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.InterceptSendToEndpointDefinition"
+ }
+ }
}
},
"onCompletion" : {
"type" : "array",
"items" : {
- "$ref" :
"#/items/definitions/org.apache.camel.model.OnCompletionDefinition"
+ "type" : "object",
+ "properties" : {
+ "onCompletion" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.OnCompletionDefinition"
+ }
+ }
}
},
"onException" : {
"type" : "array",
"items" : {
- "$ref" :
"#/items/definitions/org.apache.camel.model.OnExceptionDefinition"
+ "type" : "object",
+ "properties" : {
+ "onException" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.OnExceptionDefinition"
+ }
+ }
}
},
"precondition" : {
diff --git
a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/YamlProperty.java
b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/YamlProperty.java
index 922b0d7ea79..764b5b4031e 100644
---
a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/YamlProperty.java
+++
b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/YamlProperty.java
@@ -43,4 +43,6 @@ public @interface YamlProperty {
String[] values() default {};
String oneOf() default "";
+
+ boolean wrapItem() default false;
}