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);
             }

Reply via email to