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
+ }