You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2021/12/06 23:54:30 UTC

[camel-karavan] branch main updated: Fixed #141 (#143)

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 e8f8594  Fixed #141 (#143)
e8f8594 is described below

commit e8f8594e245afe801988a1311e1685e86eb80d0c
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Mon Dec 6 18:54:22 2021 -0500

    Fixed #141 (#143)
---
 karavan-designer/src/App.tsx                              |  4 +---
 karavan-designer/src/designer/api/CamelApi.tsx            | 14 ++++++++++++++
 .../apache/camel/karavan/generator/AbstractGenerator.java | 15 +++++++++++++--
 .../camel/karavan/generator/CamelModelGenerator.java      | 14 +++++++++++---
 4 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/karavan-designer/src/App.tsx b/karavan-designer/src/App.tsx
index df7f5cf..2e78822 100644
--- a/karavan-designer/src/App.tsx
+++ b/karavan-designer/src/App.tsx
@@ -52,6 +52,7 @@ class App extends React.Component<Props, State> {
             '                constant: "Hello Yaml !!!"\n' +
             '          - pollEnrich:\n' +
             '              expression: {}\n' +
+            '          - log: \'${body}\'\n' +
             '          - to: \n' +
             '               uri: "log:info:xxx"\n' +
             '               parameters:\n' +
@@ -67,7 +68,6 @@ class App extends React.Component<Props, State> {
         key: ''
     };
 
-
     componentDidMount() {
 
         ["http-secured-sink.kamelet.yaml",
@@ -85,7 +85,6 @@ class App extends React.Component<Props, State> {
                 .then((r) => r.text())
                 .then(value => KameletApi.saveKamelet(value)));
 
-
         ["bonita.json",
             "activemq.json",
             "docker.json",
@@ -104,7 +103,6 @@ class App extends React.Component<Props, State> {
                 .then((r) => r.text())
                 .then(value => ComponentApi.saveComponent(value)));
 
-
     }
 
     save(filename: string, yaml: string) {
diff --git a/karavan-designer/src/designer/api/CamelApi.tsx b/karavan-designer/src/designer/api/CamelApi.tsx
index 7db2f49..2b31b00 100644
--- a/karavan-designer/src/designer/api/CamelApi.tsx
+++ b/karavan-designer/src/designer/api/CamelApi.tsx
@@ -181,6 +181,7 @@ export class CamelApi {
         return new Expression({...element})
     }
     static createFrom = (element: any): FromStep => {
+        if (element && element.from && typeof element.from === 'string') element.from = {uri: element.from};
         const fromStep = element ? new FromStep({...element.from}) : new FromStep();
         fromStep.from.steps = CamelApi.createSteps(element?.from?.steps);
         fromStep.uuid = element?.uuid ? element.uuid : fromStep.uuid;
@@ -215,6 +216,7 @@ export class CamelApi {
     }
 
     static createToD = (element: any): ToDStep => {
+        if (element && element.toD && typeof element.toD === 'string') element.toD = {uri: element.toD};
         const toDStep = element ? new ToDStep({...element.toD}) : new ToDStep();
         toDStep.uuid = element?.uuid ? element.uuid : toDStep.uuid;
         return toDStep;
@@ -227,6 +229,7 @@ export class CamelApi {
     }
 
     static createInterceptSendToEndpoint = (element: any): InterceptSendToEndpointStep => {
+        if (element && element.interceptSendToEndpoint && typeof element.interceptSendToEndpoint === 'string') element.interceptSendToEndpoint = {uri: element.interceptSendToEndpoint};
         const interceptSendToEndpointStep = element ? new InterceptSendToEndpointStep({...element.interceptSendToEndpoint}) : new InterceptSendToEndpointStep();
         interceptSendToEndpointStep.interceptSendToEndpoint.steps = CamelApi.createSteps(element?.interceptSendToEndpoint?.steps);
         interceptSendToEndpointStep.uuid = element?.uuid ? element.uuid : interceptSendToEndpointStep.uuid;
@@ -234,6 +237,7 @@ export class CamelApi {
     }
 
     static createLog = (element: any): LogStep => {
+        if (element && element.log && typeof element.log === 'string') element.log = {message: element.log};
         const logStep = element ? new LogStep({...element.log}) : new LogStep();
         logStep.uuid = element?.uuid ? element.uuid : logStep.uuid;
         return logStep;
@@ -313,6 +317,7 @@ export class CamelApi {
     }
 
     static createRemoveHeaders = (element: any): RemoveHeadersStep => {
+        if (element && element.removeHeaders && typeof element.removeHeaders === 'string') element.removeHeaders = {pattern: element.removeHeaders};
         const removeHeadersStep = element ? new RemoveHeadersStep({...element.removeHeaders}) : new RemoveHeadersStep();
         removeHeadersStep.uuid = element?.uuid ? element.uuid : removeHeadersStep.uuid;
         return removeHeadersStep;
@@ -430,12 +435,14 @@ export class CamelApi {
     }
 
     static createInOnly = (element: any): InOnlyStep => {
+        if (element && element.inOnly && typeof element.inOnly === 'string') element.inOnly = {uri: element.inOnly};
         const inOnlyStep = element ? new InOnlyStep({...element.inOnly}) : new InOnlyStep();
         inOnlyStep.uuid = element?.uuid ? element.uuid : inOnlyStep.uuid;
         return inOnlyStep;
     }
 
     static createConvertBodyTo = (element: any): ConvertBodyToStep => {
+        if (element && element.convertBodyTo && typeof element.convertBodyTo === 'string') element.convertBodyTo = {type: element.convertBodyTo};
         const convertBodyToStep = element ? new ConvertBodyToStep({...element.convertBodyTo}) : new ConvertBodyToStep();
         convertBodyToStep.uuid = element?.uuid ? element.uuid : convertBodyToStep.uuid;
         return convertBodyToStep;
@@ -516,6 +523,7 @@ export class CamelApi {
     }
 
     static createKamelet = (element: any): KameletStep => {
+        if (element && element.kamelet && typeof element.kamelet === 'string') element.kamelet = {name: element.kamelet};
         const kameletStep = element ? new KameletStep({...element.kamelet}) : new KameletStep();
         kameletStep.uuid = element?.uuid ? element.uuid : kameletStep.uuid;
         return kameletStep;
@@ -541,6 +549,7 @@ export class CamelApi {
     }
 
     static createInOut = (element: any): InOutStep => {
+        if (element && element.inOut && typeof element.inOut === 'string') element.inOut = {uri: element.inOut};
         const inOutStep = element ? new InOutStep({...element.inOut}) : new InOutStep();
         inOutStep.uuid = element?.uuid ? element.uuid : inOutStep.uuid;
         return inOutStep;
@@ -635,6 +644,7 @@ export class CamelApi {
 
     static createTo = (element: any): ToStep => {
         if (typeof element.to !== 'object') element.to = {uri: element.to};
+        if (element && element.to && typeof element.to === 'string') element.to = {uri: element.to};
         const toStep = element ? new ToStep({...element.to}) : new ToStep();
         toStep.uuid = element?.uuid ? element.uuid : toStep.uuid;
         return toStep;
@@ -655,6 +665,7 @@ export class CamelApi {
     }
 
     static createServiceCall = (element: any): ServiceCallStep => {
+        if (element && element.serviceCall && typeof element.serviceCall === 'string') element.serviceCall = {name: element.serviceCall};
         const serviceCallStep = element ? new ServiceCallStep({...element.serviceCall}) : new ServiceCallStep();
         serviceCallStep.uuid = element?.uuid ? element.uuid : serviceCallStep.uuid;
         return serviceCallStep;
@@ -689,6 +700,7 @@ export class CamelApi {
     }
 
     static createRemoveProperties = (element: any): RemovePropertiesStep => {
+        if (element && element.removeProperties && typeof element.removeProperties === 'string') element.removeProperties = {pattern: element.removeProperties};
         const removePropertiesStep = element ? new RemovePropertiesStep({...element.removeProperties}) : new RemovePropertiesStep();
         removePropertiesStep.uuid = element?.uuid ? element.uuid : removePropertiesStep.uuid;
         return removePropertiesStep;
@@ -729,6 +741,7 @@ export class CamelApi {
     }
 
     static createRemoveProperty = (element: any): RemovePropertyStep => {
+        if (element && element.removeProperty && typeof element.removeProperty === 'string') element.removeProperty = {propertyName: element.removeProperty};
         const removePropertyStep = element ? new RemovePropertyStep({...element.removeProperty}) : new RemovePropertyStep();
         removePropertyStep.uuid = element?.uuid ? element.uuid : removePropertyStep.uuid;
         return removePropertyStep;
@@ -763,6 +776,7 @@ export class CamelApi {
     }
 
     static createSetExchangePattern = (element: any): SetExchangePatternStep => {
+        if (element && element.setExchangePattern && typeof element.setExchangePattern === 'string') element.setExchangePattern = {pattern: element.setExchangePattern};
         const setExchangePatternStep = element ? new SetExchangePatternStep({...element.setExchangePattern}) : new SetExchangePatternStep();
         setExchangePatternStep.uuid = element?.uuid ? element.uuid : setExchangePatternStep.uuid;
         return setExchangePatternStep;
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 5e883a6..155e0b6 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
@@ -58,8 +58,9 @@ public class AbstractGenerator {
     }
 
     protected JsonObject getProperties(JsonObject definitions, String classname) {
-        JsonObject props = definitions.getJsonObject(classname).getJsonObject("properties");
-        JsonArray oneOf = definitions.getJsonObject(classname).getJsonArray("oneOf");
+        JsonObject root = definitions.getJsonObject(classname);
+        JsonObject props = root.getJsonObject("properties");
+        JsonArray oneOf = root.getJsonArray("oneOf");
         if (props != null) {
             return props;
         } else {
@@ -67,6 +68,16 @@ public class AbstractGenerator {
         }
     }
 
+    protected String getPropertyToMapString(JsonObject definitions, String classname) {
+        JsonObject root = definitions.getJsonObject(classname);
+        JsonArray oneOf = root.getJsonArray("oneOf");
+        JsonArray required = root.getJsonArray("required");
+        if (oneOf !=null && required != null){
+            return required.getString(0);
+        }
+        return null;
+    }
+
     protected String camelize(String name, String separator) {
         return Arrays.stream(name.split(separator)).map(s -> capitalize(s)).collect(Collectors.joining());
     }
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java
index efc3f7d..f19deda 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java
@@ -59,6 +59,7 @@ public final class CamelModelGenerator extends AbstractGenerator {
 
         // generate properties for elements
         Map<String, List<ElementProp>> models = new HashMap<>();
+        Map<String, String> propertyToMapStrings = new HashMap<>();
         // from
         JsonObject fromList = getProperties(definitions, "org.apache.camel.dsl.yaml.deserializers.RouteFromDefinitionDeserializer");
         List<ElementProp> fProps = generateElementProp("from", fromList, definitions, Map.of());
@@ -89,6 +90,8 @@ public final class CamelModelGenerator extends AbstractGenerator {
                     String className = classNameFromRef(procList.getJsonObject(s.getKey()).getString("$ref"));
                     JsonObject props = getProperties(definitions, className);
                     List<ElementProp> elProps = generateElementProp(name, props, definitions, processors);
+                    String propertyToMapString = getPropertyToMapString(definitions, className);
+                    propertyToMapStrings.put(name, propertyToMapString);
                     models.put(name, elProps);
                 });
 
@@ -149,8 +152,8 @@ public final class CamelModelGenerator extends AbstractGenerator {
                 "    static createExpression = (element: any): Expression => {\n" +
                         "        return new Expression({...element})\n" +
                         "    }\n");
-        camelApi.append(createCreateFunction("from", models.get("from")));
-        processors.values().forEach((model) -> camelApi.append(createCreateFunction(model, models.get(model))));
+        camelApi.append(createCreateFunction("from", models.get("from"), "uri"));
+        processors.values().forEach((model) -> camelApi.append(createCreateFunction(model, models.get(model), propertyToMapStrings.get(model))));
 
 
         camelApi.append(
@@ -309,7 +312,7 @@ public final class CamelModelGenerator extends AbstractGenerator {
         writeFileText(targetMetadata, metadata.toString());
     }
 
-    private String createCreateFunction(String name, List<ElementProp> elProps) {
+    private String createCreateFunction(String name, List<ElementProp> elProps, String propertyToMapStrings) {
         if (name.equalsIgnoreCase("otherwise")) {
             return getTemplateFile("CamelApi.createOtherwise.tx").concat("\n\n");
         } else if (name.equalsIgnoreCase("when")) {
@@ -326,6 +329,11 @@ public final class CamelModelGenerator extends AbstractGenerator {
         if (stepClass.equals("ToStep") || stepClass.equals("TodStep")) {
             f.append(String.format("        if (typeof element.%1$s !== 'object') element.%1$s = {uri: element.%1$s};\n", elementName));
         }
+        // for oneOf string or object Definitions
+        if (propertyToMapStrings != null){
+            String p = deCapitalize(camelize(propertyToMapStrings, "-"));
+            f.append(String.format("        if (element && element.%1$s && typeof element.%1$s === 'string') element.%1$s = {%2$s: element.%1$s};\n", elementName, p));
+        }
         f.append(String.format("        const %1$s = element ? new %2$s({...element.%3$s}) : new %2$s();\n", stepField, stepClass, elementName));
         elProps.stream().forEach(e -> {
             if (e.name.equals("steps")) {