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 <[email protected]>
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")) {