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 1d84972  Fixed #31 (#52)
1d84972 is described below

commit 1d84972cf5a112ddbc4ae583eba6cb7cf0ab026d
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Wed Oct 27 23:10:47 2021 -0400

    Fixed #31 (#52)
---
 karavan-designer/src/App.tsx                       | 13 ++++++++++-
 karavan-designer/src/designer/api/CamelApi.tsx     | 22 +++++++++++++++++-
 karavan-designer/src/designer/api/CamelUi.tsx      | 26 ++++------------------
 karavan-designer/src/designer/api/CamelYaml.tsx    | 12 +++++-----
 karavan-designer/src/designer/ui/DslProperties.tsx |  3 +--
 karavan-designer/src/designer/ui/DslSelector.tsx   |  3 ++-
 .../karavan/generator/CamelModelGenerator.java     |  6 ++++-
 .../src/main/resources/CamelAPI.camelize.tx        | 19 ++++++++++++++++
 .../src/main/resources/CamelApi.createChoice.tx    |  9 ++++++++
 9 files changed, 80 insertions(+), 33 deletions(-)

diff --git a/karavan-designer/src/App.tsx b/karavan-designer/src/App.tsx
index 878e406..261e556 100644
--- a/karavan-designer/src/App.tsx
+++ b/karavan-designer/src/App.tsx
@@ -35,7 +35,18 @@ class App extends React.Component<Props, State> {
 
     public state: State = {
         name: '',
-        yaml: '',
+        yaml: 'apiVersion: camel.apache.org/v1\n' +
+            'kind: Integration\n' +
+            'metadata:\n' +
+            '  name: \'\'\n' +
+            'spec:\n' +
+            '  flows:\n' +
+            '    - from:\n' +
+            '        uri: \'kamelet:http-secured-source\'\n' +
+            '        steps:\n' +
+            '          - convert-body-to: {}\n' +
+            '          - pollEnrich:\n' +
+            '              expression: {}',
         key: ''
     };
 
diff --git a/karavan-designer/src/designer/api/CamelApi.tsx 
b/karavan-designer/src/designer/api/CamelApi.tsx
index d4a6240..d8b4d56 100644
--- a/karavan-designer/src/designer/api/CamelApi.tsx
+++ b/karavan-designer/src/designer/api/CamelApi.tsx
@@ -71,6 +71,26 @@ import {    CamelElement,
 
 export class CamelApi { 
 
+    static capitalizeName = (name: string) => {
+        try {
+            return name[0].toUpperCase() + name.substring(1);
+        } catch (e) {
+            return name;
+        }
+    };
+
+    static camelizeName = (
+        name: string,
+        separator: string,
+        firstSmall: boolean
+    ) => {
+        const res = name
+            .split(separator)
+            .map((value) => CamelApi.capitalizeName(value))
+            .join("");
+        return firstSmall ? res[0].toLowerCase() + res.substring(1) : res;
+    };
+
     static createStep = (name: string, body: any): CamelElement => {
        switch (name){
             case 'from': return CamelApi.createFrom(body)
@@ -588,7 +608,7 @@ export class CamelApi {
         if (elements !== undefined){
             elements.forEach(e => {
                 const stepName = Object.keys(e).filter(key => !['uuid', 
'dslName'].includes(key))[0];
-                result.push(CamelApi.createStep(stepName, e));
+                
result.push(CamelApi.createStep(CamelApi.camelizeName(stepName, '-', true), e));
             })
         }
         return result
diff --git a/karavan-designer/src/designer/api/CamelUi.tsx 
b/karavan-designer/src/designer/api/CamelUi.tsx
index 55e87b8..a638032 100644
--- a/karavan-designer/src/designer/api/CamelUi.tsx
+++ b/karavan-designer/src/designer/api/CamelUi.tsx
@@ -22,6 +22,7 @@ import {Metadata} from "./CamelMetadata";
 import {ComponentApi} from "./ComponentApi";
 import {ComponentProperty} from "../model/ComponentModels";
 import {CamelApiExt} from "./CamelApiExt";
+import {CamelApi} from "./CamelApi";
 
 const DslElements: string[] = [
     "aggregate",
@@ -164,7 +165,7 @@ export class CamelUi {
             ? name
                 .replace(".yaml", "")
                 .split("-")
-                .map((value) => CamelUi.capitalizeName(value))
+                .map((value) => CamelApi.capitalizeName(value))
                 .reduce(
                     (previousValue, currentValue) => previousValue + " " + 
currentValue
                 )
@@ -217,8 +218,8 @@ export class CamelUi {
             return k.title();
         } else {
             return uri
-                ? CamelUi.capitalizeName(element.dslName) + " : " + 
ComponentApi.getComponentNameFromUri(uri)
-                : CamelUi.capitalizeName(element.dslName);
+                ? CamelApi.capitalizeName(element.dslName) + " : " + 
ComponentApi.getComponentNameFromUri(uri)
+                : CamelApi.capitalizeName(element.dslName);
         }
     };
 
@@ -284,23 +285,4 @@ export class CamelUi {
         }
     };
 
-    static capitalizeName = (name: string) => {
-        try {
-            return name[0].toUpperCase() + name.substring(1);
-        } catch (e) {
-            return name;
-        }
-    };
-
-    static camelizeName = (
-        name: string,
-        separator: string,
-        firstSmall: boolean
-    ) => {
-        const res = name
-            .split(separator)
-            .map((value) => CamelUi.capitalizeName(value))
-            .join("");
-        return firstSmall ? res[0].toLowerCase() + res.substring(1) : res;
-    };
 }
diff --git a/karavan-designer/src/designer/api/CamelYaml.tsx 
b/karavan-designer/src/designer/api/CamelYaml.tsx
index dd1291a..1c4c172 100644
--- a/karavan-designer/src/designer/api/CamelYaml.tsx
+++ b/karavan-designer/src/designer/api/CamelYaml.tsx
@@ -21,7 +21,8 @@ import {
 } from "../model/CamelModel";
 import {CamelApi} from "./CamelApi";
 
-// TODO need to split and regroup functions here
+const saveKebabCase = true; //TODO: Remove when 
https://issues.apache.org/jira/browse/CAMEL-17097 fixed
+
 export class CamelYaml {
 
     static integrationToYaml = (integration: Integration): string => {
@@ -48,10 +49,11 @@ export class CamelYaml {
                 else return 0;
             })
             .forEach(key => {
+                const rkey = saveKebabCase ? 
key.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase() : key;
                 if (object[key] instanceof CamelElement) {
-                    result[key] = CamelYaml.cleanupElement(object[key])
+                    result[rkey] = CamelYaml.cleanupElement(object[key])
                 } else if (Array.isArray(object[key])) {
-                    if (object[key].length > 0) result[key] = 
CamelYaml.cleanupElements(object[key])
+                    if (object[key].length > 0) result[rkey] = 
CamelYaml.cleanupElements(object[key])
                 } else if (key === 'parameters' && typeof (object[key]) === 
'object') {
                     const obj = object[key];
                     const parameters = Object.keys(obj || {}).reduce((x:any, 
k) => {
@@ -61,9 +63,9 @@ export class CamelYaml {
                         }
                         return x;
                     }, {});
-                    if (Object.keys(parameters).length > 0) result[key] = 
parameters;
+                    if (Object.keys(parameters).length > 0) result[rkey] = 
parameters;
                 } else {
-                    if (object[key] !== undefined && 
object[key].toString().trim().length > 0) result[key] = object[key];
+                    if (object[key] !== undefined && 
object[key].toString().trim().length > 0) result[rkey] = object[key];
                 }
             })
         return result as CamelElement
diff --git a/karavan-designer/src/designer/ui/DslProperties.tsx 
b/karavan-designer/src/designer/ui/DslProperties.tsx
index 224d3c2..4ba6980 100644
--- a/karavan-designer/src/designer/ui/DslProperties.tsx
+++ b/karavan-designer/src/designer/ui/DslProperties.tsx
@@ -29,7 +29,6 @@ import {
 } from '@patternfly/react-core';
 import '../karavan.css';
 import "@patternfly/patternfly/patternfly.css";
-import UndoIcon from "@patternfly/react-icons/dist/js/icons/backspace-icon";
 import HelpIcon from "@patternfly/react-icons/dist/js/icons/help-icon";
 import {Property} from "../model/KameletModels";
 import {CamelElement, Expression, Integration} from "../model/CamelModel";
@@ -346,7 +345,7 @@ export class DslProperties extends React.Component<Props, 
State> {
         return (
             <FormGroup
                 key={property.name}
-                label={CamelUi.capitalizeName(property.displayName)}
+                label={CamelApi.capitalizeName(property.displayName)}
                 fieldId={property.name}
                 labelIcon={property.description ?
                     <Popover
diff --git a/karavan-designer/src/designer/ui/DslSelector.tsx 
b/karavan-designer/src/designer/ui/DslSelector.tsx
index de57519..76b4ebb 100644
--- a/karavan-designer/src/designer/ui/DslSelector.tsx
+++ b/karavan-designer/src/designer/ui/DslSelector.tsx
@@ -23,6 +23,7 @@ import {
 import '../karavan.css';
 import {CamelUi} from "../api/CamelUi";
 import {DslMetaModel} from "../model/DslMetaModel";
+import {CamelApi} from "../api/CamelApi";
 
 interface Props {
     show: boolean,
@@ -101,7 +102,7 @@ export class DslSelector extends React.Component<Props, 
State> {
                     <Tabs style={{overflow: 'hidden'}} 
activeKey={this.state.tabIndex} onSelect={this.selectTab}>
                         
{CamelUi.getSelectorLabels(this.props.parentType).map((label, index) => (
                             <Tab eventKey={label[0]} key={"tab-" + label[0]}
-                                 
title={<TabTitleText>{CamelUi.capitalizeName(label[0])}</TabTitleText>}
+                                 
title={<TabTitleText>{CamelApi.capitalizeName(label[0])}</TabTitleText>}
                                  translate={undefined} onAuxClick={undefined} 
onAuxClickCapture={undefined}>
                                 <Gallery key={"gallery-" + label[0]} hasGutter 
className="dsl-gallery">
                                     
{CamelUi.sortSelectorModels(CamelUi.getSelectorModels(label[0], label[1], 
this.props.parentType))
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 0e060a5..db781b3 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
@@ -130,6 +130,8 @@ public final class CamelModelGenerator {
 
         camelApi.append("export class CamelApi { \n\n");
 
+        
camelApi.append(getTemplateFile("CamelApi.camelize.tx").concat("\n").concat("\n"));
+
         camelApi.append(
                 "    static createStep = (name: string, body: any): 
CamelElement => {\n" +
                         "       switch (name){\n" +
@@ -156,7 +158,7 @@ public final class CamelModelGenerator {
                         "        if (elements !== undefined){\n" +
                         "            elements.forEach(e => {\n" +
                         "                const stepName = 
Object.keys(e).filter(key => !['uuid', 'dslName'].includes(key))[0];\n" +
-                        "                
result.push(CamelApi.createStep(stepName, e));\n" +
+                        "                
result.push(CamelApi.createStep(CamelApi.camelizeName(stepName, '-', true), 
e));\n" +
                         "            })\n" +
                         "        }\n" +
                         "        return result\n" +
@@ -322,6 +324,8 @@ public final class CamelModelGenerator {
             return 
getTemplateFile("CamelApi.createOtherwise.tx").concat("\n\n");
         } else if (name.equalsIgnoreCase("when")){
             return getTemplateFile("CamelApi.createWhen.tx").concat("\n\n");
+        } else if (name.equalsIgnoreCase("choice")){
+            return getTemplateFile("CamelApi.createChoice.tx").concat("\n\n");
         }
         String stepClass = capitalize(name).concat("Step");
         String stepField = deCapitalize(name).concat("Step");
diff --git a/karavan-generator/src/main/resources/CamelAPI.camelize.tx 
b/karavan-generator/src/main/resources/CamelAPI.camelize.tx
new file mode 100644
index 0000000..3c11863
--- /dev/null
+++ b/karavan-generator/src/main/resources/CamelAPI.camelize.tx
@@ -0,0 +1,19 @@
+    static capitalizeName = (name: string) => {
+        try {
+            return name[0].toUpperCase() + name.substring(1);
+        } catch (e) {
+            return name;
+        }
+    };
+
+    static camelizeName = (
+        name: string,
+        separator: string,
+        firstSmall: boolean
+    ) => {
+        const res = name
+            .split(separator)
+            .map((value) => CamelApi.capitalizeName(value))
+            .join("");
+        return firstSmall ? res[0].toLowerCase() + res.substring(1) : res;
+    };
\ No newline at end of file
diff --git a/karavan-generator/src/main/resources/CamelApi.createChoice.tx 
b/karavan-generator/src/main/resources/CamelApi.createChoice.tx
new file mode 100644
index 0000000..8d72337
--- /dev/null
+++ b/karavan-generator/src/main/resources/CamelApi.createChoice.tx
@@ -0,0 +1,9 @@
+    static createChoice = (element: any): ChoiceStep => {
+        const choiceStep = element ? new ChoiceStep({...element.choice}) : new 
ChoiceStep();
+        if (element?.choice?.otherwise !== undefined){
+            choiceStep.choice.otherwise =  
CamelApi.createOtherwise(element?.choice?.otherwise);
+        }
+        choiceStep.choice.when = element && element?.choice ? 
element?.choice?.when.map((x:any) => CamelApi.createWhen(x)) :[]
+        choiceStep.uuid = element?.uuid ? element.uuid : choiceStep.uuid
+        return choiceStep
+    }

Reply via email to