This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new 3583d1e1 Fix #945
3583d1e1 is described below
commit 3583d1e139710be37b5ff77e6a870200b88dcaf1
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Mon Oct 23 12:10:11 2023 -0400
Fix #945
---
karavan-core/src/core/api/CamelDefinitionApi.ts | 5 +++++
.../src/core/api/CamelDefinitionYamlStep.ts | 5 +++++
karavan-core/src/core/model/CamelMetadata.ts | 10 ++++-----
.../camel/karavan/generator/AbstractGenerator.java | 23 +++++++++++++++----
.../generator/CamelDefinitionApiGenerator.java | 21 +++++++----------
.../generator/CamelDefinitionGenerator.java | 4 ++--
.../CamelDefinitionYamlStepGenerator.java | 19 +++++-----------
.../karavan/generator/CamelMetadataGenerator.java | 26 ++++++++++++++++------
8 files changed, 69 insertions(+), 44 deletions(-)
diff --git a/karavan-core/src/core/api/CamelDefinitionApi.ts
b/karavan-core/src/core/api/CamelDefinitionApi.ts
index c856e3e1..aea9a15c 100644
--- a/karavan-core/src/core/api/CamelDefinitionApi.ts
+++ b/karavan-core/src/core/api/CamelDefinitionApi.ts
@@ -1195,6 +1195,11 @@ export class CamelDefinitionApi {
if (element?.errorHandler !== undefined) {
def.errorHandler =
CamelDefinitionApi.createErrorHandlerDefinition(element.errorHandler);
}
+ def.intercept = element && element?.intercept ?
element?.intercept.map((x:any) =>
CamelDefinitionApi.createInterceptDefinition(x)) :[];
+ def.interceptFrom = element && element?.interceptFrom ?
element?.interceptFrom.map((x:any) =>
CamelDefinitionApi.createInterceptFromDefinition(x)) :[];
+ def.interceptSendToEndpoint = element &&
element?.interceptSendToEndpoint ? element?.interceptSendToEndpoint.map((x:any)
=> CamelDefinitionApi.createInterceptSendToEndpointDefinition(x)) :[];
+ def.onException = element && element?.onException ?
element?.onException.map((x:any) =>
CamelDefinitionApi.createOnExceptionDefinition(x)) :[];
+ def.onCompletion = element && element?.onCompletion ?
element?.onCompletion.map((x:any) =>
CamelDefinitionApi.createOnCompletionDefinition(x)) :[];
return def;
}
diff --git a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
index 646bb533..b87c31d4 100644
--- a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
@@ -1936,6 +1936,9 @@ export class CamelDefinitionYamlStep {
static readRouteConfigurationDefinition = (element: any):
RouteConfigurationDefinition => {
let def = element ? new RouteConfigurationDefinition({...element}) :
new RouteConfigurationDefinition();
+ def.onCompletion = element && element?.onCompletion ?
element?.onCompletion.map((x:any) =>
CamelDefinitionYamlStep.readOnCompletionDefinition(x.onCompletion)) :[];
+ def.interceptSendToEndpoint = element &&
element?.interceptSendToEndpoint ? element?.interceptSendToEndpoint.map((x:any)
=>
CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(x.interceptSendToEndpoint))
:[];
+ def.intercept = element && element?.intercept ?
element?.intercept.map((x:any) =>
CamelDefinitionYamlStep.readInterceptDefinition(x.intercept)) :[];
if (element?.errorHandler !== undefined) {
if (Array.isArray(element.errorHandler)) {
def.errorHandler =
CamelDefinitionYamlStep.readErrorHandlerDefinition(element.errorHandler[0]);
@@ -1943,6 +1946,8 @@ export class CamelDefinitionYamlStep {
def.errorHandler =
CamelDefinitionYamlStep.readErrorHandlerDefinition(element.errorHandler);
}
}
+ def.onException = element && element?.onException ?
element?.onException.map((x:any) =>
CamelDefinitionYamlStep.readOnExceptionDefinition(x.onException)) :[];
+ def.interceptFrom = element && element?.interceptFrom ?
element?.interceptFrom.map((x:any) =>
CamelDefinitionYamlStep.readInterceptFromDefinition(x.interceptFrom)) :[];
return def;
}
diff --git a/karavan-core/src/core/model/CamelMetadata.ts
b/karavan-core/src/core/model/CamelMetadata.ts
index 3bc408fd..cc65e35f 100644
--- a/karavan-core/src/core/model/CamelMetadata.ts
+++ b/karavan-core/src/core/model/CamelMetadata.ts
@@ -1937,11 +1937,11 @@ export const CamelModelMetadata: ElementMeta[] = [
]),
new ElementMeta('routeConfiguration', 'RouteConfigurationDefinition',
'Route Configuration', "Reusable configuration for Camel route(s).",
'configuration', [
new PropertyMeta('errorHandler', 'Error Handler', "Sets the error
handler to use, for routes that has not already been configured with an error
handler.", 'ErrorHandlerDefinition', '', '', false, false, false, true, '', ''),
- new PropertyMeta('intercept', 'Intercept', "Adds a route for an
interceptor that intercepts every processing step.", 'object', '', '', false,
false, true, true, '', ''),
- new PropertyMeta('interceptFrom', 'Intercept From', "Adds a route for
an interceptor that intercepts incoming messages on the given endpoint.",
'object', '', '', false, false, true, true, '', ''),
- new PropertyMeta('interceptSendToEndpoint', 'Intercept Send To
Endpoint', "Applies a route for an interceptor if an exchange is send to the
given endpoint", 'object', '', '', false, false, true, true, '', ''),
- new PropertyMeta('onException', 'On Exception', "Exception clause for
catching certain exceptions and handling them.", 'object', '', '', false,
false, true, true, '', ''),
- new PropertyMeta('onCompletion', 'On Completion', "On completion
callback for doing custom routing when the org.apache.camel.Exchange is
complete.", 'object', '', '', false, false, true, true, '', ''),
+ new PropertyMeta('intercept', 'Intercept', "Adds a route for an
interceptor that intercepts every processing step.", 'InterceptDefinition', '',
'', false, false, true, true, '', ''),
+ new PropertyMeta('interceptFrom', 'Intercept From', "Adds a route for
an interceptor that intercepts incoming messages on the given endpoint.",
'InterceptFromDefinition', '', '', false, false, true, true, '', ''),
+ new PropertyMeta('interceptSendToEndpoint', 'Intercept Send To
Endpoint', "Applies a route for an interceptor if an exchange is send to the
given endpoint", 'InterceptSendToEndpointDefinition', '', '', false, false,
true, true, '', ''),
+ new PropertyMeta('onException', 'On Exception', "Exception clause for
catching certain exceptions and handling them.", 'OnExceptionDefinition', '',
'', false, false, true, true, '', ''),
+ new PropertyMeta('onCompletion', 'On Completion', "On completion
callback for doing custom routing when the org.apache.camel.Exchange is
complete.", 'OnCompletionDefinition', '', '', false, false, true, true, '', ''),
new PropertyMeta('precondition', 'Precondition', "The predicate of the
precondition in simple language to evaluate in order to determine if this route
configuration should be included or not.", 'string', '', '', false, false,
false, false, 'advanced', ''),
new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '',
'', false, false, false, false, '', ''),
]),
diff --git
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
index 78f0fd6f..7ea20a93 100644
---
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
+++
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
@@ -41,6 +41,7 @@ import java.util.stream.Collectors;
public class AbstractGenerator {
Logger LOGGER = Logger.getLogger(AbstractGenerator.class.getName());
+ protected static boolean print = false;
protected Vertx vertx = Vertx.vertx();
@@ -117,9 +118,8 @@ public class AbstractGenerator {
return properties;
}
- protected Map<String, JsonObject> getClassProperties (JsonObject obj) {
+ protected Map<String, JsonObject> getClassProperties (String stepName,
JsonObject obj) {
Map<String, JsonObject> properties = new LinkedHashMap<>();
-
obj.getMap().keySet().forEach(key -> {
if (key.equals("oneOf")) {
JsonObject val =
obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties");
@@ -320,8 +320,19 @@ public class AbstractGenerator {
return classSimple(attribute.getString("$ref"));
}
- protected String getAttributeArrayClass(JsonObject attribute) {
- return classSimple(attribute.getJsonObject("items").getString("$ref"));
+ protected String getAttributeArrayClass(String stepName, JsonObject
attribute) {
+ if (attribute.containsKey("items")) {
+ JsonObject items = attribute.getJsonObject("items");
+ if (items.containsKey("$ref")) {
+ return classSimple(items.getString("$ref"));
+ } else if (items.containsKey("properties")) {
+ JsonObject properties = items.getJsonObject("properties");
+ return
classSimple(properties.getJsonObject(stepName).getString("$ref"));
+ } else {
+ return items.getString("type");
+ }
+ }
+ return "string";
}
protected String classSimple(String classFullName) {
@@ -400,4 +411,8 @@ public class AbstractGenerator {
protected JsonObject getDefinition(JsonObject definitions, String
className) {
return
definitions.getJsonObject(className.replace("#/items/definitions/", ""));
}
+
+ protected boolean isAttributeRefArray(JsonObject attribute) {
+ return attribute.containsKey("type") &&
attribute.getString("type").equals("array");
+ }
}
diff --git
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java
index e440c396..63fb37a9 100644
---
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java
+++
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java
@@ -140,7 +140,9 @@ public final class CamelDefinitionApiGenerator extends
AbstractGenerator {
String className = classSimple(classFullName);
String stepName = getStepNameForClass(className);
- Map<String, JsonObject> properties = getClassProperties(obj);
+ print = (stepName.equalsIgnoreCase("RouteConfiguration"));
+
+ Map<String, JsonObject> properties = getClassProperties(stepName, obj);
List<String> attrs = new ArrayList<>();
AtomicBoolean hasId = new AtomicBoolean(false);
@@ -149,12 +151,14 @@ public final class CamelDefinitionApiGenerator extends
AbstractGenerator {
if ("id".equals(name)) {
hasId.set(true);
}
- if (isAttributeRefArray(aValue) && name.equals("steps") && !
className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition")
&& ! className.equals("KameletDefinition")) {
+ boolean attributeIsArray = isAttributeRefArray(aValue);
+ String attributeArrayClass = getAttributeArrayClass(name, aValue);
+ if (attributeIsArray && name.equals("steps") && !
className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition")
&& ! className.equals("KameletDefinition")) {
attrs.add(" def.steps =
CamelDefinitionApi.createSteps(element?.steps);");
- } else if (isAttributeRefArray(aValue) && !name.equals("steps")) {
+ } else if (attributeIsArray && !name.equals("steps") &&
!attributeArrayClass.equals("string")) {
String code = String.format(
" def.%1$s = element && element?.%1$s ?
element?.%1$s.map((x:any) => CamelDefinitionApi.create%2$s(x)) :[];"
- , name, getAttributeArrayClass(aValue));
+ , name, attributeArrayClass);
attrs.add(code);
} else if (isAttributeRef(aValue)
&&
!getAttributeClass(aValue).equals("SagaActionUriDefinition") //
SagaActionUriDefinition is exception
@@ -194,13 +198,4 @@ public final class CamelDefinitionApiGenerator extends
AbstractGenerator {
return "";
}
}
-
- private boolean isAttributeRefArray(JsonObject attribute) {
- if (attribute.containsKey("type") &&
attribute.getString("type").equals("array")) {
- JsonObject items = attribute.getJsonObject("items");
- return items.containsKey("$ref");
- } else {
- return false;
- }
- }
}
diff --git
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
index c217b5f1..ee18b7d3 100644
---
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
+++
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
@@ -62,11 +62,11 @@ public final class CamelDefinitionGenerator extends
AbstractGenerator {
private String generateModel(String classFullName, JsonObject obj,
JsonObject definitions, Map<String, JsonObject> dslMetadata) {
String className = classSimple(classFullName);
- Map<String, JsonObject> properties = getClassProperties(obj);
+ String stepName = getStepNameForClass(className);
+ Map<String, JsonObject> properties = getClassProperties(stepName, obj);
List<String> required = obj.containsKey("required") ?
obj.getJsonArray("required").getList() : List.of();
List<String> attrs = new ArrayList<>();
- String stepName = getStepNameForClass(className);
if (className.endsWith("Definition")) {
attrs.add(" stepName?: string = '" + stepName + "'");
} else if (className.endsWith("Expression")) {
diff --git
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java
index 29b40606..12dad4e4 100644
---
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java
+++
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java
@@ -97,7 +97,7 @@ public final class CamelDefinitionYamlStepGenerator extends
AbstractGenerator {
String s1 = getStringToRequired(obj, className);
AtomicReference<String> s3 = new AtomicReference<>("");
- Map<String, JsonObject> properties = getClassProperties(obj);
+ Map<String, JsonObject> properties = getClassProperties(stepName, obj);
Map<String, String> attrs = new HashMap<>();
properties.keySet().stream().sorted(getComparator(stepName)).forEach(aName -> {
@@ -105,14 +105,16 @@ public final class CamelDefinitionYamlStepGenerator
extends AbstractGenerator {
s3.set("\n def = ComponentApi.parseElementUri(def);");
}
JsonObject aValue = properties.get(aName);
- if (isAttributeRefArray(aValue) && aName.equals("steps") && !
className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition")
&& ! className.equals("KameletDefinition")) {
+ boolean attributeIsArray = isAttributeRefArray(aValue);
+ String attributeArrayClass = getAttributeArrayClass(aName, aValue);
+ if (attributeIsArray && aName.equals("steps") && !
className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition")
&& ! className.equals("KameletDefinition")) {
attrs.put(aName, " def.steps =
CamelDefinitionYamlStep.readSteps(element?.steps);\n");
- } else if (isAttributeRefArray(aValue) && !aName.equals("steps")) {
+ } else if (attributeIsArray && !aName.equals("steps") &&
!attributeArrayClass.equals("string")) {
String format = Arrays.asList("intercept", "interceptFrom",
"interceptSendToEndpoint", "onCompletion", "onException").contains(aName)
? " def.%1$s = element && element?.%1$s ?
element?.%1$s.map((x:any) => CamelDefinitionYamlStep.read%2$s(x.%1$s)) :[]; \n"
: " def.%1$s = element && element?.%1$s ?
element?.%1$s.map((x:any) => CamelDefinitionYamlStep.read%2$s(x)) :[]; \n";
- String code = String.format(format, aName,
getAttributeArrayClass(aValue));
+ String code = String.format(format, aName,
attributeArrayClass);
attrs.put(aName, code);
} else if (isAttributeRef(aValue) &&
getAttributeClass(aValue).equals("ExpressionDefinition")) { // Expressions
implicits
String code = String.format(
@@ -162,13 +164,4 @@ public final class CamelDefinitionYamlStepGenerator
extends AbstractGenerator {
return "";
}
}
-
- private boolean isAttributeRefArray(JsonObject attribute) {
- if (attribute.containsKey("type") &&
attribute.getString("type").equals("array")) {
- JsonObject items = attribute.getJsonObject("items");
- return items.containsKey("$ref");
- } else {
- return false;
- }
- }
}
diff --git
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
index d1c9e618..9c94b080 100644
---
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
+++
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
@@ -125,9 +125,10 @@ public final class CamelMetadataGenerator extends
AbstractGenerator {
definitions.getMap().forEach((s, o) -> {
if (s.startsWith("org.apache.camel.model.") &&
s.endsWith("Definition")) {
String name = classSimple(s);
+ String stepName = getStepNameForClass(name);
JsonObject obj = getDefinition(definitions, s);
// JsonObject props = obj.containsKey("oneOf") ?
obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") :
obj.getJsonObject("properties");
- Map<String, JsonObject> properties = getClassProperties(obj);
+ Map<String, JsonObject> properties =
getClassProperties(stepName, obj);
classProps.put(name, JsonObject.mapFrom(properties));
}
});
@@ -180,7 +181,7 @@ public final class CamelMetadataGenerator extends
AbstractGenerator {
if ("inheritErrorHandler".equals(pname) && p == null) {
} else {
- PropertyMeta pm = getAttributeType(new
JsonObject((Map) v));
+ PropertyMeta pm = getAttributeType(pname, new
JsonObject((Map) v));
String displayName = p != null &&
p.containsKey("displayName") ? p.getString("displayName") : pname;
String desc = p != null &&
p.containsKey("description") ? p.getString("description") : pname;
String en = p != null && p.containsKey("enum") ?
p.getString("enum").replace("[", "").replace("]", "") : "";
@@ -219,7 +220,7 @@ public final class CamelMetadataGenerator extends
AbstractGenerator {
return "";
}
- private PropertyMeta getAttributeType(JsonObject attribute) {
+ private PropertyMeta getAttributeType(String pname, JsonObject attribute) {
if (attribute.containsKey("$ref")) {
String classFullName = attribute.getString("$ref");
String className = classSimple(classFullName);
@@ -232,11 +233,22 @@ public final class CamelMetadataGenerator extends
AbstractGenerator {
return new PropertyMeta(className, false, true);
} else if (attribute.containsKey("type") &&
attribute.getString("type").equals("array")) {
JsonObject items = attribute.getJsonObject("items");
- if (items.containsKey("$ref") &&
items.getString("$ref").equals("#/items/definitions/org.apache.camel.model.ProcessorDefinition"))
{
- return new PropertyMeta("CamelElement", true, true);
+ if (items.containsKey("properties") &&
items.getJsonObject("properties").containsKey(pname)) {
+ String t =
items.getJsonObject("properties").getJsonObject(pname).getString("$ref");
+ if
(t.equals("#/items/definitions/org.apache.camel.model.ProcessorDefinition")) {
+ return new PropertyMeta("CamelElement", true, true);
+ } else {
+ String className = classSimple(t);
+ return new PropertyMeta(className, true, true);
+ }
} else if (items.containsKey("$ref")) {
- String className = classSimple(items.getString("$ref"));
- return new PropertyMeta(className, true, true);
+ String t = items.getString("$ref");
+ if
(t.equals("#/items/definitions/org.apache.camel.model.ProcessorDefinition")) {
+ return new PropertyMeta("CamelElement", true, true);
+ } else {
+ String className = classSimple(t);
+ return new PropertyMeta(className, true, true);
+ }
} else {
return new PropertyMeta(items.getString("type"), true, false);
}