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 2023/10/20 00:24:52 UTC
[camel-karavan] 01/04: CamelDefinitionGenerator for Camel YAML DSL 4.1.0
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
commit c9fa438807e563ba256a77fe9556b98f5fcc33f1
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Thu Oct 19 18:16:51 2023 -0400
CamelDefinitionGenerator for Camel YAML DSL 4.1.0
---
karavan-core/src/core/model/CamelDefinition.ts | 139 +++++++++++----------
karavan-generator/pom.xml | 2 +-
.../camel/karavan/generator/AbstractGenerator.java | 105 ++++++++++++++--
.../generator/CamelDefinitionGenerator.java | 109 +++++++++-------
.../karavan/generator/CamelMetadataGenerator.java | 2 +-
.../camel/karavan/generator/KaravanGenerator.java | 6 +-
6 files changed, 238 insertions(+), 125 deletions(-)
diff --git a/karavan-core/src/core/model/CamelDefinition.ts b/karavan-core/src/core/model/CamelDefinition.ts
index 8ada7e8b..676dbab0 100644
--- a/karavan-core/src/core/model/CamelDefinition.ts
+++ b/karavan-core/src/core/model/CamelDefinition.ts
@@ -35,16 +35,12 @@ export class ProcessorDefinition extends CamelElement {
filter?: FilterDefinition;
doFinally?: FinallyDefinition;
idempotentConsumer?: IdempotentConsumerDefinition;
- intercept?: InterceptDefinition;
- interceptFrom?: InterceptFromDefinition | string;
- interceptSendToEndpoint?: InterceptSendToEndpointDefinition | string;
kamelet?: KameletDefinition | string;
loadBalance?: LoadBalanceDefinition;
log?: LogDefinition | string;
loop?: LoopDefinition;
marshal?: MarshalDefinition;
multicast?: MulticastDefinition;
- onCompletion?: OnCompletionDefinition;
onFallback?: OnFallbackDefinition;
otherwise?: OtherwiseDefinition;
pausable?: PausableDefinition;
@@ -114,8 +110,9 @@ export class ErrorHandlerBuilderDeserializer extends CamelElement {
}
export class OutputAwareFromDefinition extends CamelElement {
+ stepName?: string = 'outputAwareFrom';
description?: string;
- id?: string;
+ id?: string = 'outputAwareFrom-' + uuidv4().substring(0,4);
parameters?: any = {};
steps: CamelElement[] = [];
uri: string = '';
@@ -555,10 +552,10 @@ export class LoadBalanceDefinition extends CamelElement {
failover?: FailoverLoadBalancerDefinition;
random?: RandomLoadBalancerDefinition;
roundRobin?: RoundRobinLoadBalancerDefinition;
- steps?: CamelElement[] = [];
sticky?: StickyLoadBalancerDefinition;
topic?: TopicLoadBalancerDefinition;
weighted?: WeightedLoadBalancerDefinition;
+ steps?: CamelElement[] = [];
public constructor(init?: Partial<LoadBalanceDefinition>) {
super('LoadBalanceDefinition');
Object.assign(this, init);
@@ -620,7 +617,6 @@ export class MarshalDefinition extends CamelElement {
gzipDeflater?: GzipDeflaterDataFormat;
hl7?: HL7DataFormat;
ical?: IcalDataFormat;
- inheritErrorHandler?: boolean;
jacksonXml?: JacksonXMLDataFormat;
jaxb?: JaxbDataFormat;
json?: JsonDataFormat;
@@ -645,6 +641,7 @@ export class MarshalDefinition extends CamelElement {
yaml?: YAMLDataFormat;
zipDeflater?: ZipDeflaterDataFormat;
zipFile?: ZipFileDataFormat;
+ inheritErrorHandler?: boolean;
public constructor(init?: Partial<MarshalDefinition>) {
super('MarshalDefinition');
Object.assign(this, init);
@@ -1011,10 +1008,8 @@ export class ResequenceDefinition extends CamelElement {
disabled?: boolean;
id?: string = 'resequence-' + uuidv4().substring(0,4);
description?: string;
- batchConfig?: BatchResequencerConfig;
inheritErrorHandler?: boolean;
steps?: CamelElement[] = [];
- streamConfig?: StreamResequencerConfig;
public constructor(init?: Partial<ResequenceDefinition>) {
super('ResequenceDefinition');
Object.assign(this, init);
@@ -1159,11 +1154,11 @@ export class RouteDefinition extends CamelElement {
export class RouteTemplateBeanDefinition extends CamelElement {
stepName?: string = 'routeTemplateBean';
- beanType?: string;
name: string = '';
properties?: any = {};
property?: PropertyDefinition[] = [];
script?: string;
+ scriptLanguage?: string;
type: string = '';
public constructor(init?: Partial<RouteTemplateBeanDefinition>) {
super('RouteTemplateBeanDefinition');
@@ -1398,7 +1393,7 @@ export class TemplatedRouteBeanDefinition extends CamelElement {
stepName?: string = 'templatedRouteBean';
name: string = '';
type: string = '';
- beanType?: string;
+ scriptLanguage?: string;
property?: PropertyDefinition[] = [];
properties?: any = {};
script?: string;
@@ -1521,18 +1516,18 @@ export class ToDefinition extends CamelElement {
}
export class ToDynamicDefinition extends CamelElement {
- stepName?: string = 'toD';
- uri: string = '';
- pattern?: string;
- cacheSize?: number;
- ignoreInvalidEndpoint?: boolean;
+ stepName?: string = 'toDynamic';
allowOptimisedComponents?: boolean;
autoStartComponents?: boolean;
- disabled?: boolean;
- id?: string = 'toD-' + uuidv4().substring(0,4);
+ cacheSize?: number;
description?: string;
+ disabled?: boolean;
+ id?: string = 'toDynamic-' + uuidv4().substring(0,4);
+ ignoreInvalidEndpoint?: boolean;
inheritErrorHandler?: boolean;
parameters?: any = {};
+ pattern?: string;
+ uri: string = '';
public constructor(init?: Partial<ToDynamicDefinition>) {
super('ToDynamicDefinition');
Object.assign(this, init);
@@ -1569,12 +1564,12 @@ export class TransformDefinition extends CamelElement {
}
export class TryDefinition extends CamelElement {
- stepName?: string = 'doTry';
- disabled?: boolean;
- id?: string = 'doTry-' + uuidv4().substring(0,4);
+ stepName?: string = 'try';
description?: string;
+ disabled?: boolean;
doCatch?: CatchDefinition[] = [];
doFinally?: FinallyDefinition;
+ id?: string = 'try-' + uuidv4().substring(0,4);
inheritErrorHandler?: boolean;
steps?: CamelElement[] = [];
public constructor(init?: Partial<TryDefinition>) {
@@ -1589,6 +1584,7 @@ export class UnmarshalDefinition extends CamelElement {
disabled?: boolean;
id?: string = 'unmarshal-' + uuidv4().substring(0,4);
description?: string;
+ inheritErrorHandler?: boolean;
asn1?: ASN1DataFormat | string;
avro?: AvroDataFormat | string;
barcode?: BarcodeDataFormat;
@@ -1605,7 +1601,6 @@ export class UnmarshalDefinition extends CamelElement {
gzipDeflater?: GzipDeflaterDataFormat;
hl7?: HL7DataFormat;
ical?: IcalDataFormat;
- inheritErrorHandler?: boolean;
jacksonXml?: JacksonXMLDataFormat;
jaxb?: JaxbDataFormat;
json?: JsonDataFormat;
@@ -1726,6 +1721,25 @@ export class ApplicationDefinition extends CamelElement {
}
}
+export class BeanConstructorDefinition extends CamelElement {
+ stepName?: string = 'beanConstructor';
+ index?: number;
+ value: string = '';
+ public constructor(init?: Partial<BeanConstructorDefinition>) {
+ super('BeanConstructorDefinition');
+ Object.assign(this, init);
+ }
+}
+
+export class BeanConstructorsDefinition extends CamelElement {
+ stepName?: string = 'beanConstructors';
+ _constructor?: BeanConstructorDefinition[] = [];
+ public constructor(init?: Partial<BeanConstructorsDefinition>) {
+ super('BeanConstructorsDefinition');
+ Object.assign(this, init);
+ }
+}
+
export class BeanPropertiesDefinition extends CamelElement {
stepName?: string = 'beanProperties';
property?: BeanPropertyDefinition[] = [];
@@ -1773,9 +1787,16 @@ export class ComponentScanDefinition extends CamelElement {
export class RegistryBeanDefinition extends CamelElement {
stepName?: string = 'registryBean';
- name?: string;
+ constructors?: any = {};
+ destroyMethod?: string;
+ factoryBean?: string;
+ factoryMethod?: string;
+ initMethod?: string;
+ name: string = '';
properties?: any = {};
- type?: string;
+ script?: string;
+ scriptLanguage?: string;
+ type: string = '';
public constructor(init?: Partial<RegistryBeanDefinition>) {
super('RegistryBeanDefinition');
Object.assign(this, init);
@@ -1796,10 +1817,10 @@ export class CachingServiceCallServiceDiscoveryConfiguration extends CamelElemen
combinedServiceDiscovery?: CombinedServiceCallServiceDiscoveryConfiguration;
consulServiceDiscovery?: ConsulServiceCallServiceDiscoveryConfiguration;
dnsServiceDiscovery?: DnsServiceCallServiceDiscoveryConfiguration;
- id?: string = 'cachingServiceCallServiceDiscoveryConfiguration-' + uuidv4().substring(0,4);
kubernetesServiceDiscovery?: KubernetesServiceCallServiceDiscoveryConfiguration;
- properties?: PropertyDefinition[] = [];
staticServiceDiscovery?: StaticServiceCallServiceDiscoveryConfiguration;
+ id?: string = 'cachingServiceCallServiceDiscoveryConfiguration-' + uuidv4().substring(0,4);
+ properties?: PropertyDefinition[] = [];
timeout?: number;
units?: string;
public constructor(init?: Partial<CachingServiceCallServiceDiscoveryConfiguration>) {
@@ -1931,7 +1952,7 @@ export class PassThroughServiceCallServiceFilterConfiguration extends CamelEleme
export class ServiceCallConfigurationDefinition extends CamelElement {
stepName?: string = 'serviceCallConfiguration';
- expression?: ServiceCallExpressionConfiguration;
+ expression?: ExpressionDefinition;
uri?: string;
component?: string;
pattern?: string;
@@ -1942,18 +1963,10 @@ export class ServiceCallConfigurationDefinition extends CamelElement {
expressionRef?: string;
id?: string = 'serviceCallConfiguration-' + uuidv4().substring(0,4);
blacklistServiceFilter?: BlacklistServiceCallServiceFilterConfiguration;
- cachingServiceDiscovery?: CachingServiceCallServiceDiscoveryConfiguration;
- combinedServiceDiscovery?: CombinedServiceCallServiceDiscoveryConfiguration;
combinedServiceFilter?: CombinedServiceCallServiceFilterConfiguration;
- consulServiceDiscovery?: ConsulServiceCallServiceDiscoveryConfiguration;
customServiceFilter?: CustomServiceCallServiceFilterConfiguration;
- defaultLoadBalancer?: DefaultServiceCallServiceLoadBalancerConfiguration;
- dnsServiceDiscovery?: DnsServiceCallServiceDiscoveryConfiguration;
healthyServiceFilter?: HealthyServiceCallServiceFilterConfiguration;
- kubernetesServiceDiscovery?: KubernetesServiceCallServiceDiscoveryConfiguration;
passThroughServiceFilter?: PassThroughServiceCallServiceFilterConfiguration;
- staticServiceDiscovery?: StaticServiceCallServiceDiscoveryConfiguration;
- zookeeperServiceDiscovery?: ZooKeeperServiceCallServiceDiscoveryConfiguration;
public constructor(init?: Partial<ServiceCallConfigurationDefinition>) {
super('ServiceCallConfigurationDefinition');
Object.assign(this, init);
@@ -1963,7 +1976,7 @@ export class ServiceCallConfigurationDefinition extends CamelElement {
export class ServiceCallDefinition extends CamelElement {
stepName?: string = 'serviceCall';
name: string = '';
- expression?: ServiceCallExpressionConfiguration;
+ expression?: ExpressionDefinition;
uri?: string;
component?: string;
pattern?: string;
@@ -1976,20 +1989,7 @@ export class ServiceCallDefinition extends CamelElement {
disabled?: boolean;
id?: string = 'serviceCall-' + uuidv4().substring(0,4);
description?: string;
- blacklistServiceFilter?: BlacklistServiceCallServiceFilterConfiguration;
- cachingServiceDiscovery?: CachingServiceCallServiceDiscoveryConfiguration;
- combinedServiceDiscovery?: CombinedServiceCallServiceDiscoveryConfiguration;
- combinedServiceFilter?: CombinedServiceCallServiceFilterConfiguration;
- consulServiceDiscovery?: ConsulServiceCallServiceDiscoveryConfiguration;
- customServiceFilter?: CustomServiceCallServiceFilterConfiguration;
- defaultLoadBalancer?: DefaultServiceCallServiceLoadBalancerConfiguration;
- dnsServiceDiscovery?: DnsServiceCallServiceDiscoveryConfiguration;
- healthyServiceFilter?: HealthyServiceCallServiceFilterConfiguration;
inheritErrorHandler?: boolean;
- kubernetesServiceDiscovery?: KubernetesServiceCallServiceDiscoveryConfiguration;
- passThroughServiceFilter?: PassThroughServiceCallServiceFilterConfiguration;
- staticServiceDiscovery?: StaticServiceCallServiceDiscoveryConfiguration;
- zookeeperServiceDiscovery?: ZooKeeperServiceCallServiceDiscoveryConfiguration;
public constructor(init?: Partial<ServiceCallDefinition>) {
super('ServiceCallDefinition');
Object.assign(this, init);
@@ -2862,18 +2862,18 @@ export class DeadLetterChannelDefinition extends CamelElement {
stepName?: string = 'deadLetterChannel';
deadLetterUri: string = '';
deadLetterHandleNewException?: boolean;
+ redeliveryPolicy?: RedeliveryPolicyDefinition;
+ useOriginalMessage?: boolean;
+ useOriginalBody?: boolean;
+ redeliveryPolicyRef?: string;
loggerRef?: string;
level?: string;
logName?: string;
- useOriginalMessage?: boolean;
- useOriginalBody?: boolean;
onRedeliveryRef?: string;
onExceptionOccurredRef?: string;
onPrepareFailureRef?: string;
retryWhileRef?: string;
- redeliveryPolicyRef?: string;
executorServiceRef?: string;
- redeliveryPolicy?: RedeliveryPolicyDefinition;
id?: string = 'deadLetterChannel-' + uuidv4().substring(0,4);
public constructor(init?: Partial<DeadLetterChannelDefinition>) {
super('DeadLetterChannelDefinition');
@@ -2883,18 +2883,18 @@ export class DeadLetterChannelDefinition extends CamelElement {
export class DefaultErrorHandlerDefinition extends CamelElement {
stepName?: string = 'defaultErrorHandler';
+ redeliveryPolicy?: RedeliveryPolicyDefinition;
+ useOriginalMessage?: boolean;
+ useOriginalBody?: boolean;
+ redeliveryPolicyRef?: string;
loggerRef?: string;
level?: string;
logName?: string;
- useOriginalMessage?: boolean;
- useOriginalBody?: boolean;
onRedeliveryRef?: string;
onExceptionOccurredRef?: string;
onPrepareFailureRef?: string;
retryWhileRef?: string;
- redeliveryPolicyRef?: string;
executorServiceRef?: string;
- redeliveryPolicy?: RedeliveryPolicyDefinition;
id?: string = 'defaultErrorHandler-' + uuidv4().substring(0,4);
public constructor(init?: Partial<DefaultErrorHandlerDefinition>) {
super('DefaultErrorHandlerDefinition');
@@ -2906,18 +2906,18 @@ export class JtaTransactionErrorHandlerDefinition extends CamelElement {
stepName?: string = 'jtaTransactionErrorHandler';
transactedPolicyRef?: string;
rollbackLoggingLevel?: string;
+ redeliveryPolicy?: RedeliveryPolicyDefinition;
+ useOriginalMessage?: boolean;
+ useOriginalBody?: boolean;
+ redeliveryPolicyRef?: string;
loggerRef?: string;
level?: string;
logName?: string;
- useOriginalMessage?: boolean;
- useOriginalBody?: boolean;
onRedeliveryRef?: string;
onExceptionOccurredRef?: string;
onPrepareFailureRef?: string;
retryWhileRef?: string;
- redeliveryPolicyRef?: string;
executorServiceRef?: string;
- redeliveryPolicy?: RedeliveryPolicyDefinition;
id?: string = 'jtaTransactionErrorHandler-' + uuidv4().substring(0,4);
public constructor(init?: Partial<JtaTransactionErrorHandlerDefinition>) {
super('JtaTransactionErrorHandlerDefinition');
@@ -2948,18 +2948,18 @@ export class SpringTransactionErrorHandlerDefinition extends CamelElement {
stepName?: string = 'springTransactionErrorHandler';
transactedPolicyRef?: string;
rollbackLoggingLevel?: string;
+ redeliveryPolicy?: RedeliveryPolicyDefinition;
+ useOriginalMessage?: boolean;
+ useOriginalBody?: boolean;
+ redeliveryPolicyRef?: string;
loggerRef?: string;
level?: string;
logName?: string;
- useOriginalMessage?: boolean;
- useOriginalBody?: boolean;
onRedeliveryRef?: string;
onExceptionOccurredRef?: string;
onPrepareFailureRef?: string;
retryWhileRef?: string;
- redeliveryPolicyRef?: string;
executorServiceRef?: string;
- redeliveryPolicy?: RedeliveryPolicyDefinition;
id?: string = 'springTransactionErrorHandler-' + uuidv4().substring(0,4);
public constructor(init?: Partial<SpringTransactionErrorHandlerDefinition>) {
super('SpringTransactionErrorHandlerDefinition');
@@ -3162,6 +3162,7 @@ export class MethodCallExpression extends CamelElement {
method?: string;
beanType?: string;
scope?: string;
+ validate?: boolean;
resultType?: string;
trim?: boolean;
id?: string = 'method-' + uuidv4().substring(0,4);
@@ -3827,7 +3828,6 @@ export class DataFormatTransformerDefinition extends CamelElement {
fhirJson?: FhirJsonDataFormat;
fhirXml?: FhirXmlDataFormat;
flatpack?: FlatpackDataFormat;
- fromType?: string;
grok?: GrokDataFormat;
gzipDeflater?: GzipDeflaterDataFormat;
hl7?: HL7DataFormat;
@@ -3838,12 +3838,10 @@ export class DataFormatTransformerDefinition extends CamelElement {
jsonApi?: JsonApiDataFormat;
lzf?: LZFDataFormat;
mimeMultipart?: MimeMultipartDataFormat;
- name?: string;
parquetAvro?: ParquetAvroDataFormat | string;
pgp?: PGPDataFormat;
protobuf?: ProtobufDataFormat | string;
rss?: RssDataFormat;
- scheme?: string;
soap?: SoapDataFormat | string;
swiftMt?: SwiftMtDataFormat | string;
swiftMx?: SwiftMxDataFormat;
@@ -3851,7 +3849,6 @@ export class DataFormatTransformerDefinition extends CamelElement {
tarFile?: TarFileDataFormat;
thrift?: ThriftDataFormat | string;
tidyMarkup?: TidyMarkupDataFormat;
- toType?: string;
univocityCsv?: UniVocityCsvDataFormat;
univocityFixed?: UniVocityFixedDataFormat;
univocityTsv?: UniVocityTsvDataFormat;
@@ -3859,6 +3856,10 @@ export class DataFormatTransformerDefinition extends CamelElement {
yaml?: YAMLDataFormat;
zipDeflater?: ZipDeflaterDataFormat;
zipFile?: ZipFileDataFormat;
+ fromType?: string;
+ name?: string;
+ scheme?: string;
+ toType?: string;
public constructor(init?: Partial<DataFormatTransformerDefinition>) {
super('DataFormatTransformerDefinition');
Object.assign(this, init);
diff --git a/karavan-generator/pom.xml b/karavan-generator/pom.xml
index 831fd9db..c3a78dad 100644
--- a/karavan-generator/pom.xml
+++ b/karavan-generator/pom.xml
@@ -28,7 +28,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
- <version.camel-core>4.0.1</version.camel-core>
+ <version.camel-core>4.1.0</version.camel-core>
<version.camel-kamelet>4.0.1</version.camel-kamelet>
<camel.k.extension.version>6.7.2</camel.k.extension.version>
<version.vertx>4.4.3</version.vertx>
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 1b4e1236..a7fbbfa8 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
@@ -54,24 +54,69 @@ public class AbstractGenerator {
return new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("definitions");
}
- protected Map<String, String> getStepNames(){
- // Prepare stepNames map
+ protected String getStepNameForClass (String className) {
+ if (className.equals("CatchDefinition")) {
+ className = "doCatch";
+ } else if (className.equals("ConvertBodyDefinition")) {
+ className = "convertBodyTo";
+ } else if (className.equals("FinallyDefinition")) {
+ className = "doFinally";
+ } else if (className.equals("SamplingDefinition")) {
+ className = "sample";
+ } else if (className.endsWith("Definition")) {
+ className = className.substring(0, className.length() - 10);
+ } else if (className.endsWith("DataFormat")){
+ return getDataFormatStepNameForClass().get(className);
+ } else if (className.endsWith("Expression")){
+ return getExpressionStepNameForClass().get(className);
+ }
+ return deCapitalize(className);
+ }
+
+ protected Map<String, String> getDataFormatStepNameForClass(){
+ Map<String, String> stepNames = new LinkedHashMap<>();
+ JsonObject definitions = getDefinitions();
+ JsonObject props = definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties");
+ props.getMap().keySet().forEach(key -> {
+ String className = classSimple(props.getJsonObject(key).getString("$ref"));
+ stepNames.put(className, key);
+ });
+ return stepNames;
+ }
+
+ protected Map<String, String> getExpressionStepNameForClass(){
+ Map<String, String> stepNames = new LinkedHashMap<>();
JsonObject definitions = getDefinitions();
- Map<String, String> stepNames = getProcessorStepName(new JsonObject(getCamelYamlDSL()).getJsonObject("items").getJsonObject("properties"));
- stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
- stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
- stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
- stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
+ JsonArray props = definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonArray("anyOf").getJsonObject(0).getJsonArray("oneOf");
+ for (int i =0; i < props.size(); i++) {
+ JsonObject prop = props.getJsonObject(i);
+ String key = prop.getJsonObject("properties").getMap().keySet().iterator().next();
+ String fullClassName = prop.getJsonObject("properties").getJsonObject(key).getString("$ref");
+ String className = classSimple(fullClassName);
+ stepNames.put(className, key);
+ System.out.println(className + " : " + key);
+ }
return stepNames;
}
+// protected Map<String, String> getStepNames(){
+// // Prepare stepNames map
+// JsonObject definitions = getDefinitions();
+// Map<String, String> stepNames = getProcessorStepName(new JsonObject(getCamelYamlDSL()).getJsonObject("items").getJsonObject("properties"));
+// stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
+// stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
+// stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
+// stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
+// return stepNames;
+// }
+
protected Map<String, JsonObject> getDslMetadata(){
// Generate DSL Metadata
String camelYamlDSL = getCamelYamlDSL();
JsonObject definitions = new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("definitions");
// Prepare stepNames map
- Map<String, String> stepNames = getStepNames();
+ Map<String, String> stepNames = getProcessorStepNameMap();
Map<String, JsonObject> classProps = new HashMap<>();
Map<String, Object> defsMap = new HashMap<>();
@@ -255,6 +300,50 @@ public class AbstractGenerator {
return result;
}
+
+
+ protected Map<String, String> getProcessorStepNameMapForObject(String key, JsonObject jsonObject) {
+ Map<String, String> result = new HashMap<>();
+
+ jsonObject.fieldNames().forEach(k -> {
+ Object object = jsonObject.getValue(k);
+ if (object instanceof JsonObject) {
+ JsonObject value = jsonObject.getJsonObject(k);
+ result.putAll(getProcessorStepNameMapForObject(k, value));
+ } else if (object instanceof JsonArray) {
+ JsonArray value = jsonObject.getJsonArray(k);
+ result.putAll(getProcessorStepNameMapForArray(value));
+ } else if (object instanceof String && k.equals("$ref") && !object.toString().contains(".deserializers.")) {
+ String ref = jsonObject.getString(k);
+ String className = classSimple(ref);
+ result.put(className, key);
+ }
+ });
+ return result;
+ }
+
+ protected Map<String, String> getProcessorStepNameMapForArray(JsonArray jsonArray) {
+ Map<String, String> result = new HashMap<>();
+
+ jsonArray.forEach(object -> {
+ if (object instanceof JsonObject) {
+ result.putAll(getProcessorStepNameMapForObject(null, (JsonObject) object));
+ } else if (object instanceof JsonArray) {
+ result.putAll(getProcessorStepNameMapForArray((JsonArray) object));
+ }
+ });
+ return result;
+ }
+
+ protected Map<String, String> getProcessorStepNameMap() {
+ String camelYamlDSL = getCamelYamlDSL();
+ JsonObject definitions = new JsonObject(camelYamlDSL);
+
+ Map<String, String> result = new HashMap<>(getProcessorStepNameMapForObject(null, definitions));
+ result.put("ToDynamicDefinition", "toD");
+ return result;
+ }
+
protected JsonObject getDefinition(JsonObject definitions, String className) {
return definitions.getJsonObject(className.replace("#/items/definitions/", ""));
}
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
index 0493289f..c540caed 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.karavan.generator;
+import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import java.util.*;
@@ -42,65 +43,84 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
camelModel.append(readFileText(modelHeader));
String camelYamlDSL = getCamelYamlDSL();
+
JsonObject definitions = new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("definitions");
// Prepare stepNames map
- Map<String, String> stepNames = getProcessorStepName(new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("properties"));
- stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
- stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
- stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
-
- // add additional classes
- getClasses(definitions, "org.apache.camel.model").forEach(s -> {
- String className = classSimple(s);
- if (!stepNames.containsKey(className)) {
- String stepName = deCapitalize(className.replace("Definition", ""));
- stepNames.put(className, stepName);
- }
- });
+ Map<String, String> stepNames = getProcessorStepNameMap();
List<String> modelList = getClasses(definitions, "org.apache.camel");
modelList.forEach(className -> {
- String model = generateModel(className, definitions.getJsonObject(className), definitions, stepNames, getDslMetadata());
+ String model = generateModel(className, definitions.getJsonObject(className), definitions, getDslMetadata());
camelModel.append(model).append(System.lineSeparator());
});
writeFileText(targetModel, camelModel.toString());
}
- private String generateModel(String classFullName, JsonObject obj, JsonObject definitions, Map<String, String> stepNames, Map<String, JsonObject> dslMetadata) {
+ private Map<String, JsonObject> getJsonObjectProperties (JsonObject val) {
+ Map<String, JsonObject> properties = new LinkedHashMap<>();
+ val.getMap().keySet().forEach(s -> {
+ JsonObject value = val.getJsonObject(s);
+ if (!value.getMap().isEmpty()) {
+ properties.put(s, val.getJsonObject(s));
+ } else if (s.equals("expression")){
+ properties.put(s, JsonObject.of("$ref", "#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"));
+ }
+ });
+ return properties;
+ }
+
+ private String generateModel(String classFullName, JsonObject obj, JsonObject definitions, Map<String, JsonObject> dslMetadata) {
String className = classSimple(classFullName);
- JsonObject properties = obj.containsKey("oneOf")
- ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties")
- : obj.getJsonObject("properties");
+ Map<String, JsonObject> properties = new LinkedHashMap<>();
+
+ obj.getMap().keySet().forEach(key -> {
+ if (key.equals("oneOf")) {
+ JsonObject val = obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties");
+ properties.putAll(getJsonObjectProperties(val));
+ } else if (key.equals("properties")) {
+ JsonObject val = obj.getJsonObject("properties");
+ properties.putAll(getJsonObjectProperties(val));
+ } else if (key.equals("anyOf")) {
+ JsonArray vals = obj.getJsonArray("anyOf").getJsonObject(0).getJsonArray("oneOf");
+ for (int i = 0; i < vals.size(); i++){
+ JsonObject data = vals.getJsonObject(i);
+ if (!data.containsKey("not") && data.containsKey("type")) {
+ JsonObject val = data.getJsonObject("properties");
+ properties.putAll(getJsonObjectProperties(val));
+ }
+ }
+ }
+ });
List<String> required = obj.containsKey("required") ? obj.getJsonArray("required").getList() : List.of();
List<String> attrs = new ArrayList<>();
- String stepName = stepNames.get(className);
- if (className.endsWith("Definition") && stepNames.containsKey(className)) {
+ String stepName = getStepNameForClass(className);
+ if (className.endsWith("Definition")) {
attrs.add(" stepName?: string = '" + stepName + "'");
- } else if (className.endsWith("Expression") && stepNames.containsKey(className)) {
- attrs.add(" expressionName?: string = '" + stepNames.get(className) + "'");
- } else if (className.endsWith("DataFormat") && stepNames.containsKey(className)) {
- attrs.add(" dataFormatName?: string = '" + stepNames.get(className) + "'");
- }
- if (properties != null) {
- properties.getMap().keySet().stream().sorted(getComparator(stepName)).forEach(name -> {
- JsonObject attributeValue = properties.getJsonObject(name);
- boolean req = required.contains(name);
- String generatedValue = ("id".equals(name) && stepName != null && !"routeConfiguration".equals(stepName)) ? "'" + stepName + "-' + uuidv4().substring(0,4)" : null;
- String attributeType = getAttributeType(attributeValue, req, definitions, generatedValue);
- String r = req ? "" : "?";
- name = name.equals("constructor") ? "_constructor" : name; // exception for YAMLDataFormat
- if (className.equals("ChoiceDefinition") && name.equals("steps")) { // exception for ChoiceDefinition
- } else if (className.equals("SwitchDefinition") && name.equals("steps")) { // exception for SwitchDefinition
- } else if (className.equals("KameletDefinition") && name.equals("steps")) { // exception for KameletDefinition
- } else {
- attrs.add(" " + name + r + ": " + attributeType);
- }
- });
+ } else if (className.endsWith("Expression")) {
+ attrs.add(" expressionName?: string = '" + stepName + "'");
+ } else if (className.endsWith("DataFormat")) {
+ attrs.add(" dataFormatName?: string = '" + stepName + "'");
}
- String s2 = attrs.stream().collect(Collectors.joining(";\n")) + ((attrs.isEmpty()) ? "" : ";");
+
+ properties.keySet().stream().sorted(getComparator(stepName)).forEach(name -> {
+ JsonObject attributeValue = properties.get(name);
+ boolean req = required.contains(name);
+ String generatedValue = ("id".equals(name) && stepName != null && !"routeConfiguration".equals(stepName)) ? "'" + stepName + "-' + uuidv4().substring(0,4)" : null;
+ String attributeType = getAttributeType(name, attributeValue, req, definitions, generatedValue);
+
+ String r = req ? "" : "?";
+ name = name.equals("constructor") ? "_constructor" : name; // exception for YAMLDataFormat
+ if (className.equals("ChoiceDefinition") && name.equals("steps")) { // exception for ChoiceDefinition
+ } else if (className.equals("SwitchDefinition") && name.equals("steps")) { // exception for SwitchDefinition
+ } else if (className.equals("KameletDefinition") && name.equals("steps")) { // exception for KameletDefinition
+ } else if (!Objects.equals(attributeType, "null")) {
+ attrs.add(" " + name + r + ": " + attributeType);
+ }
+ });
+ String s2 = String.join(";\n", attrs) + ((attrs.isEmpty()) ? "" : ";");
return String.format(readFileText(modelTemplate), className, s2);
}
@@ -108,7 +128,7 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
String json = getMetaModel(stepName);
if (json != null) {
JsonObject props = new JsonObject(json).getJsonObject("properties");
- List propsLowerCase = props.getMap().keySet().stream().map(s -> s.toLowerCase()).collect(Collectors.toList());
+ List propsLowerCase = props.getMap().keySet().stream().map(String::toLowerCase).collect(Collectors.toList());
return Comparator.comparing(e -> {
if (propsLowerCase.contains(e.toLowerCase())) return propsLowerCase.indexOf(e.toLowerCase());
else return propsLowerCase.size() + 1;
@@ -117,7 +137,7 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
return Comparator.comparing(s -> 0);
}
- private String getAttributeType(JsonObject attribute, boolean required, JsonObject definitions, String generatedValue) {
+ private String getAttributeType(String stepName, JsonObject attribute, boolean required, JsonObject definitions, String generatedValue) {
if (attribute.containsKey("$ref")) {
String classFullName = attribute.getString("$ref");
JsonObject clazz = getDefinition(definitions, classFullName);
@@ -134,6 +154,9 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
} else if (items.containsKey("$ref")) {
String className = classSimple(items.getString("$ref"));
return className + "[] = []";
+ } else if (items.containsKey("properties") && items.getJsonObject("properties").containsKey(stepName)) {
+ String className = classSimple(items.getJsonObject("properties").getJsonObject(stepName).getString("$ref"));
+ return className + "[] = []";
} else {
return items.getString("type") + "[] = []";
}
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
index f72206dd..3e74e3a0 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
@@ -57,7 +57,7 @@ public final class CamelMetadataGenerator extends AbstractGenerator {
camelModel.append("]\n\n");
// Prepare stepNames map
- Map<String, String> stepNames = getStepNames();
+ Map<String, String> stepNames = getProcessorStepNameMap();
Map<String, JsonObject> classProps = new HashMap<>();
// Generate DataFormatMetadata
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
index c3950392..5e6360e4 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
@@ -28,9 +28,9 @@ public final class KaravanGenerator {
paths = new String[] {args[0]};
}
CamelDefinitionGenerator.generate();
- CamelDefinitionApiGenerator.generate();
- CamelDefinitionYamlStepGenerator.generate();
- CamelMetadataGenerator.generate();
+// CamelDefinitionApiGenerator.generate();
+// CamelDefinitionYamlStepGenerator.generate();
+// CamelMetadataGenerator.generate();
KameletGenerator.generate(paths);
CamelComponentsGenerator.generate(paths);
System.exit(0);