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 <ma...@talismancloud.io> 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); }