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/11/03 21:13:43 UTC

[camel-karavan] branch main updated: Fixed #76 (#77)

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 eadc47e  Fixed #76 (#77)
eadc47e is described below

commit eadc47e291f34435e387a7a0189fa48d3757d1ce
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Wed Nov 3 17:13:37 2021 -0400

    Fixed #76 (#77)
---
 karavan-designer/src/App.tsx                       | 18 ++++++++------
 karavan-designer/src/designer/api/CamelApi.tsx     | 29 ++++++++++++++--------
 karavan-designer/src/designer/api/CamelUi.tsx      | 22 ++++++++++------
 karavan-designer/src/designer/ui/DslProperties.tsx |  2 +-
 .../src/designer/ui/KaravanDesigner.tsx            |  7 +++++-
 .../karavan/generator/CamelModelGenerator.java     |  8 +++---
 .../src/main/resources/CamelApi.camelize.tx        | 12 ++++++++-
 7 files changed, 67 insertions(+), 31 deletions(-)

diff --git a/karavan-designer/src/App.tsx b/karavan-designer/src/App.tsx
index bf5d01e..a331f5d 100644
--- a/karavan-designer/src/App.tsx
+++ b/karavan-designer/src/App.tsx
@@ -45,13 +45,17 @@ class App extends React.Component<Props, State> {
             '    - from:\n' +
             '        uri: \'kamelet:http-secured-source\'\n' +
             '        steps:\n' +
-            '          - set-body:\n' +
-            '              expression: \n' +
-            '                constant: "Hello Yaml !!!"\n' +
-            '          - set-body:\n' +
-            '              constant: "Hello Yaml !!!"\n' +
-            '          - pollEnrich:\n' +
-            '              expression: {}',
+            // '          - set-body:\n' +
+            // '              expression: \n' +
+            // '                constant: "Hello Yaml !!!"\n' +
+            // '          - set-body:\n' +
+            // '              constant: "Hello Yaml !!!"\n' +
+            // '          - pollEnrich:\n' +
+            // '              expression: {}\n' +
+            // '          - to: \n' +
+            // '               uri: "log:info"\n' +
+            '          - to: "log:info"\n'
+            ,
         key: ''
     };
 
diff --git a/karavan-designer/src/designer/api/CamelApi.tsx b/karavan-designer/src/designer/api/CamelApi.tsx
index 9baf364..5556525 100644
--- a/karavan-designer/src/designer/api/CamelApi.tsx
+++ b/karavan-designer/src/designer/api/CamelApi.tsx
@@ -8,7 +8,7 @@ import {    CamelElement,
     PolicyStep, 
     SetPropertyStep, 
     SagaStep, 
-    TodStep, 
+    ToDStep, 
     ThreadsStep, 
     InterceptSendToEndpointStep, 
     LogStep, 
@@ -92,17 +92,25 @@ export class CamelApi {
         return firstSmall ? res[0].toLowerCase() + res.substring(1) : res;
     };
 
+    static camelizeBody = (name: string, body: any, clone: boolean): any => {
+        if (body){
+            const oldKey = Object.keys(body)[0];
+            const key = CamelApi.camelizeName(oldKey, '-', true);
+            return !clone && key === name ? {[key]: body[oldKey]} : body;
+        } else {
+            return {};
+        }
+    };
+
     static createStep = (name: string, body: any, clone: boolean = false): CamelElement => {
-       const oldKey = Object.keys(body)[0];
-       const key = CamelApi.camelizeName(oldKey, '-', true);
-       const newBody = !clone && key === name ? {[key]: body[oldKey]} : body;
+       const newBody = CamelApi.camelizeBody(name, body, clone);
        switch (name){
             case 'from': return CamelApi.createFrom(newBody);
             case 'expression': return CamelApi.createExpression(newBody);
             case 'policy': return CamelApi.createPolicy(newBody);
             case 'setProperty': return CamelApi.createSetProperty(newBody);
             case 'saga': return CamelApi.createSaga(newBody);
-            case 'tod': return CamelApi.createTod(newBody);
+            case 'toD': return CamelApi.createToD(newBody);
             case 'threads': return CamelApi.createThreads(newBody);
             case 'interceptSendToEndpoint': return CamelApi.createInterceptSendToEndpoint(newBody);
             case 'log': return CamelApi.createLog(newBody);
@@ -202,10 +210,10 @@ export class CamelApi {
         return sagaStep;
     }
 
-    static createTod = (element: any): TodStep => {
-        const todStep = element ? new TodStep({...element.tod}) : new TodStep();
-        todStep.uuid = element?.uuid ? element.uuid : todStep.uuid;
-        return todStep;
+    static createToD = (element: any): ToDStep => {
+        const toDStep = element ? new ToDStep({...element.toD}) : new ToDStep();
+        toDStep.uuid = element?.uuid ? element.uuid : toDStep.uuid;
+        return toDStep;
     }
 
     static createThreads = (element: any): ThreadsStep => {
@@ -581,6 +589,7 @@ export class CamelApi {
     }
 
     static createTo = (element: any): ToStep => {
+        if (typeof element.to !== 'object') element.to = {uri: element.to};
         const toStep = element ? new ToStep({...element.to}) : new ToStep();
         toStep.uuid = element?.uuid ? element.uuid : toStep.uuid;
         return toStep;
@@ -751,7 +760,7 @@ export class CamelApi {
             case 'policyStep': return (step as PolicyStep).policy
             case 'setPropertyStep': return (step as SetPropertyStep).setProperty
             case 'sagaStep': return (step as SagaStep).saga
-            case 'todStep': return (step as TodStep).tod
+            case 'toDStep': return (step as ToDStep).toD
             case 'threadsStep': return (step as ThreadsStep).threads
             case 'interceptSendToEndpointStep': return (step as InterceptSendToEndpointStep).interceptSendToEndpoint
             case 'logStep': return (step as LogStep).log
diff --git a/karavan-designer/src/designer/api/CamelUi.tsx b/karavan-designer/src/designer/api/CamelUi.tsx
index e18a8fb..e18fbda 100644
--- a/karavan-designer/src/designer/api/CamelUi.tsx
+++ b/karavan-designer/src/designer/api/CamelUi.tsx
@@ -207,14 +207,20 @@ export class CamelUi {
     };
 
     static getComponentProperties = (element: any, advanced: boolean): ComponentProperty[] => {
-        const uri: string = (element as any).uri;
-        const name = ComponentApi.getComponentNameFromUri(uri);
-        if (name){
-            const component = ComponentApi.findByName(name);
-            return component ? ComponentApi.getComponentProperties(component?.component.name, element.dslName === 'from' ? 'consumer' : 'producer', advanced) : [];
-        } else {
-            return [];
-        }
+        const dslName: string = (element as any).dslName;
+       if (dslName === 'toD'){
+           const component = ComponentApi.findByName(dslName);
+           return component ? ComponentApi.getComponentProperties(component?.component.name,'producer', advanced) : [];
+       } else {
+           const uri: string = (element as any).uri;
+           const name = ComponentApi.getComponentNameFromUri(uri);
+           if (name){
+               const component = ComponentApi.findByName(name);
+               return component ? ComponentApi.getComponentProperties(component?.component.name, element.dslName === 'from' ? 'consumer' : 'producer', advanced) : [];
+           } else {
+               return [];
+           }
+       }
     };
 
     static getTitle = (element: CamelElement): string => {
diff --git a/karavan-designer/src/designer/ui/DslProperties.tsx b/karavan-designer/src/designer/ui/DslProperties.tsx
index 9492c33..d55e016 100644
--- a/karavan-designer/src/designer/ui/DslProperties.tsx
+++ b/karavan-designer/src/designer/ui/DslProperties.tsx
@@ -364,7 +364,7 @@ export class DslProperties extends React.Component<Props, State> {
                 }>
                 {['string', 'duration', 'integer', 'number'].includes(property.type) && !property.enumVals &&
                 <TextInput
-                    isReadOnly={property.name === 'uri'}
+                    isReadOnly={property.name === 'uri' && this.state.element?.dslName !== 'toD'}
                     className="text-field" isRequired
                     type={['integer', 'number'].includes(property.type) ? 'number' : (property.secret ? "password" : "text")}
                     id={property.name} name={property.name}
diff --git a/karavan-designer/src/designer/ui/KaravanDesigner.tsx b/karavan-designer/src/designer/ui/KaravanDesigner.tsx
index abf7d4e..0f594ee 100644
--- a/karavan-designer/src/designer/ui/KaravanDesigner.tsx
+++ b/karavan-designer/src/designer/ui/KaravanDesigner.tsx
@@ -125,6 +125,7 @@ export class KaravanDesigner extends React.Component<Props, State> {
     }
 
     onDslSelect = (dsl: DslMetaModel, parentId: string) => {
+        console.log(dsl)
         switch (dsl.dsl) {
             case 'from' :
                 const from = CamelApi.createStep(dsl.dsl, {from: {uri: dsl.uri}});
@@ -134,12 +135,16 @@ export class KaravanDesigner extends React.Component<Props, State> {
                 const to = CamelApi.createStep(dsl.dsl, {to: {uri: dsl.uri}});
                 this.addStep(to, parentId)
                 break;
+            case 'toD' :
+                const toD = CamelApi.createStep(dsl.dsl, {toD: {uri: dsl.uri}});
+                this.addStep(toD, parentId)
+                break;
             case 'kamelet' :
                 const kamelet = CamelApi.createStep(dsl.dsl, {kamelet: {name: dsl.name}});
                 this.addStep(kamelet, parentId)
                 break;
             default:
-                const step = CamelApi.createStep(dsl.dsl, {});
+                const step = CamelApi.createStep(dsl.dsl, undefined);
                 this.addStep(step, parentId)
                 break;
         }
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 a946c90..2b52154 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
@@ -81,6 +81,7 @@ public final class CamelModelGenerator {
                         e -> e.getValue()
                 )).forEach((s, o) -> {
                     String name = camelize(s, "-");
+                    if (name.equalsIgnoreCase("tod")) name = "ToD";
                     String className = classNameFromRef(procList.getJsonObject(s).getString("$ref"));
                     processors.put(className, name);
                 });
@@ -134,9 +135,7 @@ public final class CamelModelGenerator {
 
         camelApi.append(
                 "    static createStep = (name: string, body: any, clone: boolean = false): CamelElement => {\n" +
-                        "       const oldKey = Object.keys(body)[0];\n" +
-                        "       const key = CamelApi.camelizeName(oldKey, '-', true);\n" +
-                        "       const newBody = !clone && key === name ? {[key]: body[oldKey]} : body;\n" +
+                        "       const newBody = CamelApi.camelizeBody(name, body, clone);\n" +
                         "       switch (name){\n" +
                         "            case 'from': return CamelApi.createFrom(newBody);\n" +
                         "            case 'expression': return CamelApi.createExpression(newBody);\n");
@@ -337,6 +336,9 @@ public final class CamelModelGenerator {
         String funcName = "create".concat(capitalize(name));
         StringBuilder f = new StringBuilder();
         f.append(String.format("    static %s = (element: any): %s => {\n", funcName, stepClass));
+        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));
+        }
         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")) {
diff --git a/karavan-generator/src/main/resources/CamelApi.camelize.tx b/karavan-generator/src/main/resources/CamelApi.camelize.tx
index 3c11863..bcdab9e 100644
--- a/karavan-generator/src/main/resources/CamelApi.camelize.tx
+++ b/karavan-generator/src/main/resources/CamelApi.camelize.tx
@@ -16,4 +16,14 @@
             .map((value) => CamelApi.capitalizeName(value))
             .join("");
         return firstSmall ? res[0].toLowerCase() + res.substring(1) : res;
-    };
\ No newline at end of file
+    };
+
+    static camelizeBody = (name: string, body: any, clone: boolean): any => {
+        if (body){
+            const oldKey = Object.keys(body)[0];
+            const key = CamelApi.camelizeName(oldKey, '-', true);
+            return !clone && key === name ? {[key]: body[oldKey]} : body;
+        } else {
+            return {};
+        }
+    };