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 2022/03/01 01:15:12 UTC

[camel-karavan] branch main updated: Rest configuration (#204)

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 187f957  Rest configuration (#204)
187f957 is described below

commit 187f957c769152ff7541710f2a5fa8e3a966a807
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Mon Feb 28 20:15:03 2022 -0500

    Rest configuration (#204)
    
    * RestConfiguration
    
    * Key-Value object form
---
 karavan-core/src/core/api/CamelDefinitionApi.ts    |  12 +-
 karavan-core/src/core/api/CamelDefinitionApiExt.ts |  35 +-
 karavan-core/src/core/api/CamelDefinitionYaml.ts   |   1 +
 .../src/core/api/CamelDefinitionYamlStep.ts        |  10 +-
 karavan-core/src/core/model/CamelDefinition.ts     | 111 +++++--
 karavan-core/src/core/model/CamelMetadata.ts       | 353 ++++++++++-----------
 karavan-core/test/restConfigDsl.yaml               |  17 +
 karavan-core/test/restDsl.spec.ts                  |  17 +-
 karavan-designer/src/App.tsx                       |   4 +-
 karavan-designer/src/designer/KaravanDesigner.tsx  |   1 -
 karavan-designer/src/designer/karavan.css          |  31 +-
 .../src/designer/rest/RestConfigurationCard.tsx    |  68 ++++
 .../src/designer/rest/RestDesigner.tsx             |  60 +++-
 .../designer/route/property/DslPropertyField.tsx   |  75 +++--
 .../src/designer/route/property/ObjectField.tsx    |   4 +-
 .../generator/CamelDefinitionGenerator.java        |   9 +
 16 files changed, 526 insertions(+), 282 deletions(-)

diff --git a/karavan-core/src/core/api/CamelDefinitionApi.ts b/karavan-core/src/core/api/CamelDefinitionApi.ts
index 421bd2b..42e25b7 100644
--- a/karavan-core/src/core/api/CamelDefinitionApi.ts
+++ b/karavan-core/src/core/api/CamelDefinitionApi.ts
@@ -41,7 +41,6 @@ import {
     InterceptSendToEndpointDefinition,
     KameletDefinition,
     LoadBalanceDefinition,
-    LoadBalancerDefinition,
     LogDefinition,
     LoopDefinition,
     MarshalDefinition,
@@ -875,14 +874,6 @@ export class CamelDefinitionApi {
         return def;
     }
 
-    static createLoadBalancerDefinition = (element: any): LoadBalancerDefinition => {
-        
-        const def = element ? new LoadBalancerDefinition({...element}) : new LoadBalancerDefinition();
-        def.uuid = element?.uuid ? element.uuid : def.uuid;
-
-        return def;
-    }
-
     static createLogDefinition = (element: any): LogDefinition => {
         if (element && typeof element === 'string') element = {message: element};
         const def = element ? new LogDefinition({...element}) : new LogDefinition();
@@ -1219,7 +1210,7 @@ export class CamelDefinitionApi {
     }
 
     static createRemovePropertyDefinition = (element: any): RemovePropertyDefinition => {
-        
+        if (element && typeof element === 'string') element = {name: element};
         const def = element ? new RemovePropertyDefinition({...element}) : new RemovePropertyDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid;
 
@@ -3353,7 +3344,6 @@ export class CamelDefinitionApi {
             case 'InterceptSendToEndpointDefinition': return CamelDefinitionApi.createInterceptSendToEndpointDefinition(newBody);
             case 'KameletDefinition': return CamelDefinitionApi.createKameletDefinition(newBody);
             case 'LoadBalanceDefinition': return CamelDefinitionApi.createLoadBalanceDefinition(newBody);
-            case 'LoadBalancerDefinition': return CamelDefinitionApi.createLoadBalancerDefinition(newBody);
             case 'LogDefinition': return CamelDefinitionApi.createLogDefinition(newBody);
             case 'LoopDefinition': return CamelDefinitionApi.createLoopDefinition(newBody);
             case 'MarshalDefinition': return CamelDefinitionApi.createMarshalDefinition(newBody);
diff --git a/karavan-core/src/core/api/CamelDefinitionApiExt.ts b/karavan-core/src/core/api/CamelDefinitionApiExt.ts
index d151748..9d16f2f 100644
--- a/karavan-core/src/core/api/CamelDefinitionApiExt.ts
+++ b/karavan-core/src/core/api/CamelDefinitionApiExt.ts
@@ -248,20 +248,7 @@ export class CamelDefinitionApiExt {
 
     static addRestToIntegration = (integration: Integration, rest: RestDefinition): Integration => {
         const flows: any[] = [];
-        integration.spec.flows?.filter(flow => flow.dslName !== 'RestDefinition').forEach(x => flows.push(x));
-        if (integration.spec.flows?.filter(flow => flow.dslName === 'RestDefinition' && flow.uuid === rest.uuid).length === 1){
-            integration.spec.flows?.filter(flow => flow.dslName === 'RestDefinition').forEach(flow => {
-                if (flow.uuid !== rest.uuid) {
-                    flows.push(flow);
-                } else {
-                    flows.push(rest);
-                }
-            });
-        } else {
-            integration.spec.flows?.filter(flow => flow.dslName === 'RestDefinition' && flow.uuid !== rest.uuid).forEach(x => flows.push(x));
-            flows.push(rest);
-        }
-        integration.spec.flows = flows;
+        integration.spec.flows?.push(rest)
         return integration;
     }
 
@@ -297,6 +284,13 @@ export class CamelDefinitionApiExt {
         return elements;
     }
 
+    static deleteRestConfigurationFromIntegration = (integration: Integration): Integration => {
+        const flows: any[] = [];
+        integration.spec.flows?.filter(flow => flow.dslName !== 'RestConfigurationDefinition').forEach(x => flows.push(x));
+        integration.spec.flows = flows;
+        return integration;
+    }
+
     static deleteRestFromIntegration = (integration: Integration, restUuid?: string): Integration => {
         const flows: any[] = [];
         integration.spec.flows?.filter(flow => flow.dslName !== 'RestDefinition').forEach(x => flows.push(x));
@@ -366,17 +360,24 @@ export class CamelDefinitionApiExt {
     }
 
     static updateIntegrationRestElement = (integration: Integration, e: CamelElement): Integration => {
-        const elementClone = CamelUtil.cloneStep(e);
         const int: Integration = CamelUtil.cloneIntegration(integration);
         const flows: CamelElement[] = [];
-        integration.spec.flows?.filter(f => f.dslName !== 'RestDefinition').forEach(f => flows.push(f));
         const isRest = integration.spec.flows?.filter(f => f.dslName === 'RestDefinition' && f.uuid === e.uuid).length === 1;
-        if (isRest){
+        const isRestConfiguration = integration.spec.flows?.filter(f => f.dslName === 'RestConfigurationDefinition' && f.uuid === e.uuid).length === 1;
+        if (isRestConfiguration) {
+            integration.spec.flows?.filter(f => f.dslName !== 'RestConfigurationDefinition').forEach(f => flows.push(f));
+            integration.spec.flows?.filter(f => f.dslName === 'RestConfigurationDefinition').forEach(f => {
+                if (f.uuid === e.uuid) flows.push(CamelUtil.cloneStep(e));
+                else flows.push(f);
+            })
+        } else if (isRest) {
+            integration.spec.flows?.filter(f => f.dslName !== 'RestDefinition').forEach(f => flows.push(f));
             integration.spec.flows?.filter(f => f.dslName === 'RestDefinition').forEach(f => {
                 if (f.uuid === e.uuid) flows.push(CamelUtil.cloneStep(e));
                 else flows.push(f);
             })
         } else {
+            integration.spec.flows?.filter(f => f.dslName !== 'RestDefinition').forEach(f => flows.push(f));
             integration.spec.flows?.filter(f => f.dslName === 'RestDefinition').forEach((rest: RestDefinition) => {
                 if (rest.get) rest.get = rest.get.map(get => get.uuid === e.uuid ? e : get);
                 if (rest.post) rest.post = rest.post.map(post => post.uuid === e.uuid ? e : post);
diff --git a/karavan-core/src/core/api/CamelDefinitionYaml.ts b/karavan-core/src/core/api/CamelDefinitionYaml.ts
index f92924d..3ed294f 100644
--- a/karavan-core/src/core/api/CamelDefinitionYaml.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYaml.ts
@@ -143,6 +143,7 @@ export class CamelDefinitionYaml {
             let newValue: any = JSON.parse(JSON.stringify(value));
             delete newValue[stepNameField];
             if ((value.inArray && !value.inSteps)
+                || key === 'expression'
                 || key === 'from') {
                 delete newValue.inArray;
                 delete newValue.inSteps;
diff --git a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
index b41b49a..c8a5a85 100644
--- a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
@@ -42,7 +42,6 @@ import {
     InterceptSendToEndpointDefinition,
     KameletDefinition,
     LoadBalanceDefinition,
-    LoadBalancerDefinition,
     LogDefinition,
     LoopDefinition,
     MarshalDefinition,
@@ -889,13 +888,6 @@ export class CamelDefinitionYamlStep {
         return def;
     }
 
-    static readLoadBalancerDefinition = (element: any): LoadBalancerDefinition => {
-        
-        const def = element ? new LoadBalancerDefinition({...element}) : new LoadBalancerDefinition();
-
-        return def;
-    }
-
     static readLogDefinition = (element: any): LogDefinition => {
         if (element && typeof element === 'string') element = {message: element};
         const def = element ? new LogDefinition({...element}) : new LogDefinition();
@@ -1249,7 +1241,7 @@ export class CamelDefinitionYamlStep {
     }
 
     static readRemovePropertyDefinition = (element: any): RemovePropertyDefinition => {
-        
+        if (element && typeof element === 'string') element = {name: element};
         const def = element ? new RemovePropertyDefinition({...element}) : new RemovePropertyDefinition();
 
         return def;
diff --git a/karavan-core/src/core/model/CamelDefinition.ts b/karavan-core/src/core/model/CamelDefinition.ts
index d80e2a1..3cfd6e8 100644
--- a/karavan-core/src/core/model/CamelDefinition.ts
+++ b/karavan-core/src/core/model/CamelDefinition.ts
@@ -50,6 +50,7 @@ export class ProcessorDefinition extends CamelElement {
     resequence?: ResequenceDefinition;
     routingSlip?: RoutingSlipDefinition | string;
     transform?: TransformDefinition;
+    stepName?: string = 'processor';
     removeProperties?: RemovePropertiesDefinition | string;
     policy?: PolicyDefinition;
     validate?: ValidateDefinition;
@@ -57,7 +58,7 @@ export class ProcessorDefinition extends CamelElement {
     process?: ProcessDefinition;
     threads?: ThreadsDefinition;
     setBody?: SetBodyDefinition;
-    sample?: SamplingDefinition;
+    sample?: SamplingDefinition | string;
     throwException?: ThrowExceptionDefinition;
     dynamicRouter?: DynamicRouterDefinition;
     multicast?: MulticastDefinition;
@@ -269,6 +270,7 @@ export class ClaimCheckDefinition extends CamelElement {
 
 export class ContextScanDefinition extends CamelElement {
     excludes?: string[] = [];
+    stepName?: string = 'contextScan';
     includeNonSingletons?: boolean;
     includes?: string[] = []
     public constructor(init?: Partial<ContextScanDefinition>) {
@@ -292,6 +294,7 @@ export class ConvertBodyDefinition extends CamelElement {
 }
 
 export class DataFormatDefinition extends CamelElement {
+    stepName?: string = 'dataFormat';
     id?: string
     public constructor(init?: Partial<DataFormatDefinition>) {
         super('DataFormatDefinition')
@@ -315,6 +318,7 @@ export class DelayDefinition extends CamelElement {
 }
 
 export class DescriptionDefinition extends CamelElement {
+    stepName?: string = 'description';
     text?: string;
     lang?: string
     public constructor(init?: Partial<DescriptionDefinition>) {
@@ -374,6 +378,7 @@ export class ExpressionSubElementDefinition extends CamelElement {
     xpath?: XPathExpression | string;
     groovy?: GroovyExpression | string;
     csimple?: CSimpleExpression | string;
+    stepName?: string = 'expressionSubElement';
     exchangeProperty?: ExchangePropertyExpression | string;
     jsonpath?: JsonPathExpression | string;
     header?: HeaderExpression | string;
@@ -395,6 +400,7 @@ export class FaultToleranceConfigurationDefinition extends CamelElement {
     requestVolumeThreshold?: number;
     bulkheadExecutorService?: string;
     delay?: string;
+    stepName?: string = 'faultToleranceConfiguration';
     bulkheadWaitingTaskQueue?: number;
     circuitBreaker?: string;
     id?: string;
@@ -444,6 +450,7 @@ export class FromDefinition extends CamelElement {
 }
 
 export class GlobalOptionDefinition extends CamelElement {
+    stepName?: string = 'globalOption';
     value: string = '';
     key: string = ''
     public constructor(init?: Partial<GlobalOptionDefinition>) {
@@ -453,6 +460,7 @@ export class GlobalOptionDefinition extends CamelElement {
 }
 
 export class GlobalOptionsDefinition extends CamelElement {
+    stepName?: string = 'globalOptions';
     globalOption?: GlobalOptionDefinition[] = []
     public constructor(init?: Partial<GlobalOptionsDefinition>) {
         super('GlobalOptionsDefinition')
@@ -473,6 +481,7 @@ export class HystrixConfigurationDefinition extends CamelElement {
     queueSizeRejectionThreshold?: number;
     fallbackEnabled?: boolean;
     threadPoolRollingNumberStatisticalWindowInMilliseconds?: number;
+    stepName?: string = 'hystrixConfiguration';
     maxQueueSize?: number;
     circuitBreakerSleepWindowInMilliseconds?: number;
     id?: string;
@@ -545,6 +554,7 @@ export class InOutDefinition extends CamelElement {
 
 export class InputTypeDefinition extends CamelElement {
     urn: string = '';
+    stepName?: string = 'inputType';
     description?: string;
     id?: string;
     validate?: boolean
@@ -624,14 +634,6 @@ export class LoadBalanceDefinition extends CamelElement {
     }
 }
 
-export class LoadBalancerDefinition extends CamelElement {
-    id?: string
-    public constructor(init?: Partial<LoadBalancerDefinition>) {
-        super('LoadBalancerDefinition')
-        Object.assign(this, init)
-    }
-}
-
 export class LogDefinition extends CamelElement {
     inheritErrorHandler?: boolean;
     logName?: string;
@@ -795,6 +797,7 @@ export class OnFallbackDefinition extends CamelElement {
 
 export class OptimisticLockRetryPolicyDefinition extends CamelElement {
     retryDelay?: string;
+    stepName?: string = 'optimisticLockRetryPolicy';
     maximumRetries?: number;
     randomBackOff?: boolean;
     exponentialBackOff?: boolean;
@@ -819,6 +822,7 @@ export class OtherwiseDefinition extends CamelElement {
 
 export class OutputDefinition extends CamelElement {
     inheritErrorHandler?: boolean;
+    stepName?: string = 'output';
     description?: string;
     id?: string;
     steps?: CamelElement[] = []
@@ -830,6 +834,7 @@ export class OutputDefinition extends CamelElement {
 
 export class OutputTypeDefinition extends CamelElement {
     urn: string = '';
+    stepName?: string = 'outputType';
     description?: string;
     id?: string;
     validate?: boolean
@@ -842,6 +847,7 @@ export class OutputTypeDefinition extends CamelElement {
 export class PackageScanDefinition extends CamelElement {
     excludes?: string[] = [];
     package?: string[] = [];
+    stepName?: string = 'packageScan';
     includes?: string[] = []
     public constructor(init?: Partial<PackageScanDefinition>) {
         super('PackageScanDefinition')
@@ -906,6 +912,7 @@ export class ProcessDefinition extends CamelElement {
 }
 
 export class PropertyDefinition extends CamelElement {
+    stepName?: string = 'property';
     value: string = '';
     key: string = ''
     public constructor(init?: Partial<PropertyDefinition>) {
@@ -916,6 +923,7 @@ export class PropertyDefinition extends CamelElement {
 
 export class PropertyExpressionDefinition extends CamelElement {
     expression?: ExpressionDefinition;
+    stepName?: string = 'propertyExpression';
     key: string = ''
     public constructor(init?: Partial<PropertyExpressionDefinition>) {
         super('PropertyExpressionDefinition')
@@ -952,28 +960,29 @@ export class RecipientListDefinition extends CamelElement {
 export class RedeliveryPolicyDefinition extends CamelElement {
     logNewException?: boolean;
     backOffMultiplier?: number;
-    exchangeFormatterRef?: string;
-    allowRedeliveryWhileStopping?: boolean;
     delayPattern?: string;
-    retriesExhaustedLogLevel?: string;
-    logStackTrace?: boolean;
     retryAttemptedLogInterval?: number;
     logRetryAttempted?: boolean;
-    maximumRedeliveryDelay?: string;
-    useExponentialBackOff?: boolean;
     logExhaustedMessageHistory?: boolean;
+    stepName?: string = 'redeliveryPolicy';
     collisionAvoidanceFactor?: number;
-    asyncDelayedRedelivery?: boolean;
     logRetryStackTrace?: boolean;
     disableRedelivery?: boolean;
+    logExhaustedMessageBody?: boolean;
+    logHandled?: boolean;
+    useCollisionAvoidance?: boolean;
+    exchangeFormatterRef?: string;
+    allowRedeliveryWhileStopping?: boolean;
+    retriesExhaustedLogLevel?: string;
+    logStackTrace?: boolean;
+    maximumRedeliveryDelay?: string;
+    useExponentialBackOff?: boolean;
+    asyncDelayedRedelivery?: boolean;
     logContinued?: boolean;
     retryAttemptedLogLevel?: string;
     redeliveryDelay?: string;
-    logExhaustedMessageBody?: boolean;
-    logHandled?: boolean;
     maximumRedeliveries?: number;
-    logExhausted?: boolean;
-    useCollisionAvoidance?: boolean
+    logExhausted?: boolean
     public constructor(init?: Partial<RedeliveryPolicyDefinition>) {
         super('RedeliveryPolicyDefinition')
         Object.assign(this, init)
@@ -1021,7 +1030,7 @@ export class RemovePropertiesDefinition extends CamelElement {
 export class RemovePropertyDefinition extends CamelElement {
     inheritErrorHandler?: boolean;
     stepName?: string = 'removeProperty';
-    name?: string;
+    name: string = '';
     description?: string;
     id?: string
     public constructor(init?: Partial<RemovePropertyDefinition>) {
@@ -1051,6 +1060,7 @@ export class Resilience4jConfigurationDefinition extends CamelElement {
     minimumNumberOfCalls?: number;
     permittedNumberOfCallsInHalfOpenState?: number;
     slowCallRateThreshold?: number;
+    stepName?: string = 'resilience4jConfiguration';
     writableStackTraceEnabled?: boolean;
     automaticTransitionFromOpenToHalfOpenEnabled?: boolean;
     circuitBreaker?: string;
@@ -1066,7 +1076,8 @@ export class Resilience4jConfigurationDefinition extends CamelElement {
 }
 
 export class RestContextRefDefinition extends CamelElement {
-    ref: string = ''
+    ref: string = '';
+    stepName?: string = 'restContextRef'
     public constructor(init?: Partial<RestContextRefDefinition>) {
         super('RestContextRefDefinition')
         Object.assign(this, init)
@@ -1089,6 +1100,7 @@ export class RollbackDefinition extends CamelElement {
 
 export class RouteBuilderDefinition extends CamelElement {
     ref: string = '';
+    stepName?: string = 'routeBuilder';
     id?: string
     public constructor(init?: Partial<RouteBuilderDefinition>) {
         super('RouteBuilderDefinition')
@@ -1097,7 +1109,8 @@ export class RouteBuilderDefinition extends CamelElement {
 }
 
 export class RouteConfigurationContextRefDefinition extends CamelElement {
-    ref: string = ''
+    ref: string = '';
+    stepName?: string = 'routeConfigurationContextRef'
     public constructor(init?: Partial<RouteConfigurationContextRefDefinition>) {
         super('RouteConfigurationContextRefDefinition')
         Object.assign(this, init)
@@ -1107,6 +1120,7 @@ export class RouteConfigurationContextRefDefinition extends CamelElement {
 export class RouteConfigurationDefinition extends CamelElement {
     onCompletion?: OnCompletionDefinition[] = [];
     interceptSendToEndpoint?: InterceptSendToEndpointDefinition[] = [];
+    stepName?: string = 'routeConfiguration';
     intercept?: InterceptDefinition[] = [];
     onException?: OnExceptionDefinition[] = [];
     id?: string;
@@ -1118,7 +1132,8 @@ export class RouteConfigurationDefinition extends CamelElement {
 }
 
 export class RouteContextRefDefinition extends CamelElement {
-    ref: string = ''
+    ref: string = '';
+    stepName?: string = 'routeContextRef'
     public constructor(init?: Partial<RouteContextRefDefinition>) {
         super('RouteContextRefDefinition')
         Object.assign(this, init)
@@ -1139,6 +1154,7 @@ export class RouteDefinition extends CamelElement {
 }
 
 export class RouteTemplateBeanDefinition extends CamelElement {
+    stepName?: string = 'routeTemplateBean';
     name: string = '';
     property?: PropertyDefinition[] = [];
     type: string = '';
@@ -1164,6 +1180,7 @@ export class RouteTemplateDefinition extends CamelElement {
 }
 
 export class RouteTemplateParameterDefinition extends CamelElement {
+    stepName?: string = 'routeTemplateParameter';
     defaultValue?: string;
     name: string = '';
     description?: string;
@@ -1191,6 +1208,7 @@ export class RoutingSlipDefinition extends CamelElement {
 
 export class SagaActionUriDefinition extends CamelElement {
     inheritErrorHandler?: boolean;
+    stepName?: string = 'sagaActionUri';
     description?: string;
     id?: string;
     parameters?: any = {};
@@ -1226,7 +1244,6 @@ export class SamplingDefinition extends CamelElement {
     description?: string;
     messageFrequency?: number;
     id?: string;
-    units?: string;
     samplePeriod?: string
     public constructor(init?: Partial<SamplingDefinition>) {
         super('SamplingDefinition')
@@ -1371,6 +1388,7 @@ export class SwitchDefinition extends CamelElement {
 }
 
 export class TemplatedRouteBeanDefinition extends CamelElement {
+    stepName?: string = 'templatedRouteBean';
     name: string = '';
     property?: PropertyDefinition[] = [];
     type: string = '';
@@ -1396,6 +1414,7 @@ export class TemplatedRouteDefinition extends CamelElement {
 }
 
 export class TemplatedRouteParameterDefinition extends CamelElement {
+    stepName?: string = 'templatedRouteParameter';
     name: string = '';
     value: string = ''
     public constructor(init?: Partial<TemplatedRouteParameterDefinition>) {
@@ -1406,6 +1425,7 @@ export class TemplatedRouteParameterDefinition extends CamelElement {
 
 export class ThreadPoolProfileDefinition extends CamelElement {
     keepAliveTime?: number;
+    stepName?: string = 'threadPoolProfile';
     maxQueueSize?: number;
     allowCoreThreadTimeOut?: boolean;
     poolSize?: number;
@@ -1841,6 +1861,7 @@ export class ServiceCallConfigurationDefinition extends CamelElement {
     passThroughServiceFilter?: PassThroughServiceCallServiceFilterConfiguration;
     dnsServiceDiscovery?: DnsServiceCallServiceDiscoveryConfiguration;
     healthyServiceFilter?: HealthyServiceCallServiceFilterConfiguration;
+    stepName?: string = 'serviceCallConfiguration';
     ribbonLoadBalancer?: RibbonServiceCallServiceLoadBalancerConfiguration;
     serviceChooserRef?: string;
     consulServiceDiscovery?: ConsulServiceCallServiceDiscoveryConfiguration;
@@ -2210,6 +2231,7 @@ export class DataFormatsDefinition extends CamelElement {
     zipFile?: ZipFileDataFormat;
     jaxb?: JaxbDataFormat;
     rss?: RssDataFormat;
+    stepName?: string = 'dataFormats';
     mimeMultipart?: MimeMultipartDataFormat;
     asn1?: ASN1DataFormat | string;
     pgp?: PGPDataFormat;
@@ -2735,6 +2757,7 @@ export class YAMLDataFormat extends CamelElement {
 }
 
 export class YAMLTypeFilterDefinition extends CamelElement {
+    stepName?: string = 'yAMLTypeFilter';
     type?: string;
     value?: string
     public constructor(init?: Partial<YAMLTypeFilterDefinition>) {
@@ -2831,6 +2854,7 @@ export class ExpressionDefinition extends CamelElement {
     xpath?: XPathExpression | string;
     groovy?: GroovyExpression | string;
     csimple?: CSimpleExpression | string;
+    stepName?: string = 'expression';
     exchangeProperty?: ExchangePropertyExpression | string;
     jsonpath?: JsonPathExpression | string;
     header?: HeaderExpression | string;
@@ -3061,6 +3085,7 @@ export class XQueryExpression extends CamelElement {
 
 export class CustomLoadBalancerDefinition extends CamelElement {
     ref: string = '';
+    stepName?: string = 'customLoadBalancer';
     id?: string
     public constructor(init?: Partial<CustomLoadBalancerDefinition>) {
         super('CustomLoadBalancerDefinition')
@@ -3070,6 +3095,7 @@ export class CustomLoadBalancerDefinition extends CamelElement {
 
 export class FailoverLoadBalancerDefinition extends CamelElement {
     exception?: string[] = [];
+    stepName?: string = 'failoverLoadBalancer';
     sticky?: string;
     id?: string;
     maximumFailoverAttempts?: string;
@@ -3081,6 +3107,7 @@ export class FailoverLoadBalancerDefinition extends CamelElement {
 }
 
 export class RandomLoadBalancerDefinition extends CamelElement {
+    stepName?: string = 'randomLoadBalancer';
     id?: string
     public constructor(init?: Partial<RandomLoadBalancerDefinition>) {
         super('RandomLoadBalancerDefinition')
@@ -3089,6 +3116,7 @@ export class RandomLoadBalancerDefinition extends CamelElement {
 }
 
 export class RoundRobinLoadBalancerDefinition extends CamelElement {
+    stepName?: string = 'roundRobinLoadBalancer';
     id?: string
     public constructor(init?: Partial<RoundRobinLoadBalancerDefinition>) {
         super('RoundRobinLoadBalancerDefinition')
@@ -3097,6 +3125,7 @@ export class RoundRobinLoadBalancerDefinition extends CamelElement {
 }
 
 export class StickyLoadBalancerDefinition extends CamelElement {
+    stepName?: string = 'stickyLoadBalancer';
     correlationExpression?: ExpressionSubElementDefinition;
     id?: string
     public constructor(init?: Partial<StickyLoadBalancerDefinition>) {
@@ -3106,6 +3135,7 @@ export class StickyLoadBalancerDefinition extends CamelElement {
 }
 
 export class TopicLoadBalancerDefinition extends CamelElement {
+    stepName?: string = 'topicLoadBalancer';
     id?: string
     public constructor(init?: Partial<TopicLoadBalancerDefinition>) {
         super('TopicLoadBalancerDefinition')
@@ -3115,6 +3145,7 @@ export class TopicLoadBalancerDefinition extends CamelElement {
 
 export class WeightedLoadBalancerDefinition extends CamelElement {
     distributionRatioDelimiter?: string;
+    stepName?: string = 'weightedLoadBalancer';
     id?: string;
     distributionRatio: string = '';
     roundRobin?: string
@@ -3127,6 +3158,7 @@ export class WeightedLoadBalancerDefinition extends CamelElement {
 export class ApiKeyDefinition extends CamelElement {
     inHeader?: boolean;
     inCookie?: boolean;
+    stepName?: string = 'apiKey';
     name: string = '';
     description?: string;
     inQuery?: boolean;
@@ -3138,6 +3170,7 @@ export class ApiKeyDefinition extends CamelElement {
 }
 
 export class BasicAuthDefinition extends CamelElement {
+    stepName?: string = 'basicAuth';
     description?: string;
     key: string = ''
     public constructor(init?: Partial<BasicAuthDefinition>) {
@@ -3147,6 +3180,7 @@ export class BasicAuthDefinition extends CamelElement {
 }
 
 export class BearerTokenDefinition extends CamelElement {
+    stepName?: string = 'bearerToken';
     format?: string;
     description?: string;
     key: string = ''
@@ -3165,6 +3199,7 @@ export class DeleteDefinition extends CamelElement {
     path?: string;
     security?: SecurityDefinition[] = [];
     bindingMode?: string;
+    stepName?: string = 'delete';
     param?: ParamDefinition[] = [];
     apiDocs?: boolean;
     skipBindingOnErrorCode?: boolean;
@@ -3189,6 +3224,7 @@ export class GetDefinition extends CamelElement {
     path?: string;
     security?: SecurityDefinition[] = [];
     bindingMode?: string;
+    stepName?: string = 'get';
     param?: ParamDefinition[] = [];
     apiDocs?: boolean;
     skipBindingOnErrorCode?: boolean;
@@ -3213,6 +3249,7 @@ export class HeadDefinition extends CamelElement {
     path?: string;
     security?: SecurityDefinition[] = [];
     bindingMode?: string;
+    stepName?: string = 'head';
     param?: ParamDefinition[] = [];
     apiDocs?: boolean;
     skipBindingOnErrorCode?: boolean;
@@ -3229,6 +3266,7 @@ export class HeadDefinition extends CamelElement {
 }
 
 export class MutualTLSDefinition extends CamelElement {
+    stepName?: string = 'mutualTLS';
     description?: string;
     key: string = ''
     public constructor(init?: Partial<MutualTLSDefinition>) {
@@ -3240,6 +3278,7 @@ export class MutualTLSDefinition extends CamelElement {
 export class OAuth2Definition extends CamelElement {
     tokenUrl?: string;
     authorizationUrl?: string;
+    stepName?: string = 'oAuth2';
     refreshUrl?: string;
     description?: string;
     scopes?: RestPropertyDefinition[] = [];
@@ -3252,6 +3291,7 @@ export class OAuth2Definition extends CamelElement {
 }
 
 export class OpenIdConnectDefinition extends CamelElement {
+    stepName?: string = 'openIdConnect';
     description?: string;
     key: string = '';
     url: string = ''
@@ -3264,6 +3304,7 @@ export class OpenIdConnectDefinition extends CamelElement {
 export class ParamDefinition extends CamelElement {
     arrayType?: string;
     examples?: RestPropertyDefinition[] = [];
+    stepName?: string = 'param';
     dataFormat?: string;
     defaultValue?: string;
     dataType?: string;
@@ -3288,6 +3329,7 @@ export class PatchDefinition extends CamelElement {
     path?: string;
     security?: SecurityDefinition[] = [];
     bindingMode?: string;
+    stepName?: string = 'patch';
     param?: ParamDefinition[] = [];
     apiDocs?: boolean;
     skipBindingOnErrorCode?: boolean;
@@ -3312,6 +3354,7 @@ export class PostDefinition extends CamelElement {
     path?: string;
     security?: SecurityDefinition[] = [];
     bindingMode?: string;
+    stepName?: string = 'post';
     param?: ParamDefinition[] = [];
     apiDocs?: boolean;
     skipBindingOnErrorCode?: boolean;
@@ -3336,6 +3379,7 @@ export class PutDefinition extends CamelElement {
     path?: string;
     security?: SecurityDefinition[] = [];
     bindingMode?: string;
+    stepName?: string = 'put';
     param?: ParamDefinition[] = [];
     apiDocs?: boolean;
     skipBindingOnErrorCode?: boolean;
@@ -3353,6 +3397,7 @@ export class PutDefinition extends CamelElement {
 
 export class ResponseHeaderDefinition extends CamelElement {
     arrayType?: string;
+    stepName?: string = 'responseHeader';
     dataFormat?: string;
     dataType?: string;
     name: string = '';
@@ -3369,6 +3414,7 @@ export class ResponseHeaderDefinition extends CamelElement {
 export class ResponseMessageDefinition extends CamelElement {
     code?: string;
     examples?: RestPropertyDefinition[] = [];
+    stepName?: string = 'responseMessage';
     header?: ResponseHeaderDefinition[] = [];
     responseModel?: string;
     message: string = ''
@@ -3382,6 +3428,7 @@ export class RestBindingDefinition extends CamelElement {
     enableCors?: boolean;
     component?: string;
     bindingMode?: string;
+    stepName?: string = 'restBinding';
     skipBindingOnErrorCode?: boolean;
     clientRequestValidation?: boolean;
     produces?: string;
@@ -3405,6 +3452,7 @@ export class RestConfigurationDefinition extends CamelElement {
     hostNameResolver?: string;
     componentProperty?: RestPropertyDefinition[] = [];
     corsHeaders?: RestPropertyDefinition[] = [];
+    stepName?: string = 'restConfiguration';
     skipBindingOnErrorCode?: boolean;
     clientRequestValidation?: boolean;
     host?: string;
@@ -3457,6 +3505,7 @@ export class RestDefinition extends CamelElement {
 }
 
 export class RestPropertyDefinition extends CamelElement {
+    stepName?: string = 'restProperty';
     value: string = '';
     key: string = ''
     public constructor(init?: Partial<RestPropertyDefinition>) {
@@ -3468,6 +3517,7 @@ export class RestPropertyDefinition extends CamelElement {
 export class RestSecuritiesDefinition extends CamelElement {
     openIdConnect?: OpenIdConnectDefinition;
     apiKey?: ApiKeyDefinition;
+    stepName?: string = 'restSecurities';
     basicAuth?: BasicAuthDefinition;
     mutualTls?: MutualTLSDefinition;
     bearer?: BearerTokenDefinition;
@@ -3480,6 +3530,7 @@ export class RestSecuritiesDefinition extends CamelElement {
 
 export class RestsDefinition extends CamelElement {
     rest?: RestDefinition[] = [];
+    stepName?: string = 'rests';
     description?: string;
     id?: string
     public constructor(init?: Partial<RestsDefinition>) {
@@ -3489,6 +3540,7 @@ export class RestsDefinition extends CamelElement {
 }
 
 export class SecurityDefinition extends CamelElement {
+    stepName?: string = 'security';
     scopes?: string;
     key: string = ''
     public constructor(init?: Partial<SecurityDefinition>) {
@@ -3498,6 +3550,7 @@ export class SecurityDefinition extends CamelElement {
 }
 
 export class SecurityRequirementsDefinition extends CamelElement {
+    stepName?: string = 'securityRequirements';
     securityRequirement?: SecurityDefinition
     public constructor(init?: Partial<SecurityRequirementsDefinition>) {
         super('SecurityRequirementsDefinition')
@@ -3510,6 +3563,7 @@ export class CustomTransformerDefinition extends CamelElement {
     toType?: string;
     fromType?: string;
     scheme?: string;
+    stepName?: string = 'customTransformer';
     className?: string
     public constructor(init?: Partial<CustomTransformerDefinition>) {
         super('CustomTransformerDefinition')
@@ -3533,6 +3587,7 @@ export class DataFormatTransformerDefinition extends CamelElement {
     ref?: string;
     rss?: RssDataFormat;
     fromType?: string;
+    stepName?: string = 'dataFormatTransformer';
     mimeMultipart?: MimeMultipartDataFormat;
     asn1?: ASN1DataFormat | string;
     pgp?: PGPDataFormat;
@@ -3573,6 +3628,7 @@ export class EndpointTransformerDefinition extends CamelElement {
     toType?: string;
     fromType?: string;
     scheme?: string;
+    stepName?: string = 'endpointTransformer';
     uri?: string
     public constructor(init?: Partial<EndpointTransformerDefinition>) {
         super('EndpointTransformerDefinition')
@@ -3583,6 +3639,7 @@ export class EndpointTransformerDefinition extends CamelElement {
 export class TransformersDefinition extends CamelElement {
     endpointTransformer?: EndpointTransformerDefinition;
     customTransformer?: CustomTransformerDefinition;
+    stepName?: string = 'transformers';
     dataFormatTransformer?: DataFormatTransformerDefinition
     public constructor(init?: Partial<TransformersDefinition>) {
         super('TransformersDefinition')
@@ -3592,6 +3649,7 @@ export class TransformersDefinition extends CamelElement {
 
 export class CustomValidatorDefinition extends CamelElement {
     ref?: string;
+    stepName?: string = 'customValidator';
     className?: string;
     type?: string
     public constructor(init?: Partial<CustomValidatorDefinition>) {
@@ -3602,6 +3660,7 @@ export class CustomValidatorDefinition extends CamelElement {
 
 export class EndpointValidatorDefinition extends CamelElement {
     ref?: string;
+    stepName?: string = 'endpointValidator';
     type?: string;
     uri?: string
     public constructor(init?: Partial<EndpointValidatorDefinition>) {
@@ -3612,6 +3671,7 @@ export class EndpointValidatorDefinition extends CamelElement {
 
 export class PredicateValidatorDefinition extends CamelElement {
     expression?: ExpressionDefinition;
+    stepName?: string = 'predicateValidator';
     type?: string
     public constructor(init?: Partial<PredicateValidatorDefinition>) {
         super('PredicateValidatorDefinition')
@@ -3620,6 +3680,7 @@ export class PredicateValidatorDefinition extends CamelElement {
 }
 
 export class ValidatorsDefinition extends CamelElement {
+    stepName?: string = 'validators';
     predicateValidator?: PredicateValidatorDefinition;
     endpointValidator?: EndpointValidatorDefinition;
     customValidator?: CustomValidatorDefinition
diff --git a/karavan-core/src/core/model/CamelMetadata.ts b/karavan-core/src/core/model/CamelMetadata.ts
index 95625d8..4060fd4 100644
--- a/karavan-core/src/core/model/CamelMetadata.ts
+++ b/karavan-core/src/core/model/CamelMetadata.ts
@@ -130,9 +130,9 @@ export const DataFormats: [string, string, string][] = [
 export const CamelDataFormatMetadata: ElementMeta[] = [
     new ElementMeta('any23', 'Any23DataFormat', 'Any23', "Extract RDF data from HTML documents.", 'dataformat,transformation', [
         new PropertyMeta('outputFormat', 'Output Format', "What RDF syntax to unmarshal as, can be: NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON, RDF4JMODEL. It is by default: RDF4JMODEL.", 'string', 'NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON, RDF4JMODEL', 'RDF4JMODEL', false, false, false, false, ''),
+        new PropertyMeta('baseUri', 'Base Uri', "The URI to use as base for building RDF entities if only relative paths are provided.", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('configuration', 'Configuration', "Configurations for Apache Any23 as key-value pairs in order to customize the extraction process. The list of supported parameters can be found here. If not provided, a default configuration is used.", 'PropertyDefinition', '', '', false, false, true, true, ''),
         new PropertyMeta('extractors', 'Extractors', "List of Any23 extractors to be used in the unmarshal operation. A list of the available extractors can be found here here. If not provided, all the available extractors are used.", 'string', '', '', false, false, true, true, ''),
-        new PropertyMeta('baseUri', 'Base Uri', "The URI to use as base for building RDF entities if only relative paths are provided.", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('tarFile', 'TarFileDataFormat', 'Tar File', "Archive files into tarballs or extract files from tarballs.", 'dataformat,transformation,file', [
@@ -143,14 +143,14 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('cbor', 'CBORDataFormat', 'CBOR', "Unmarshal a CBOR payload to POJO and back.", 'dataformat,transformation,json', [
-        new PropertyMeta('objectMapper', 'Object Mapper', "Lookup and use the existing CBOR ObjectMapper with the given id when using Jackson.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('objectMapper', 'Object Mapper', "Lookup and use the existing CBOR ObjectMapper with the given id when using Jackson.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('useDefaultObjectMapper', 'Use Default Object Mapper', "Whether to lookup and use default Jackson CBOR ObjectMapper from the registry.", 'boolean', '', 'true', false, false, false, false, ''),
         new PropertyMeta('unmarshalType', 'Unmarshal Type', "Class name of the java type to use when unmarshalling", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('collectionType', 'Collection Type', "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('collectionType', 'Collection Type', "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('useList', 'Use List', "To unmarshal to a List of Map or a List of Pojo.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('allowUnmarshallType', 'Allow Unmarshall Type', "If enabled then Jackson CBOR is allowed to attempt to use the CamelCBORUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('prettyPrint', 'Pretty Print', "To enable pretty printing output nicely formatted. Is by default false.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('allowJmsType', 'Allow Jms Type', "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('allowJmsType', 'Allow Jms Type', "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('enableFeatures', 'Enable Features', "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('disableFeatures', 'Disable Features', "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
@@ -191,24 +191,24 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
     new ElementMeta('avro', 'AvroDataFormat', 'Avro', "Serialize and deserialize messages using Apache Avro binary data format.", 'dataformat,transformation', [
         new PropertyMeta('instanceClassName', 'Instance Class Name', "Class name to use for marshal and unmarshalling", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('library', 'Library', "Which Avro library to use.", 'string', 'apache-avro, jackson', 'ApacheAvro', false, false, false, false, ''),
-        new PropertyMeta('objectMapper', 'Object Mapper', "Lookup and use the existing ObjectMapper with the given id when using Jackson.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('objectMapper', 'Object Mapper', "Lookup and use the existing ObjectMapper with the given id when using Jackson.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('useDefaultObjectMapper', 'Use Default Object Mapper', "Whether to lookup and use default Jackson ObjectMapper from the registry.", 'boolean', '', 'true', false, false, false, false, ''),
         new PropertyMeta('unmarshalType', 'Unmarshal Type', "Class name of the java type to use when unmarshalling", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('jsonView', 'Json View', "When marshalling a POJO to JSON you might want to exclude certain fields from the JSON output. With Jackson you can use JSON views to accomplish this. This option is to refer to the class which has JsonView annotations", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('include', 'Include', "If you want to marshal a pojo to JSON, and the pojo has some fields with null values. And you want to skip these null values, you can set this option to NON_NULL", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('allowJmsType', 'Allow Jms Type', "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('collectionType', 'Collection Type', "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('allowJmsType', 'Allow Jms Type', "Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('collectionType', 'Collection Type', "Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('useList', 'Use List', "To unmarshal to a List of Map or a List of Pojo.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('moduleClassNames', 'Module Class Names', "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('moduleRefs', 'Module Refs', "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('moduleClassNames', 'Module Class Names', "To use custom Jackson modules com.fasterxml.jackson.databind.Module specified as a String with FQN class names. Multiple classes can be separated by comma.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('moduleRefs', 'Module Refs', "To use custom Jackson modules referred from the Camel registry. Multiple modules can be separated by comma.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('enableFeatures', 'Enable Features', "Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('disableFeatures', 'Disable Features', "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('allowUnmarshallType', 'Allow Unmarshall Type', "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('timezone', 'Timezone', "If set then Jackson will use the Timezone when marshalling/unmarshalling.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('timezone', 'Timezone', "If set then Jackson will use the Timezone when marshalling/unmarshalling.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('autoDiscoverObjectMapper', 'Auto Discover Object Mapper', "If set to true then Jackson will lookup for an objectMapper into the registry", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('contentTypeHeader', 'Content Type Header', "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", 'boolean', '', 'true', false, false, false, false, ''),
-        new PropertyMeta('schemaResolver', 'Schema Resolver', "Optional schema resolver used to lookup schemas for the data in transit.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('autoDiscoverSchemaResolver', 'Auto Discover Schema Resolver', "When not disabled, the SchemaResolver will be looked up into the registry", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('schemaResolver', 'Schema Resolver', "Optional schema resolver used to lookup schemas for the data in transit.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('autoDiscoverSchemaResolver', 'Auto Discover Schema Resolver', "When not disabled, the SchemaResolver will be looked up into the registry", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('jsonApi', 'JsonApiDataFormat', 'JSonApi', "Marshal and unmarshal JSON:API resources using JSONAPI-Converter library.", 'dataformat,transformation', [
@@ -263,9 +263,9 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
     new ElementMeta('bindy', 'BindyDataFormat', 'Bindy', "Marshal and unmarshal Java beans from and to flat payloads (such as CSV, delimited, fixed length formats, or FIX messages).", 'dataformat,transformation,csv', [
         new PropertyMeta('type', 'Type', "Whether to use Csv, Fixed, or KeyValue.", 'string', 'Csv, Fixed, KeyValue', '', true, false, false, false, ''),
         new PropertyMeta('classType', 'Class Type', "Name of model class to use.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('locale', 'Locale', "To configure a default locale to use, such as us for united states. To use the JVM platform default locale then use the name default", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('unwrapSingleInstance', 'Unwrap Single Instance', "When unmarshalling should a single instance be unwrapped and returned instead of wrapped in a java.util.List.", 'boolean', '', 'true', false, false, false, false, ''),
         new PropertyMeta('allowEmptyStream', 'Allow Empty Stream', "Whether to allow empty streams in the unmarshal process. If true, no exception will be thrown when a body without records is provided.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('unwrapSingleInstance', 'Unwrap Single Instance', "When unmarshalling should a single instance be unwrapped and returned instead of wrapped in a java.util.List.", 'boolean', '', 'true', false, false, false, false, 'advanced'),
+        new PropertyMeta('locale', 'Locale', "To configure a default locale to use, such as us for united states. To use the JVM platform default locale then use the name default", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('xmlSecurity', 'XMLSecurityDataFormat', 'XML Security', "Encrypt and decrypt XML payloads using Apache Santuario.", 'dataformat,transformation,xml', [
@@ -315,7 +315,7 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('ignoreUnidentifiedRecords', 'Ignore Unidentified Records', "Whether to ignore unidentified records.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('ignoreUnexpectedRecords', 'Ignore Unexpected Records', "Whether to ignore unexpected records.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('ignoreInvalidRecords', 'Ignore Invalid Records', "Whether to ignore invalid records.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('encoding', 'Encoding', "The charset to use. Is by default the JVM platform default charset.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('encoding', 'Encoding', "The charset to use. Is by default the JVM platform default charset.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('beanReaderErrorHandlerType', 'Bean Reader Error Handler Type', "To use a custom org.apache.camel.dataformat.beanio.BeanIOErrorHandler as error handler while parsing. Configure the fully qualified class name of the error handler. Notice the options ignoreUnidentifiedRecords, ignoreUnexpectedRecords, and ignoreInvalidRecords may not be in use when you use a custom error handler.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('unmarshalSingleObject', 'Unmarshal Single Object', "This options controls whether to unmarshal as a list of objects or as a single object only. The former is the default mode, and the latter is only intended in special use-cases where beanio maps the Camel message to a single POJO bean.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
@@ -354,8 +354,8 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('asn1', 'ASN1DataFormat', 'ASN.1 File', "Encode and decode data structures using Abstract Syntax Notation One (ASN.1).", 'dataformat,transformation,file', [
-        new PropertyMeta('usingIterator', 'Using Iterator', "If the asn1 file has more then one entry, the setting this option to true, allows to work with the splitter EIP, to split the data using an iterator in a streaming mode.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('unmarshalType', 'Unmarshal Type', "Class to use when unmarshalling.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('usingIterator', 'Using Iterator', "If the asn1 file has more than one entry, the setting this option to true, allows working with the splitter EIP, to split the data using an iterator in a streaming mode.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('thrift', 'ThriftDataFormat', 'Thrift', "Serialize and deserialize messages using Apache Thrift binary data format.", 'dataformat,transformation', [
@@ -402,8 +402,8 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('base64', 'Base64DataFormat', 'Base64', "Encode and decode data using Base64.", 'dataformat,transformation', [
         new PropertyMeta('lineLength', 'Line Length', "To specific a maximum line length for the encoded data. By default 76 is used.", 'number', '', '76', false, false, false, false, ''),
-        new PropertyMeta('lineSeparator', 'Line Separator', "The line separators to use. Uses new line characters (CRLF) by default.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('urlSafe', 'Url Safe', "Instead of emitting '' and '/' we emit '-' and '_' respectively. urlSafe is only applied to encode operations. Decoding seamlessly handles both modes. Is by default false.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('lineSeparator', 'Line Separator', "The line separators to use. Uses new line characters (CRLF) by default.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('urlSafe', 'Url Safe', "Instead of emitting '' and '/' we emit '-' and '_' respectively. urlSafe is only applied to encode operations. Decoding seamlessly handles both modes. Is by default false.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('ical', 'IcalDataFormat', 'iCal', "Marshal and unmarshal iCal (.ics) documents to/from model objects provided by the iCal4j library.", 'dataformat,transformation', [
@@ -415,14 +415,14 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('crypto', 'CryptoDataFormat', 'Crypto (Java Cryptographic Extension)', "Encrypt and decrypt messages using Java Cryptography Extension (JCE).", 'dataformat,transformation,security', [
         new PropertyMeta('algorithm', 'Algorithm', "The JCE algorithm name indicating the cryptographic algorithm that will be used.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('cryptoProvider', 'Crypto Provider', "The name of the JCE Security Provider that should be used.", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('keyRef', 'Key Ref', "Refers to the secret key to lookup from the register to use.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('initVectorRef', 'Init Vector Ref', "Refers to a byte array containing the Initialization Vector that will be used to initialize the Cipher.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('algorithmParameterRef', 'Algorithm Parameter Ref', "A JCE AlgorithmParameterSpec used to initialize the Cipher. Will lookup the type using the given name as a java.security.spec.AlgorithmParameterSpec type.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('buffersize', 'Buffersize', "The size of the buffer used in the signature process.", 'number', '', '', false, false, false, false, ''),
+        new PropertyMeta('cryptoProvider', 'Crypto Provider', "The name of the JCE Security Provider that should be used.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('initVectorRef', 'Init Vector Ref', "Refers to a byte array containing the Initialization Vector that will be used to initialize the Cipher.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('algorithmParameterRef', 'Algorithm Parameter Ref', "A JCE AlgorithmParameterSpec used to initialize the Cipher. Will lookup the type using the given name as a java.security.spec.AlgorithmParameterSpec type.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('buffersize', 'buffersize', "buffersize", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('macAlgorithm', 'Mac Algorithm', "The JCE algorithm name indicating the Message Authentication algorithm.", 'string', '', 'HmacSHA1', false, false, false, false, ''),
         new PropertyMeta('shouldAppendHmac', 'shouldAppendHmac', "shouldAppendHmac", 'boolean', '', '', false, false, false, false, ''),
-        new PropertyMeta('inline', 'Inline', "Flag indicating that the configured IV should be inlined into the encrypted data stream. Is by default false.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('inline', 'Inline', "Flag indicating that the configured IV should be inlined into the encrypted data stream. Is by default false.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('zipFile', 'ZipFileDataFormat', 'Zip File', "Compression and decompress streams using java.util.zip.ZipStream.", 'dataformat,transformation,file', [
@@ -473,10 +473,10 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('univocityHeader', 'univocityHeader', "univocityHeader", 'UniVocityHeader', '', '', false, false, true, true, ''),
     ]),
     new ElementMeta('barcode', 'BarcodeDataFormat', 'Barcode', "Transform strings to various 1D/2D barcode bitmap formats and back.", 'dataformat,transformation', [
+        new PropertyMeta('barcodeFormat', 'Barcode Format', "Barcode format such as QR-Code", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('imageType', 'Image Type', "Image type of the barcode such as png", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('width', 'Width', "Width of the barcode", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('height', 'Height', "Height of the barcode", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('imageType', 'Image Type', "Image type of the barcode such as png", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('barcodeFormat', 'Barcode Format', "Barcode format such as QR-Code", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('pgp', 'PGPDataFormat', 'PGP', "Encrypt and decrypt messages using Java Cryptographic Extension (JCE) and PGP.", 'dataformat,transformation,security', [
@@ -538,34 +538,34 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('csv', 'CsvDataFormat', 'CSV', "Handle CSV (Comma Separated Values) payloads.", 'dataformat,transformation,csv', [
         new PropertyMeta('formatRef', 'Format Ref', "The reference format to use, it will be updated with the other format options, the default value is CSVFormat.DEFAULT", 'string', '', '', false, false, false, false, 'advanced'),
-        new PropertyMeta('formatName', 'Format Name', "The name of the format to use, the default value is CSVFormat.DEFAULT", 'string', 'DEFAULT, EXCEL, INFORMIX_UNLOAD, INFORMIX_UNLOAD_CSV, MYSQL, RFC4180', '', false, false, false, false, ''),
-        new PropertyMeta('commentMarkerDisabled', 'Comment Marker Disabled', "Disables the comment marker of the reference format.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('commentMarker', 'Comment Marker', "Sets the comment marker of the reference format.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('formatName', 'Format Name', "The name of the format to use, the default value is CSVFormat.DEFAULT", 'string', 'DEFAULT, EXCEL, INFORMIX_UNLOAD, INFORMIX_UNLOAD_CSV, MYSQL, RFC4180', 'DEFAULT', false, false, false, false, 'advanced'),
+        new PropertyMeta('commentMarkerDisabled', 'Comment Marker Disabled', "Disables the comment marker of the reference format.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('commentMarker', 'Comment Marker', "Sets the comment marker of the reference format.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('delimiter', 'Delimiter', "Sets the delimiter to use. The default value is , (comma)", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('escapeDisabled', 'Escape Disabled', "Use for disabling using escape character", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('escape', 'Escape', "Sets the escape character to use", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('escapeDisabled', 'Escape Disabled', "Use for disabling using escape character", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('escape', 'Escape', "Sets the escape character to use", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('headerDisabled', 'Header Disabled', "Use for disabling headers", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('header', 'Header', "To configure the CSV headers", 'string', '', '', false, false, true, true, ''),
         new PropertyMeta('allowMissingColumnNames', 'Allow Missing Column Names', "Whether to allow missing column names.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('ignoreEmptyLines', 'Ignore Empty Lines', "Whether to ignore empty lines.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('ignoreSurroundingSpaces', 'Ignore Surrounding Spaces', "Whether to ignore surrounding spaces", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('nullStringDisabled', 'Null String Disabled', "Used to disable null strings", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('nullString', 'Null String', "Sets the null string", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('nullStringDisabled', 'Null String Disabled', "Used to disable null strings", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('nullString', 'Null String', "Sets the null string", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('quoteDisabled', 'Quote Disabled', "Used to disable quotes", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('quote', 'Quote', "Sets the quote which by default is", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('recordSeparatorDisabled', 'Record Separator Disabled', "Used for disabling record separator", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('recordSeparator', 'Record Separator', "Sets the record separator (aka new line) which by default is new line characters (CRLF)", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('skipHeaderRecord', 'Skip Header Record', "Whether to skip the header record in the output", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('quoteMode', 'Quote Mode', "Sets the quote mode", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('quoteMode', 'Quote Mode', "Sets the quote mode", 'string', 'ALL, ALL_NON_NULL, MINIMAL, NON_NUMERIC, NONE', '', false, false, false, false, ''),
         new PropertyMeta('ignoreHeaderCase', 'Ignore Header Case', "Sets whether or not to ignore case when accessing header names.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('trim', 'Trim', "Sets whether or not to trim leading and trailing blanks.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('trailingDelimiter', 'Trailing Delimiter', "Sets whether or not to add a trailing delimiter.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('marshallerFactoryRef', 'Marshaller Factory Ref', "Sets the implementation of the CsvMarshallerFactory interface which is able to customize marshalling/unmarshalling behavior by extending CsvMarshaller or creating it from scratch.", 'string', '', '', false, false, false, false, 'advanced'),
-        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at one.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at one.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('useMaps', 'Use Maps', "Whether the unmarshalling should produce maps (HashMap)for the lines values instead of lists. It requires to have header (either defined or collected).", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('useOrderedMaps', 'Use Ordered Maps', "Whether the unmarshalling should produce ordered maps (LinkedHashMap) for the lines values instead of lists. It requires to have header (either defined or collected).", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('recordConverterRef', 'Record Converter Ref', "Refers to a custom CsvRecordConverter to lookup from the registry to use.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('captureHeaderRecord', 'Capture Header Record', "Whether the unmarshalling should capture the header record and store it in the message header", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('recordConverterRef', 'Record Converter Ref', "Refers to a custom CsvRecordConverter to lookup from the registry to use.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('captureHeaderRecord', 'Capture Header Record', "Whether the unmarshalling should capture the header record and store it in the message header", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('grok', 'GrokDataFormat', 'Grok', "Unmarshal unstructured data to objects using Logstash based Grok patterns.", 'dataformat,transformation', [
@@ -614,16 +614,16 @@ export const Languages: [string, string, string][] = [
 export const CamelLanguageMetadata: ElementMeta[] = [
     new ElementMeta('xpath', 'XPathExpression', 'XPath', "Evaluates an XPath expression against an XML payload.", 'language,core,xml', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('documentType', 'Document Type', "Name of class for document type The default value is org.w3c.dom.Document", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('documentType', 'Document Type', "Name of class for document type The default value is org.w3c.dom.Document", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('resultType', 'Result Type', "Sets the class name of the result type (type from output) The default result type is NodeSet", 'string', 'NUMBER, STRING, BOOLEAN, NODESET, NODE', 'NODESET', false, false, false, false, ''),
-        new PropertyMeta('saxon', 'Saxon', "Whether to use Saxon.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('saxon', 'Saxon', "Whether to use Saxon.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('factoryRef', 'Factory Ref', "References to a custom XPathFactory to lookup in the registry", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('objectModel', 'Object Model', "The XPath object model to use", 'string', '', '', false, false, false, false, 'advanced'),
-        new PropertyMeta('logNamespaces', 'Log Namespaces', "Whether to log namespaces which can assist during troubleshooting", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('headerName', 'Header Name', "Name of header to use as input, instead of the message body", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('logNamespaces', 'Log Namespaces', "Whether to log namespaces which can assist during troubleshooting", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('headerName', 'Header Name', "Name of header to use as input, instead of the message body", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('threadSafety', 'Thread Safety', "Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements. In this situation there can be thread-safety issues if you process the NODESET concurrently such as from a Camel Splitter EIP in parallel processing mode. This option prevents concurrency issues by doing defensive copies of the nodes. It is recommended  [...]
         new PropertyMeta('preCompile', 'Pre Compile', "Whether to enable pre-compiling the xpath expression during initialization phase. pre-compile is enabled by default. This can be used to turn off, for example in cases the compilation phase is desired at the starting phase, such as if the application is ahead of time compiled (for example with camel-quarkus) which would then load the xpath factory of the built operating system, and not a JVM runtime.", 'boolean', '', 'true', false, f [...]
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('datasonnet', 'DatasonnetExpression', 'DataSonnet', "To use DataSonnet scripts for message transformations.", 'language,transformation', [
@@ -631,130 +631,130 @@ export const CamelLanguageMetadata: ElementMeta[] = [
         new PropertyMeta('bodyMediaType', 'Body Media Type', "The String representation of the message's body MediaType", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('outputMediaType', 'Output Media Type', "The String representation of the MediaType to output", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('resultType', 'Result Type', "Sets the class name of the result type (type from output) The default result type is com.datasonnet.document.Document", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('constant', 'ConstantExpression', 'Constant', "A fixed value set only once during the route startup.", 'language,core', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('resultType', 'Result Type', "Sets the class name of the constant type", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('groovy', 'GroovyExpression', 'Groovy', "Evaluates a Groovy script.", 'language,script', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('simple', 'SimpleExpression', 'Simple', "Evaluates a Camel simple expression.", 'language,core,java', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('resultType', 'Result Type', "Sets the class name of the result type (type from output)", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('tokenize', 'TokenizerExpression', 'Tokenize', "Tokenize text payloads using delimiter patterns.", 'language,core', [
         new PropertyMeta('token', 'Token', "The (start) token to use as tokenizer, for example you can use the new line token. You can use simple language as the token to support dynamic tokens.", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('endToken', 'End Token', "The end token to use as tokenizer if using start/end token pairs. You can use simple language as the token to support dynamic tokens.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('inheritNamespaceTagName', 'Inherit Namespace Tag Name', "To inherit namespaces from a root/parent tag name when using XML You can use simple language as the tag name to support dynamic names.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('headerName', 'Header Name', "Name of header to tokenize instead of using the message body.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('regex', 'Regex', "If the token is a regular expression pattern. The default value is false", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('inheritNamespaceTagName', 'Inherit Namespace Tag Name', "To inherit namespaces from a root/parent tag name when using XML You can use simple language as the tag name to support dynamic names.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('headerName', 'Header Name', "Name of header to tokenize instead of using the message body.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('regex', 'Regex', "If the token is a regular expression pattern. The default value is false", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('xml', 'Xml', "Whether the input is XML messages. This option must be set to true if working with XML payloads.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('includeTokens', 'Include Tokens', "Whether to include the tokens in the parts when using pairs The default value is false", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('group', 'Group', "To group N parts together, for example to split big files into chunks of 1000 lines. You can use simple language as the group to support dynamic group sizes.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('groupDelimiter', 'Group Delimiter', "Sets the delimiter to use when grouping. If this has not been set then token will be used as the delimiter.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('skipFirst', 'Skip First', "To skip the very first element", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('group', 'Group', "To group N parts together, for example to split big files into chunks of 1000 lines. You can use simple language as the group to support dynamic group sizes.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('groupDelimiter', 'Group Delimiter', "Sets the delimiter to use when grouping. If this has not been set then token will be used as the delimiter.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('skipFirst', 'Skip First', "To skip the very first element", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('expression', 'expression', "expression", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('mvel', 'MvelExpression', 'MVEL', "Evaluates a MVEL template.", 'language,java', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('ref', 'RefExpression', 'Ref', "Uses an existing expression from the registry.", 'language,core', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('spel', 'SpELExpression', 'SpEL', "Evaluates a Spring expression (SpEL).", 'language,spring', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('method', 'MethodCallExpression', 'Bean Method', "Calls a Java bean method.", 'language,core,java', [
         new PropertyMeta('ref', 'Ref', "Reference to an existing bean (bean id) to lookup in the registry", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('method', 'Method', "Name of method to call", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('beanType', 'Bean Type', "Class name (fully qualified) of the bean to use Will lookup in registry and if there is a single instance of the same type, then the existing bean is used, otherwise a new bean is created (requires a default no-arg constructor).", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('scope', 'Scope', "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance  [...]
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('scope', 'Scope', "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance  [...]
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('expression', 'expression', "expression", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('language', 'LanguageExpression', 'Language', "Evaluates a custom language.", 'language,core', [
         new PropertyMeta('language', 'Language', "The name of the language to use", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('joor', 'JoorExpression', 'jOOR', "Evaluates a jOOR (Java compiled once at runtime) expression.", 'language', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('preCompile', 'Pre Compile', "Whether the expression should be pre compiled once during initialization phase. If this is turned off, then the expression is reloaded and compiled on each evaluation.", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('preCompile', 'Pre Compile', "Whether the expression should be pre compiled once during initialization phase. If this is turned off, then the expression is reloaded and compiled on each evaluation.", 'boolean', '', 'true', false, false, false, false, 'advanced'),
+        new PropertyMeta('singleQuotes', 'Single Quotes', "Whether single quotes can be used as replacement for double quotes. This is convenient when you need to work with strings inside strings.", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('resultType', 'Result Type', "Sets the class name of the result type (type from output)", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('singleQuotes', 'Single Quotes', "Whether single quotes can be used as replacement for double quotes. This is convenient when you need to work with strings inside strings.", 'boolean', '', 'true', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('exchangeProperty', 'ExchangePropertyExpression', 'ExchangeProperty', "Gets a property from the Exchange.", 'language,core', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('ognl', 'OgnlExpression', 'OGNL', "Evaluates an OGNL expression (Apache Commons OGNL).", 'language,java', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('xquery', 'XQueryExpression', 'XQuery', "Evaluates an XQuery expressions against an XML payload.", 'language,xml', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('type', 'Type', "Sets the class name of the result type (type from output) The default result type is NodeSet", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('headerName', 'Header Name', "Name of header to use as input, instead of the message body", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('headerName', 'Header Name', "Name of header to use as input, instead of the message body", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('configurationRef', 'Configuration Ref', "Reference to a saxon configuration instance in the registry to use for xquery (requires camel-saxon). This may be needed to add custom functions to a saxon configuration, so these custom functions can be used in xquery expressions.", 'string', '', '', false, false, false, false, 'advanced'),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('header', 'HeaderExpression', 'Header', "Gets a header from the Exchange.", 'language,core', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('jsonpath', 'JsonPathExpression', 'JSONPath', "Evaluates a JSONPath expression against a JSON message body.", 'language,json', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('resultType', 'Result Type', "Sets the class name of the result type (type from output)", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('suppressExceptions', 'Suppress Exceptions', "Whether to suppress exceptions such as PathNotFoundException.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('allowSimple', 'Allow Simple', "Whether to allow in inlined Simple exceptions in the JSONPath expression", 'boolean', '', 'true', false, false, false, false, ''),
-        new PropertyMeta('allowEasyPredicate', 'Allow Easy Predicate', "Whether to allow using the easy predicate parser to pre-parse predicates.", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('allowSimple', 'Allow Simple', "Whether to allow in inlined Simple exceptions in the JSONPath expression", 'boolean', '', 'true', false, false, false, false, 'advanced'),
+        new PropertyMeta('allowEasyPredicate', 'Allow Easy Predicate', "Whether to allow using the easy predicate parser to pre-parse predicates.", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('writeAsString', 'Write As String', "Whether to write the output of each row/element as a JSON String value instead of a Map/POJO value.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('headerName', 'Header Name', "Name of header to use as input, instead of the message body", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('option', 'Option', "To configure additional options on JSONPath. Multiple values can be separated by comma.", 'string', 'DEFAULT_PATH_LEAF_TO_NULL, ALWAYS_RETURN_LIST, AS_PATH_LIST, SUPPRESS_EXCEPTIONS, REQUIRE_PROPERTIES', '', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('headerName', 'Header Name', "Name of header to use as input, instead of the message body", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('option', 'Option', "To configure additional options on JSONPath. Multiple values can be separated by comma.", 'string', 'DEFAULT_PATH_LEAF_TO_NULL, ALWAYS_RETURN_LIST, AS_PATH_LIST, SUPPRESS_EXCEPTIONS, REQUIRE_PROPERTIES', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('hl7terser', 'Hl7TerserExpression', 'HL7 Terser', "Get the value of a HL7 message field specified by terse location specification syntax.", 'language,hl7', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('csimple', 'CSimpleExpression', 'CSimple', "Evaluate a compiled simple expression.", 'language,java', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('resultType', 'Result Type', "Sets the class name of the result type (type from output)", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('xtokenize', 'XMLTokenizerExpression', 'XML Tokenize', "Tokenize XML payloads.", 'language,core,xml', [
-        new PropertyMeta('headerName', 'Header Name', "Name of header to tokenize instead of using the message body.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('mode', 'Mode', "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element", 'string', 'i, w, u, t', '', false, false, false, false, ''),
-        new PropertyMeta('group', 'Group', "To group N parts together", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('headerName', 'Header Name', "Name of header to tokenize instead of using the message body.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('mode', 'Mode', "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element", 'string', 'i, w, u, t', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('group', 'Group', "To group N parts together", 'number', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('expression', 'expression', "expression", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -786,7 +786,7 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('filter', 'FilterDefinition', 'Filter', "Filter out messages based using a predicate", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to determine if the message should be filtered or not. If the expression returns an empty value or false then the message is filtered (dropped), otherwise the message is continued being routed.", 'ExpressionDefinition', '', '', true, false, false, true, ''),
-        new PropertyMeta('statusPropertyName', 'Status Property Name', "Name of exchange property to use for storing the status of the filtering. Setting this allows to know if the filter predicate evaluated as true or false.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('statusPropertyName', 'Status Property Name', "Name of exchange property to use for storing the status of the filtering. Setting this allows to know if the filter predicate evaluated as true or false.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, ''),
@@ -799,22 +799,22 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('loop', 'LoopDefinition', 'Loop', "Processes a message multiple times", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to define how many times we should loop. Notice the expression is only evaluated once, and should return a number as how many times to loop. A value of zero or negative means no looping. The loop is like a for-loop fashion, if you want a while loop, then the dynamic router may be a better choice.", 'ExpressionDefinition', '', '', true, false, false, true, ''),
-        new PropertyMeta('copy', 'Copy', "If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('doWhile', 'Do While', "Enables the while loop that loops until the predicate evaluates to false or null.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('breakOnShutdown', 'Break On Shutdown', "If the breakOnShutdown attribute is true, then the loop will not iterate until it reaches the end when Camel is shut down.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('copy', 'Copy', "If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('doWhile', 'Do While', "Enables the while loop that loops until the predicate evaluates to false or null.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('breakOnShutdown', 'Break On Shutdown', "If the breakOnShutdown attribute is true, then the loop will not iterate until it reaches the end when Camel is shut down.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, ''),
     ]),
     new ElementMeta('threadPoolProfile', 'ThreadPoolProfileDefinition', 'Thread Pool Profile', "To configure thread pools", 'configuration', [
-        new PropertyMeta('defaultProfile', 'Default Profile', "Whether this profile is the default thread pool profile", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('defaultProfile', 'Default Profile', "Whether this profile is the default thread pool profile", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('poolSize', 'Pool Size', "Sets the core pool size", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('maxPoolSize', 'Max Pool Size', "Sets the maximum pool size", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('keepAliveTime', 'Keep Alive Time', "Sets the keep alive time for idle threads in the pool", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('timeUnit', 'Time Unit', "Sets the time unit to use for keep alive time By default SECONDS is used.", 'string', 'NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS', '', false, false, false, false, ''),
+        new PropertyMeta('timeUnit', 'Time Unit', "Sets the time unit to use for keep alive time By default SECONDS is used.", 'string', 'NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS', '', false, false, false, false, 'advanced'),
         new PropertyMeta('maxQueueSize', 'Max Queue Size', "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('allowCoreThreadTimeOut', 'Allow Core Thread Time Out', "Whether idle core threads is allowed to timeout and therefore can shrink the pool size below the core pool size Is by default true", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('rejectedPolicy', 'Rejected Policy', "Sets the handler for tasks which cannot be executed by the thread pool.", 'string', 'Abort, CallerRuns, DiscardOldest, Discard', '', false, false, false, false, ''),
+        new PropertyMeta('allowCoreThreadTimeOut', 'Allow Core Thread Time Out', "Whether idle core threads is allowed to timeout and therefore can shrink the pool size below the core pool size Is by default true", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('rejectedPolicy', 'Rejected Policy', "Sets the handler for tasks which cannot be executed by the thread pool.", 'string', 'Abort, CallerRuns, DiscardOldest, Discard', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -825,7 +825,7 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('removeProperties', 'RemovePropertiesDefinition', 'Remove Properties', "Removes message exchange properties whose name matches a specified pattern", 'eip,transformation', [
         new PropertyMeta('pattern', 'Pattern', "Name or pattern of properties to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('excludePattern', 'Exclude Pattern', "Name or pattern of properties to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('excludePattern', 'Exclude Pattern', "Name or pattern of properties to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -861,9 +861,9 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('corsHeaders', 'Cors Headers', "Allows to configure custom CORS headers.", 'RestPropertyDefinition', '', '', false, false, true, true, 'consumer,advanced'),
     ]),
     new ElementMeta('saga', 'SagaDefinition', 'Saga', "Enables Sagas on the route", 'eip,routing', [
-        new PropertyMeta('sagaService', 'Saga Service', "Refers to the id to lookup in the registry for the specific CamelSagaService to use.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('propagation', 'Propagation', "Set the Saga propagation mode (REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER).", 'string', 'REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER', 'REQUIRED', false, false, false, false, ''),
-        new PropertyMeta('completionMode', 'Completion Mode', "Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange that initiates the saga is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints.", 'string', 'AUTO, MANUAL', 'AUTO', false, false, false, false, ''),
+        new PropertyMeta('sagaService', 'Saga Service', "Refers to the id to lookup in the registry for the specific CamelSagaService to use.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('propagation', 'Propagation', "Set the Saga propagation mode (REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER).", 'string', 'REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER', 'REQUIRED', false, false, false, false, 'advanced'),
+        new PropertyMeta('completionMode', 'Completion Mode', "Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange that initiates the saga is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints.", 'string', 'AUTO, MANUAL', 'AUTO', false, false, false, false, 'advanced'),
         new PropertyMeta('timeout', 'Timeout', "Set the maximum amount of time for the Saga. After the timeout is expired, the saga will be compensated automatically (unless a different decision has been taken in the meantime).", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('compensation', 'Compensation', "The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error. If errors occur during compensation, the saga service may call again the compensation URI to retry.", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('completion', 'Completion', "The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error. If errors occur during completion, the saga service may call again the completion URI to retry.", 'string', '', '', false, false, false, false, ''),
@@ -874,7 +874,7 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('removeHeaders', 'RemoveHeadersDefinition', 'Remove Headers', "Removes message headers whose name matches a specified pattern", 'eip,transformation', [
         new PropertyMeta('pattern', 'Pattern', "Name or pattern of headers to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('excludePattern', 'Exclude Pattern', "Name or patter of headers to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('excludePattern', 'Exclude Pattern', "Name or patter of headers to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -891,19 +891,19 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('routeConfigurationId', 'routeConfigurationId', "routeConfigurationId", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('faultToleranceConfiguration', 'FaultToleranceConfigurationDefinition', 'Fault Tolerance Configuration', "MicroProfile Fault Tolerance Circuit Breaker EIP configuration", 'configuration,eip', [
-        new PropertyMeta('circuitBreaker', 'Circuit Breaker', "Refers to an existing io.smallrye.faulttolerance.core.circuit.breaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use.", 'string', '', '', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('delay', 'Delay', "Control how long the circuit breaker stays open. The default is 5 seconds.", 'string', '', '5000', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('successThreshold', 'Success Threshold', "Controls the number of trial calls which are allowed when the circuit breaker is half-open", 'number', '', '1', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('requestVolumeThreshold', 'Request Volume Threshold', "Controls the size of the rolling window used when the circuit breaker is closed", 'number', '', '20', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('failureRatio', 'Failure Ratio', "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", 'number', '', '50', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('timeoutEnabled', 'Timeout Enabled', "Whether timeout is enabled or not on the circuit breaker. Default is false.", 'boolean', '', 'false', false, false, false, false, 'timeout'),
-        new PropertyMeta('timeoutDuration', 'Timeout Duration', "Configures the thread execution timeout. Default value is 1 second.", 'string', '', '1000', false, false, false, false, 'timeout'),
-        new PropertyMeta('timeoutPoolSize', 'Timeout Pool Size', "Configures the pool size of the thread pool when timeout is enabled. Default value is 10.", 'number', '', '10', false, false, false, false, 'timeout'),
-        new PropertyMeta('timeoutScheduledExecutorService', 'Timeout Scheduled Executor Service', "References to a custom thread pool to use when timeout is enabled", 'string', '', '', false, false, false, false, 'timeout'),
-        new PropertyMeta('bulkheadEnabled', 'Bulkhead Enabled', "Whether bulkhead is enabled or not on the circuit breaker. Default is false.", 'boolean', '', 'false', false, false, false, false, 'bulkhead'),
-        new PropertyMeta('bulkheadMaxConcurrentCalls', 'Bulkhead Max Concurrent Calls', "Configures the max amount of concurrent calls the bulkhead will support.", 'number', '', '10', false, false, false, false, 'bulkhead'),
-        new PropertyMeta('bulkheadWaitingTaskQueue', 'Bulkhead Waiting Task Queue', "Configures the task queue size for holding waiting tasks to be processed by the bulkhead.", 'number', '', '10', false, false, false, false, 'bulkhead'),
-        new PropertyMeta('bulkheadExecutorService', 'Bulkhead Executor Service', "References to a custom thread pool to use when bulkhead is enabled.", 'string', '', '', false, false, false, false, 'bulkhead'),
+        new PropertyMeta('circuitBreaker', 'Circuit Breaker', "Refers to an existing io.smallrye.faulttolerance.core.circuit.breaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('delay', 'Delay', "Control how long the circuit breaker stays open. The default is 5 seconds.", 'string', '', '5000', false, false, false, false, ''),
+        new PropertyMeta('successThreshold', 'Success Threshold', "Controls the number of trial calls which are allowed when the circuit breaker is half-open", 'number', '', '1', false, false, false, false, ''),
+        new PropertyMeta('requestVolumeThreshold', 'Request Volume Threshold', "Controls the size of the rolling window used when the circuit breaker is closed", 'number', '', '20', false, false, false, false, ''),
+        new PropertyMeta('failureRatio', 'Failure Ratio', "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", 'number', '', '50', false, false, false, false, ''),
+        new PropertyMeta('timeoutEnabled', 'Timeout Enabled', "Whether timeout is enabled or not on the circuit breaker. Default is false.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('timeoutDuration', 'Timeout Duration', "Configures the thread execution timeout. Default value is 1 second.", 'string', '', '1000', false, false, false, false, ''),
+        new PropertyMeta('timeoutPoolSize', 'Timeout Pool Size', "Configures the pool size of the thread pool when timeout is enabled. Default value is 10.", 'number', '', '10', false, false, false, false, 'advanced'),
+        new PropertyMeta('timeoutScheduledExecutorService', 'Timeout Scheduled Executor Service', "References to a custom thread pool to use when timeout is enabled", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('bulkheadEnabled', 'Bulkhead Enabled', "Whether bulkhead is enabled or not on the circuit breaker. Default is false.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('bulkheadMaxConcurrentCalls', 'Bulkhead Max Concurrent Calls', "Configures the max amount of concurrent calls the bulkhead will support.", 'number', '', '10', false, false, false, false, 'advanced'),
+        new PropertyMeta('bulkheadWaitingTaskQueue', 'Bulkhead Waiting Task Queue', "Configures the task queue size for holding waiting tasks to be processed by the bulkhead.", 'number', '', '10', false, false, false, false, 'advanced'),
+        new PropertyMeta('bulkheadExecutorService', 'Bulkhead Executor Service', "References to a custom thread pool to use when bulkhead is enabled.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('expression', 'ExpressionDefinition', 'Expression', "A useful base class for an expression", 'language', [
@@ -970,13 +970,13 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('onCompletion', 'OnCompletionDefinition', 'On Completion', "Route to be executed when normal route processing completes", 'configuration', [
-        new PropertyMeta('mode', 'Mode', "Sets the on completion mode. The default value is AfterConsumer", 'string', 'AfterConsumer, BeforeConsumer', 'AfterConsumer', false, false, false, false, ''),
+        new PropertyMeta('mode', 'Mode', "Sets the on completion mode. The default value is AfterConsumer", 'string', 'AfterConsumer, BeforeConsumer', 'AfterConsumer', false, false, false, false, 'advanced'),
         new PropertyMeta('onCompleteOnly', 'On Complete Only', "Will only synchronize when the org.apache.camel.Exchange completed successfully (no errors).", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('onFailureOnly', 'On Failure Only', "Will only synchronize when the org.apache.camel.Exchange ended with failure (exception or FAULT message).", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onCompletion is triggered. To be used for fine grained controlling whether a completion callback should be invoked or not", 'WhenDefinition', '', '', false, false, false, true, ''),
-        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then the on completion process will run asynchronously by a separate thread from a thread pool. By default this is false, meaning the on completion process will run synchronously using the same caller thread as from the route.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then the on completion process will run asynchronously by a separate thread from a thread pool. By default this is false, meaning the on completion process will run synchronously using the same caller thread as from the route.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('executorService', 'Executor Service', "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", 'string', '', '', false, false, false, false, 'advanced'),
-        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input message body when an org.apache.camel.Exchange for this on completion. By default this feature is off.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input message body when an org.apache.camel.Exchange for this on completion. By default this feature is off.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onCompletion is triggered. To be used for fine grained controlling whether a completion callback should be invoked or not", 'WhenDefinition', '', '', false, false, false, true, ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, ''),
@@ -1063,9 +1063,9 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('correlationExpression', 'Correlation Expression', "The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, ''),
         new PropertyMeta('executorService', 'Executor Service', "To use a custom thread pool (ScheduledExecutorService) by the throttler.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('timePeriodMillis', 'Time Period Millis', "Sets the time period during which the maximum request count is valid for", 'string', '', '1000', false, false, false, false, ''),
-        new PropertyMeta('asyncDelayed', 'Async Delayed', "Enables asynchronous delay which means the thread will not block while delaying.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('callerRunsWhenRejected', 'Caller Runs When Rejected', "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", 'boolean', '', 'true', false, false, false, false, ''),
-        new PropertyMeta('rejectExecution', 'Reject Execution', "Whether or not throttler throws the ThrottlerRejectedExecutionException when the exchange exceeds the request limit Is by default false", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('asyncDelayed', 'Async Delayed', "Enables asynchronous delay which means the thread will not block while delaying.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('callerRunsWhenRejected', 'Caller Runs When Rejected', "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", 'boolean', '', 'true', false, false, false, false, 'advanced'),
+        new PropertyMeta('rejectExecution', 'Reject Execution', "Whether or not throttler throws the ThrottlerRejectedExecutionException when the exchange exceeds the request limit Is by default false", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1187,9 +1187,9 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('toD', 'ToDynamicDefinition', 'To D', "Sends the message to a dynamic endpoint", 'eip,routing', [
         new PropertyMeta('uri', 'Uri', "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut, InOptionalOut', '', false, false, false, false, ''),
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
-        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut, InOptionalOut', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
+        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('allowOptimisedComponents', 'Allow Optimised Components', "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('autoStartComponents', 'Auto Start Components', "Whether to auto startup components when toD is starting up.", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
@@ -1203,8 +1203,8 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('packageScan', 'PackageScanDefinition', 'Package Scan', "Scans for Java org.apache.camel.builder.RouteBuilder classes in java packages", 'configuration', [
         new PropertyMeta('package', 'Package', "Sets the java package names to use for scanning for route builder classes", 'string', '', '', true, false, true, true, ''),
-        new PropertyMeta('excludes', 'Excludes', "Exclude finding route builder from these java package names.", 'string', '', '', false, false, true, true, ''),
-        new PropertyMeta('includes', 'Includes', "Include finding route builder from these java package names.", 'string', '', '', false, false, true, true, ''),
+        new PropertyMeta('excludes', 'Excludes', "Exclude finding route builder from these java package names.", 'string', '', '', false, false, true, true, 'advanced'),
+        new PropertyMeta('includes', 'Includes', "Include finding route builder from these java package names.", 'string', '', '', false, false, true, true, 'advanced'),
     ]),
     new ElementMeta('patch', 'PatchDefinition', 'Patch', "Rest PATCH command", 'rest', [
         new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, ''),
@@ -1227,14 +1227,14 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('validate', 'ValidateDefinition', 'Validate', "Validates a message based on an expression", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression to use for validation as a predicate. The expression should return either true or false. If returning false the message is invalid and an exception is thrown.", 'ExpressionDefinition', '', '', true, false, false, true, ''),
-        new PropertyMeta('predicateExceptionFactory', 'Predicate Exception Factory', "The bean id of custom PredicateExceptionFactory to use for creating the exception when the validation fails. By default, Camel will throw PredicateValidationException. By using a custom factory you can control which exception to throw instead.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('predicateExceptionFactory', 'Predicate Exception Factory', "The bean id of custom PredicateExceptionFactory to use for creating the exception when the validation fails. By default, Camel will throw PredicateValidationException. By using a custom factory you can control which exception to throw instead.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('throwException', 'ThrowExceptionDefinition', 'Throw Exception', "Throws an exception", 'error', [
-        new PropertyMeta('ref', 'Ref', "Reference to the exception instance to lookup from the registry to throw", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('message', 'Message', "To create a new exception instance and use the given message as caused message (supports simple language)", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('exceptionType', 'Exception Type', "The class of the exception to create using the message.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('ref', 'Ref', "Reference to the exception instance to lookup from the registry to throw", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1248,18 +1248,18 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('predicateValidator', 'predicateValidator', "predicateValidator", 'PredicateValidatorDefinition', '', '', false, false, false, true, ''),
     ]),
     new ElementMeta('resilience4jConfiguration', 'Resilience4jConfigurationDefinition', 'Resilience4j Configuration', "Resilience4j Circuit Breaker EIP configuration", 'configuration,eip', [
-        new PropertyMeta('circuitBreaker', 'Circuit Breaker', "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use.", 'string', '', '', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('config', 'Config', "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreakerConfig instance to lookup and use from the registry.", 'string', '', '', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('failureRateThreshold', 'Failure Rate Threshold', "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", 'number', '', '50', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('permittedNumberOfCallsInHalfOpenState', 'Permitted Number Of Calls In Half Open State', "Configures the number of permitted calls when the CircuitBreaker is half open. The size must be greater than 0. Default size is 10.", 'number', '', '10', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('slidingWindowSize', 'Sliding Window Size', "Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. slidingWindowSize configures the size of the sliding window. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds  [...]
-        new PropertyMeta('slidingWindowType', 'Sliding Window Type', "Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. Default slidingWindowType is COU [...]
-        new PropertyMeta('minimumNumberOfCalls', 'Minimum Number Of Calls', "Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate. For example, if minimumNumberOfCalls is 10, then at least 10 calls must be recorded, before the failure rate can be calculated. If only 9 calls have been recorded the CircuitBreaker will not transition to open even if all 9 calls have failed. Default minimumNumberOfCalls i [...]
-        new PropertyMeta('writableStackTraceEnabled', 'Writable Stack Trace Enabled', "Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open as the cause of the exceptions is already known (the circuit breaker is short-circuiting calls).", 'boolean', '', 'true', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('waitDurationInOpenState', 'Wait Duration In Open State', "Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open. Default value is 60 seconds.", 'number', '', '60', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('automaticTransitionFromOpenToHalfOpenEnabled', 'Automatic Transition From Open To Half Open Enabled', "Enables automatic transition from OPEN to HALF_OPEN state once the waitDurationInOpenState has passed.", 'boolean', '', 'false', false, false, false, false, 'circuitbreaker'),
-        new PropertyMeta('slowCallRateThreshold', 'Slow Call Rate Threshold', "Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold Duration. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 100 percentage which means that a [...]
-        new PropertyMeta('slowCallDurationThreshold', 'Slow Call Duration Threshold', "Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage. Default value is 60 seconds.", 'number', '', '60', false, false, false, false, 'circuitbreaker'),
+        new PropertyMeta('circuitBreaker', 'Circuit Breaker', "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('config', 'Config', "Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreakerConfig instance to lookup and use from the registry.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('failureRateThreshold', 'Failure Rate Threshold', "Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage.", 'number', '', '50', false, false, false, false, ''),
+        new PropertyMeta('permittedNumberOfCallsInHalfOpenState', 'Permitted Number Of Calls In Half Open State', "Configures the number of permitted calls when the CircuitBreaker is half open. The size must be greater than 0. Default size is 10.", 'number', '', '10', false, false, false, false, 'advanced'),
+        new PropertyMeta('slidingWindowSize', 'Sliding Window Size', "Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. slidingWindowSize configures the size of the sliding window. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds  [...]
+        new PropertyMeta('slidingWindowType', 'Sliding Window Type', "Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. Default slidingWindowType is COU [...]
+        new PropertyMeta('minimumNumberOfCalls', 'Minimum Number Of Calls', "Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate. For example, if minimumNumberOfCalls is 10, then at least 10 calls must be recorded, before the failure rate can be calculated. If only 9 calls have been recorded the CircuitBreaker will not transition to open even if all 9 calls have failed. Default minimumNumberOfCalls i [...]
+        new PropertyMeta('writableStackTraceEnabled', 'Writable Stack Trace Enabled', "Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open as the cause of the exceptions is already known (the circuit breaker is short-circuiting calls).", 'boolean', '', 'true', false, false, false, false, 'advanced'),
+        new PropertyMeta('waitDurationInOpenState', 'Wait Duration In Open State', "Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open. Default value is 60 seconds.", 'number', '', '60', false, false, false, false, 'advanced'),
+        new PropertyMeta('automaticTransitionFromOpenToHalfOpenEnabled', 'Automatic Transition From Open To Half Open Enabled', "Enables automatic transition from OPEN to HALF_OPEN state once the waitDurationInOpenState has passed.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('slowCallRateThreshold', 'Slow Call Rate Threshold', "Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold Duration. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 100 percentage which means that a [...]
+        new PropertyMeta('slowCallDurationThreshold', 'Slow Call Duration Threshold', "Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage. Default value is 60 seconds.", 'number', '', '60', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, ''),
     ]),
     new ElementMeta('choice', 'ChoiceDefinition', 'Choice', "Route messages based on a series of predicates", 'eip,routing', [
@@ -1282,7 +1282,6 @@ export const CamelModelMetadata: ElementMeta[] = [
     new ElementMeta('sample', 'SamplingDefinition', 'Sample', "Extract a sample of the messages passing through a route", 'eip,routing', [
         new PropertyMeta('samplePeriod', 'Sample Period', "Sets the sample period during which only a single Exchange will pass through.", 'string', '', '1000', false, false, false, false, ''),
         new PropertyMeta('messageFrequency', 'Message Frequency', "Sets the sample message count which only a single Exchange will pass through after this many received.", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('units', 'Units', "Sets the time units for the sample period, defaulting to seconds.", 'string', 'NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS', 'SECONDS', false, false, false, false, ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1294,7 +1293,7 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('to', 'ToDefinition', 'To', "Sends the message to a static endpoint", 'eip,routing', [
         new PropertyMeta('uri', 'Uri', "Sets the uri of the endpoint to send to.", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut, InOptionalOut', '', false, false, false, false, ''),
+        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut, InOptionalOut', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, ''),
@@ -1317,7 +1316,7 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('text', 'Text', "The description as human readable text", 'string', '', '', true, false, false, false, ''),
     ]),
     new ElementMeta('onFallback', 'OnFallbackDefinition', 'On Fallback', "Route to be executed when Circuit Breaker EIP executes fallback", 'eip,routing', [
-        new PropertyMeta('fallbackViaNetwork', 'Fallback Via Network', "Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure and so it also needs to be wrapped by a HystrixCommand. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool.", [...]
+        new PropertyMeta('fallbackViaNetwork', 'Fallback Via Network', "Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure and so it also needs to be wrapped by a HystrixCommand. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool.", [...]
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, ''),
@@ -1537,7 +1536,7 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, ''),
     ]),
     new ElementMeta('removeProperty', 'RemovePropertyDefinition', 'Remove Property', "Removes a named property from the message exchange", 'eip,transformation', [
-        new PropertyMeta('name', 'Name', "Name of property to remove.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('name', 'Name', "Name of property to remove.", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1548,15 +1547,15 @@ export const CamelModelMetadata: ElementMeta[] = [
     new ElementMeta('onException', 'OnExceptionDefinition', 'On Exception', "Route to be executed when an exception is thrown", 'error', [
         new PropertyMeta('exception', 'Exception', "A set of exceptions to react upon.", 'string', '', '', true, false, true, true, ''),
         new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onException is triggered. To be used for fine grained controlling whether a thrown exception should be intercepted by this exception type or not.", 'WhenDefinition', '', '', false, false, false, true, ''),
-        new PropertyMeta('retryWhile', 'Retry While', "Sets the retry while predicate. Will continue retrying until predicate returns false.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, ''),
+        new PropertyMeta('retryWhile', 'Retry While', "Sets the retry while predicate. Will continue retrying until predicate returns false.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, 'advanced'),
         new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Used for configuring redelivery options", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, ''),
-        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to lookup in the org.apache.camel.spi.Registry to be used.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to lookup in the org.apache.camel.spi.Registry to be used.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('handled', 'Handled', "Sets whether the exchange should be marked as handled or not.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, ''),
-        new PropertyMeta('continued', 'Continued', "Sets whether the exchange should handle and continue routing from the point of failure. If this option is enabled then its considered handled as well.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, ''),
-        new PropertyMeta('onRedeliveryRef', 'On Redelivery Ref', "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('onExceptionOccurredRef', 'On Exception Occurred Ref', "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
-        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('continued', 'Continued', "Sets whether the exchange should handle and continue routing from the point of failure. If this option is enabled then its considered handled as well.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, 'advanced'),
+        new PropertyMeta('onRedeliveryRef', 'On Redelivery Ref', "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('onExceptionOccurredRef', 'On Exception Occurred Ref', "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
+        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, ''),
@@ -1580,28 +1579,28 @@ export const CamelModelMetadata: ElementMeta[] = [
     new ElementMeta('redeliveryPolicy', 'RedeliveryPolicyDefinition', 'Redelivery Policy', "To configure re-delivery for error handling", 'configuration', [
         new PropertyMeta('maximumRedeliveries', 'Maximum Redeliveries', "Sets the maximum redeliveries x = redeliver at most x times 0 = no redeliveries -1 = redeliver forever", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('redeliveryDelay', 'Redelivery Delay', "Sets the initial redelivery delay", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('asyncDelayedRedelivery', 'Async Delayed Redelivery', "Allow asynchronous delayed redelivery. The route, in particular the consumer's component, must support the Asynchronous Routing Engine (e.g. seda).", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('asyncDelayedRedelivery', 'Async Delayed Redelivery', "Allow asynchronous delayed redelivery. The route, in particular the consumer's component, must support the Asynchronous Routing Engine (e.g. seda).", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('backOffMultiplier', 'Back Off Multiplier', "Sets the back off multiplier", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('useExponentialBackOff', 'Use Exponential Back Off', "Turn on exponential backk off", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('collisionAvoidanceFactor', 'Collision Avoidance Factor', "Sets the collision avoidance factor", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('useCollisionAvoidance', 'Use Collision Avoidance', "Turn on collision avoidance.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('useExponentialBackOff', 'Use Exponential Back Off', "Turn on exponential backk off", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('collisionAvoidanceFactor', 'Collision Avoidance Factor', "Sets the collision avoidance factor", 'number', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('useCollisionAvoidance', 'Use Collision Avoidance', "Turn on collision avoidance.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('maximumRedeliveryDelay', 'Maximum Redelivery Delay', "Sets the maximum delay between redelivery", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('retriesExhaustedLogLevel', 'Retries Exhausted Log Level', "Sets the logging level to use when retries have been exhausted", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('retriesExhaustedLogLevel', 'Retries Exhausted Log Level', "Sets the logging level to use when retries have been exhausted", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('retryAttemptedLogLevel', 'Retry Attempted Log Level', "Sets the logging level to use for logging retry attempts", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('retryAttemptedLogInterval', 'Retry Attempted Log Interval', "Sets the interval to use for logging retry attempts", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('logRetryAttempted', 'Log Retry Attempted', "Sets whether retry attempts should be logged or not. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('logStackTrace', 'Log Stack Trace', "Sets whether stack traces should be logged. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('logRetryStackTrace', 'Log Retry Stack Trace', "Sets whether stack traces should be logged when an retry attempt failed. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('logHandled', 'Log Handled', "Sets whether handled exceptions should be logged or not. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('logNewException', 'Log New Exception', "Sets whether new exceptions should be logged or not. Can be used to include or reduce verbose. A new exception is an exception that was thrown while handling a previous exception.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('retryAttemptedLogInterval', 'Retry Attempted Log Interval', "Sets the interval to use for logging retry attempts", 'number', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('logRetryAttempted', 'Log Retry Attempted', "Sets whether retry attempts should be logged or not. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('logStackTrace', 'Log Stack Trace', "Sets whether stack traces should be logged. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('logRetryStackTrace', 'Log Retry Stack Trace', "Sets whether stack traces should be logged when an retry attempt failed. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('logHandled', 'Log Handled', "Sets whether handled exceptions should be logged or not. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('logNewException', 'Log New Exception', "Sets whether new exceptions should be logged or not. Can be used to include or reduce verbose. A new exception is an exception that was thrown while handling a previous exception.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('logContinued', 'Log Continued', "Sets whether continued exceptions should be logged or not. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('logExhausted', 'Log Exhausted', "Sets whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('logExhaustedMessageHistory', 'Log Exhausted Message History', "Sets whether exhausted exceptions should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('logExhaustedMessageBody', 'Log Exhausted Message Body', "Sets whether exhausted message body should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose. Requires logExhaustedMessageHistory to be enabled.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('disableRedelivery', 'Disable Redelivery', "Disables redelivery (same as setting maximum redeliveries to 0)", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('delayPattern', 'Delay Pattern', "Sets the delay pattern with delay intervals.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('allowRedeliveryWhileStopping', 'Allow Redelivery While Stopping', "Controls whether to allow redelivery while stopping/shutting down a route that uses error handling.", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('exchangeFormatterRef', 'Exchange Formatter Ref', "Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('logExhausted', 'Log Exhausted', "Sets whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('logExhaustedMessageHistory', 'Log Exhausted Message History', "Sets whether exhausted exceptions should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('logExhaustedMessageBody', 'Log Exhausted Message Body', "Sets whether exhausted message body should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose. Requires logExhaustedMessageHistory to be enabled.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('disableRedelivery', 'Disable Redelivery', "Disables redelivery (same as setting maximum redeliveries to 0)", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('delayPattern', 'Delay Pattern', "Sets the delay pattern with delay intervals.", 'string', '', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('allowRedeliveryWhileStopping', 'Allow Redelivery While Stopping', "Controls whether to allow redelivery while stopping/shutting down a route that uses error handling.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('exchangeFormatterRef', 'Exchange Formatter Ref', "Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange.", 'string', '', '', false, false, false, false, 'advanced'),
     ]),
     new ElementMeta('routeContextRef', 'RouteContextRefDefinition', 'Route Context Ref', "To refer to an XML file with routes defined using the xml-dsl", 'configuration', [
         new PropertyMeta('ref', 'Ref', "Reference to the routes in the xml dsl", 'string', '', '', true, false, false, false, ''),
@@ -1640,8 +1639,8 @@ export const CamelModelMetadata: ElementMeta[] = [
     new ElementMeta('routingSlip', 'RoutingSlipDefinition', 'Routing Slip', "Routes a message through a series of steps that are pre-determined (the slip)", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to define the routing slip, which defines which endpoints to route the message in a pipeline style. Notice the expression is evaluated once, if you want a more dynamic style, then the dynamic router eip is a better choice.", 'ExpressionDefinition', '', '', true, false, false, true, ''),
         new PropertyMeta('uriDelimiter', 'Uri Delimiter', "Sets the uri delimiter to use", 'string', '', ',', false, false, false, false, ''),
-        new PropertyMeta('ignoreInvalidEndpoints', 'Ignore Invalid Endpoints', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this routing slip, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prot [...]
+        new PropertyMeta('ignoreInvalidEndpoints', 'Ignore Invalid Endpoints', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this routing slip, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prot [...]
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1675,9 +1674,9 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('onPrepare', 'On Prepare', "Uses the Processor when preparing the org.apache.camel.Exchange to be sent. This can be used to deep-clone messages that should be sent, or any custom logic needed before the exchange is sent.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('executorService', 'Executor Service', "Uses a custom thread pool", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('uri', 'Uri', "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut, InOptionalOut', '', false, false, false, false, ''),
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
-        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut, InOptionalOut', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
+        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('allowOptimisedComponents', 'Allow Optimised Components', "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('autoStartComponents', 'Auto Start Components', "Whether to auto startup components when toD is starting up.", 'boolean', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
@@ -1696,8 +1695,8 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('maximumRetries', 'Maximum Retries', "Sets the maximum number of retries", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('retryDelay', 'Retry Delay', "Sets the delay in millis between retries", 'string', '', '50', false, false, false, false, ''),
         new PropertyMeta('maximumRetryDelay', 'Maximum Retry Delay', "Sets the upper value of retry in millis between retries, when using exponential or random backoff", 'string', '', '1000', false, false, false, false, ''),
-        new PropertyMeta('exponentialBackOff', 'Exponential Back Off', "Enable exponential backoff", 'boolean', '', 'true', false, false, false, false, ''),
-        new PropertyMeta('randomBackOff', 'Random Back Off', "Enables random backoff", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('exponentialBackOff', 'Exponential Back Off', "Enable exponential backoff", 'boolean', '', 'true', false, false, false, false, 'advanced'),
+        new PropertyMeta('randomBackOff', 'Random Back Off', "Enables random backoff", 'boolean', '', 'false', false, false, false, false, 'advanced'),
     ]),
     new ElementMeta('interceptFrom', 'InterceptFromDefinition', 'Intercept From', "Intercepts incoming messages", 'configuration', [
         new PropertyMeta('uri', 'Uri', "Intercept incoming messages from the uri or uri pattern. If this option is not configured, then all incoming messages is intercepted.", 'string', '', '', false, false, false, false, ''),
@@ -1739,8 +1738,8 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('expression', 'Expression', "Property values as an expression", 'ExpressionDefinition', '', '', true, false, false, true, ''),
     ]),
     new ElementMeta('inputType', 'InputTypeDefinition', 'Input Type', "Set the expected data type of the input message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder} .  [...]
-        new PropertyMeta('urn', 'Urn', "Set input type URN.", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('validate', 'Validate', "Set if validation is required for this input type.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('urn', 'Urn', "The input type URN.", 'string', '', '', true, false, false, false, ''),
+        new PropertyMeta('validate', 'Validate', "Whether if validation is required for this input type.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1764,9 +1763,9 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, ''),
     ]),
     new ElementMeta('rollback', 'RollbackDefinition', 'Rollback', "Forces a rollback by stopping routing the message", 'eip,routing', [
-        new PropertyMeta('markRollbackOnly', 'Mark Rollback Only', "Mark the transaction for rollback only (cannot be overruled to commit)", 'boolean', '', 'false', false, false, false, false, ''),
-        new PropertyMeta('markRollbackOnlyLast', 'Mark Rollback Only Last', "Mark only last sub transaction for rollback only. When using sub transactions (if the transaction manager support this)", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('message', 'Message', "Message to use in rollback exception", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('markRollbackOnly', 'Mark Rollback Only', "Mark the transaction for rollback only (cannot be overruled to commit)", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('markRollbackOnlyLast', 'Mark Rollback Only Last', "Mark only last sub transaction for rollback only. When using sub transactions (if the transaction manager support this)", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1821,10 +1820,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('aggregationStrategyMethodName', 'Aggregation Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('aggregationStrategyMethodAllowNull', 'Aggregation Strategy Method Allow Null', "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('parallelAggregate', 'Parallel Aggregate', "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", 'bo [...]
-        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
+        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('timeout', 'Timeout', "Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for whic [...]
         new PropertyMeta('executorService', 'Executor Service', "To use a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", 'string', '', '', false, false, false, false, 'advanced'),
-        new PropertyMeta('stopOnException', 'Stop On Exception', "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipelin [...]
+        new PropertyMeta('stopOnException', 'Stop On Exception', "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipelin [...]
         new PropertyMeta('ignoreInvalidEndpoints', 'Ignore Invalid Endpoints', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('streaming', 'Streaming', "If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the recipient list.", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('onPrepare', 'On Prepare', "Uses the Processor when preparing the org.apache.camel.Exchange to be used send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", 'string', '', '', false, false, false, false, 'advanced'),
@@ -1898,12 +1897,12 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('poolSize', 'Pool Size', "Sets the core pool size", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('maxPoolSize', 'Max Pool Size', "Sets the maximum pool size", 'number', '', '', false, false, false, false, ''),
         new PropertyMeta('keepAliveTime', 'Keep Alive Time', "Sets the keep alive time for idle threads", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('timeUnit', 'Time Unit', "Sets the keep alive time unit. By default SECONDS is used.", 'string', 'NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS', '', false, false, false, false, ''),
+        new PropertyMeta('timeUnit', 'Time Unit', "Sets the keep alive time unit. By default SECONDS is used.", 'string', 'NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS', '', false, false, false, false, 'advanced'),
         new PropertyMeta('maxQueueSize', 'Max Queue Size', "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue", 'number', '', '', false, false, false, false, ''),
-        new PropertyMeta('allowCoreThreadTimeOut', 'Allow Core Thread Time Out', "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size Is by default false", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('allowCoreThreadTimeOut', 'Allow Core Thread Time Out', "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size Is by default false", 'boolean', '', 'false', false, false, false, false, 'advanced'),
         new PropertyMeta('threadName', 'Thread Name', "Sets the thread name to use.", 'string', '', 'Threads', false, false, false, false, ''),
-        new PropertyMeta('rejectedPolicy', 'Rejected Policy', "Sets the handler for tasks which cannot be executed by the thread pool.", 'string', 'Abort, CallerRuns, DiscardOldest, Discard', '', false, false, false, false, ''),
-        new PropertyMeta('callerRunsWhenRejected', 'Caller Runs When Rejected', "Whether or not to use as caller runs as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler. Is by default true", 'string', '', 'true', false, false, false, false, ''),
+        new PropertyMeta('rejectedPolicy', 'Rejected Policy', "Sets the handler for tasks which cannot be executed by the thread pool.", 'string', 'Abort, CallerRuns, DiscardOldest, Discard', '', false, false, false, false, 'advanced'),
+        new PropertyMeta('callerRunsWhenRejected', 'Caller Runs When Rejected', "Whether or not to use as caller runs as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler. Is by default true", 'string', '', 'true', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
@@ -1921,7 +1920,7 @@ export const CamelModelMetadata: ElementMeta[] = [
     new ElementMeta('interceptSendToEndpoint', 'InterceptSendToEndpointDefinition', 'Intercept Send To Endpoint', "Intercepts messages being sent to an endpoint", 'configuration', [
         new PropertyMeta('uri', 'Uri', "Intercept sending to the uri or uri pattern.", 'string', '', '', true, false, false, false, ''),
         new PropertyMeta('skipSendToOriginalEndpoint', 'Skip Send To Original Endpoint', "If set to true then the message is not sent to the original endpoint. By default (false) the message is both intercepted and then sent to the original endpoint.", 'string', '', '', false, false, false, false, ''),
-        new PropertyMeta('afterUri', 'After Uri', "After sending to the endpoint then send the message to this uri which allows to process its result.", 'string', '', '', false, false, false, false, ''),
+        new PropertyMeta('afterUri', 'After Uri', "After sending to the endpoint then send the message to this uri which allows to process its result.", 'string', '', '', false, false, false, false, 'advanced'),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, ''),
@@ -1931,7 +1930,7 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('outputType', 'OutputTypeDefinition', 'Output Type', "Set the expected data type of the output message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder [...]
         new PropertyMeta('urn', 'Urn', "Set output type URN.", 'string', '', '', true, false, false, false, ''),
-        new PropertyMeta('validate', 'Validate', "Set if validation is required for this output type.", 'boolean', '', 'false', false, false, false, false, ''),
+        new PropertyMeta('validate', 'Validate', "Whether if validation is required for this output type.", 'boolean', '', 'false', false, false, false, false, ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, ''),
     ]),
diff --git a/karavan-core/test/restConfigDsl.yaml b/karavan-core/test/restConfigDsl.yaml
new file mode 100644
index 0000000..738536e
--- /dev/null
+++ b/karavan-core/test/restConfigDsl.yaml
@@ -0,0 +1,17 @@
+apiVersion: camel.apache.org/v1
+kind: Integration
+metadata:
+  name: test
+spec:
+  flows:
+    - rest:
+        post:
+          - to: direct:direct1
+        path: path1
+    - rest:
+        post:
+          - to: direct:direct2
+        path: path2
+    - restConfiguration:
+        port: '8080'
+        host: localhost
diff --git a/karavan-core/test/restDsl.spec.ts b/karavan-core/test/restDsl.spec.ts
index af29da3..a3b9f32 100644
--- a/karavan-core/test/restDsl.spec.ts
+++ b/karavan-core/test/restDsl.spec.ts
@@ -19,9 +19,10 @@ import * as fs from 'fs';
 import 'mocha';
 import {CamelDefinitionYaml} from "../src/core/api/CamelDefinitionYaml";
 import {Integration} from "../src/core/model/IntegrationDefinition";
-import {GetDefinition, RestDefinition, RouteDefinition} from "../src/core/model/CamelDefinition";
+import {GetDefinition, PostDefinition, RestDefinition, RouteDefinition} from "../src/core/model/CamelDefinition";
 import {FromDefinition} from "../src/core/model/CamelDefinition";
 import {CamelDefinitionApiExt} from "../src/core/api/CamelDefinitionApiExt";
+import {RestConfigurationDefinition} from "../src/core/model/CamelDefinition";
 
 describe('REST DSL', () => {
 
@@ -52,7 +53,6 @@ describe('REST DSL', () => {
         i = CamelDefinitionApiExt.addRestMethodToIntegration(i, new GetDefinition(), rest.uuid);
 
         const yaml = CamelDefinitionYaml.integrationToYaml(i);
-        console.log(yaml);
 
         i.spec.flows?.filter(f => f.dslName === 'RestDefinition').forEach(f => {
                 const rest = f as RestDefinition;
@@ -61,4 +61,17 @@ describe('REST DSL', () => {
             })
     });
 
+    it('Add REST Configuration', () => {
+        let i = Integration.createNew("test")
+        i.spec.flows?.push(new RestDefinition({path:"path1", post:[new PostDefinition({to:"direct:direct1"})]}));
+        i.spec.flows?.push(new RestDefinition({path:"path2", post:[new PostDefinition({to:"direct:direct2"})]}));
+        i.spec.flows?.push(new RestConfigurationDefinition({port: "8080", host:"localhost"}));
+
+        const yaml1 = CamelDefinitionYaml.integrationToYaml(i);
+
+        const yaml2 = fs.readFileSync('test/restConfigDsl.yaml', {encoding: 'utf8', flag: 'r'});
+
+        expect(yaml2).to.equal(yaml1);
+    });
+
 });
\ No newline at end of file
diff --git a/karavan-designer/src/App.tsx b/karavan-designer/src/App.tsx
index 7693d24..e03b2c6 100644
--- a/karavan-designer/src/App.tsx
+++ b/karavan-designer/src/App.tsx
@@ -146,9 +146,9 @@ class App extends React.Component<Props, State> {
             // '                           message: hello22s\n' +
             // '                           logName: log22\n' +
             // '                otherwise: {}\n'+
-            '    - rest-configuration:\n' +
+            '    - restConfiguration:\n' +
             '        component: "platform-http"\n' +
-            '        context-path: "/base"  \n' +
+            '        contextPath: "/base"  \n' +
             '        port: 8081\n' +
             '    - rest:\n' +
             '        path: "/"\n' +
diff --git a/karavan-designer/src/designer/KaravanDesigner.tsx b/karavan-designer/src/designer/KaravanDesigner.tsx
index dda7bf8..ad24ea3 100644
--- a/karavan-designer/src/designer/KaravanDesigner.tsx
+++ b/karavan-designer/src/designer/KaravanDesigner.tsx
@@ -59,7 +59,6 @@ export class KaravanDesigner extends React.Component<Props, State> {
 
     componentDidUpdate = (prevProps: Readonly<Props>, prevState: Readonly<State>, snapshot?: any) => {
         if (prevState.key !== this.state.key) {
-
             this.props.onSave?.call(this, this.state.integration.metadata.name, this.getCode(this.state.integration));
         }
     }
diff --git a/karavan-designer/src/designer/karavan.css b/karavan-designer/src/designer/karavan.css
index 1f1890a..ee976b5 100644
--- a/karavan-designer/src/designer/karavan.css
+++ b/karavan-designer/src/designer/karavan.css
@@ -373,6 +373,10 @@
     margin-bottom: 3px;
 }
 
+.karavan .properties .object-key-value .object {
+    padding-top: 0;
+}
+
 .karavan .properties .object-value .delete-button {
     margin: 0;
     padding: 5px 3px 0px 6px;
@@ -380,6 +384,20 @@
     color: #909090;
 }
 
+.karavan .properties .object-key-value,
+.karavan .properties .object-key-value .object-field {
+    display: flex;
+    flex-direction: row;
+    gap: 3px;
+}
+
+.karavan .properties .object-key-value .delete-button {
+    margin: auto 0 22px 0;
+    padding: 0px 0px 0px 3px;
+    height: 16px;
+    color: #909090;
+}
+
 .karavan .properties .expression,
 .karavan .properties .object,
 .karavan .properties .dataformat,
@@ -854,7 +872,8 @@
     justify-content: center;
 }
 
-.karavan .rest-page .rest-card ,
+.karavan .rest-page .rest-config-card,
+.karavan .rest-page .rest-card,
 .karavan .rest-page .method-card {
     border-style: dotted;
     border-radius: 4px;
@@ -865,17 +884,20 @@
 }
 
 .karavan .rest-page .rest-card-unselected,
+.karavan .rest-page .rest-config-card-unselected,
 .karavan .rest-page .method-card-unselected {
     border-color: #fb8824;
     background-color: transparent;
 }
 
 .karavan .rest-page .rest-card-selected,
+.karavan .rest-page .rest-config-card-selected,
 .karavan .rest-page .method-card-selected {
     border-color: rgb(48, 50, 132);
     background-color: rgb(171, 172, 224, 0.1);
 }
 
+.karavan .rest-page .rest-config-card,
 .karavan .rest-page .rest-card {
     display: flex;
     flex-direction: column;
@@ -892,6 +914,7 @@
     ustify-content: space-between;
 }
 
+.karavan .rest-page .rest-config-card,
 .karavan .rest-page .method-card {
     display: flex;
     flex-direction: row;
@@ -922,17 +945,21 @@
 }
 
 .karavan .rest-page .rest-card .title,
+.karavan .rest-page .rest-config-card .title,
 .karavan .rest-page .method-card .title {
     margin: auto 0 auto 0;
     font-weight: bold;
+    white-space: nowrap;
 }
 
 .karavan .rest-page .rest-card .description,
+.karavan .rest-page .rest-config-card .description,
 .karavan .rest-page .method-card .description {
     margin: auto 0 auto 0;
     width: 100%;
 }
 
+.karavan .rest-page .rest-config-card .delete-button,
 .karavan .rest-page .rest-card .delete-button,
 .karavan .rest-page .method-card .delete-button {
     position: absolute;
@@ -949,6 +976,7 @@
     z-index: 100;
 }
 
+.karavan .rest-page .rest-config-card:hover .delete-button,
 .karavan .rest-page .rest-card:hover .delete-button,
 .karavan .rest-page .method-card:hover .delete-button {
     visibility: visible;
@@ -967,6 +995,7 @@
     flex-direction: row;
     justify-content: center;
     margin-top: 16px;
+    gap: 6px;
 }
 
 /*Beans*/
diff --git a/karavan-designer/src/designer/rest/RestConfigurationCard.tsx b/karavan-designer/src/designer/rest/RestConfigurationCard.tsx
new file mode 100644
index 0000000..c05dc4f
--- /dev/null
+++ b/karavan-designer/src/designer/rest/RestConfigurationCard.tsx
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import React from 'react';
+import {Button} from '@patternfly/react-core';
+import '../karavan.css';
+import {CamelElement, Integration} from "karavan-core/lib/model/IntegrationDefinition";
+import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-circle-icon";
+import {RestConfigurationDefinition} from "karavan-core/lib/model/CamelDefinition";
+
+interface Props {
+    restConfig: RestConfigurationDefinition
+    selectedRestConfig?: CamelElement
+    integration: Integration
+    selectElement: (element: CamelElement) => void
+    deleteElement: (element: CamelElement) => void
+}
+
+interface State {
+    restConfig: RestConfigurationDefinition
+    expanded: boolean
+}
+
+export class RestConfigurationCard extends React.Component<Props, State> {
+
+    public state: State = {
+        restConfig: this.props.restConfig,
+        expanded: false
+    };
+
+    selectElement = (evt: React.MouseEvent) => {
+        evt.stopPropagation();
+        this.props.selectElement.call(this, this.state.restConfig);
+    }
+
+    delete = (evt: React.MouseEvent) => {
+        evt.stopPropagation();
+        this.props.deleteElement.call(this, this.props.restConfig);
+    }
+
+    render() {
+        const restConfig = this.state.restConfig;
+        const desc = restConfig.host && restConfig.port
+            ? restConfig.host + ":" + restConfig.port
+            : (restConfig.host ? restConfig.host : "") + (restConfig.port ? restConfig.port : "");
+        return (
+            <div className={this.props.selectedRestConfig?.uuid === restConfig.uuid ? "rest-config-card rest-config-card-selected" : "rest-config-card rest-config-card-unselected"} onClick={e => this.selectElement(e)}>
+                <div className="title">Configuration</div>
+                <div className="title">{restConfig.contextPath}</div>
+                <div className="description">{desc}</div>
+                <Button variant="link" className="delete-button" onClick={e => this.delete(e)}><DeleteIcon/></Button>
+            </div>
+        );
+    }
+}
diff --git a/karavan-designer/src/designer/rest/RestDesigner.tsx b/karavan-designer/src/designer/rest/RestDesigner.tsx
index 3b81eb0..a59b994 100644
--- a/karavan-designer/src/designer/rest/RestDesigner.tsx
+++ b/karavan-designer/src/designer/rest/RestDesigner.tsx
@@ -25,12 +25,13 @@ import {DslProperties} from "../route/DslProperties";
 import {RouteToCreate} from "../utils/CamelUi";
 import {RestCard} from "./RestCard";
 import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon";
-import {RestDefinition} from "karavan-core/lib/model/CamelDefinition";
+import {RestConfigurationDefinition, RestContextRefDefinition, RestDefinition} from "karavan-core/lib/model/CamelDefinition";
 import {CamelUtil} from "karavan-core/lib/api/CamelUtil";
 import {CamelDefinitionApiExt} from "karavan-core/lib/api/CamelDefinitionApiExt";
 import {RestMethodSelector} from "./RestMethodSelector";
 import {DslMetaModel} from "../utils/DslMetaModel";
 import {CamelDefinitionApi} from "karavan-core/lib/api/CamelDefinitionApi";
+import {RestConfigurationCard} from "./RestConfigurationCard";
 
 interface Props {
     onSave?: (integration: Integration) => void
@@ -98,14 +99,18 @@ export class RestDesigner extends React.Component<Props, State> {
         }
     };
 
-    changeRest = (rest: RestDefinition) => {
+    addRest = (rest: RestDefinition) => {
         const clone = CamelUtil.cloneIntegration(this.state.integration);
         const i = CamelDefinitionApiExt.addRestToIntegration(clone, rest);
         this.setState({integration: i, key: Math.random().toString(), selectedStep: rest});
     }
 
     createRest = () => {
-        this.changeRest(new RestDefinition());
+        this.addRest(new RestDefinition());
+    }
+
+    createRestConfiguration = () => {
+        this.addRest(new RestConfigurationDefinition());
     }
 
     showDeleteConfirmation = (element: CamelElement) => {
@@ -115,9 +120,10 @@ export class RestDesigner extends React.Component<Props, State> {
     deleteElement = () => {
         const step = this.state.selectedStep;
         if (step) {
-            const i =  step.dslName === 'RestDefinition'
-                ? CamelDefinitionApiExt.deleteRestFromIntegration(this.state.integration, step.uuid)
-                : CamelDefinitionApiExt.deleteRestMethodFromIntegration(this.state.integration, step.uuid);
+            let i;
+            if (step.dslName === 'RestDefinition') i = CamelDefinitionApiExt.deleteRestFromIntegration(this.state.integration, step.uuid);
+            else if (step.dslName === 'RestConfigurationDefinition') i = CamelDefinitionApiExt.deleteRestConfigurationFromIntegration(this.state.integration);
+            else i = CamelDefinitionApiExt.deleteRestMethodFromIntegration(this.state.integration, step.uuid);
             this.setState({
                 integration: i,
                 showSelector: false,
@@ -151,7 +157,7 @@ export class RestDesigner extends React.Component<Props, State> {
     }
 
     onMethodSelect = (method: DslMetaModel) => {
-        if (this.state.selectedStep){
+        if (this.state.selectedStep) {
             const clone = CamelUtil.cloneIntegration(this.state.integration);
             const m = CamelDefinitionApi.createStep(method.dsl, {});
             const i = CamelDefinitionApiExt.addRestMethodToIntegration(clone, m, this.state.selectedStep?.uuid);
@@ -178,20 +184,54 @@ export class RestDesigner extends React.Component<Props, State> {
             </Modal>)
     }
 
+    getRestConfigurationCard(config: RestContextRefDefinition) {
+        return (<>
+            <RestConfigurationCard key={Math.random().toString()}
+                                   selectedRestConfig={this.state.selectedStep}
+                                   restConfig={config}
+                                   integration={this.props.integration}
+                                   selectElement={this.selectElement}
+                                   deleteElement={this.showDeleteConfirmation}/>
+        </>)
+    }
+
+    getRestCards(data: RestDefinition[]) {
+        return (<>
+            {data?.map(rest => <RestCard key={rest.uuid + this.state.key}
+                                         selectedStep={this.state.selectedStep}
+                                         rest={rest}
+                                         integration={this.props.integration}
+                                         selectMethod={this.selectMethod}
+                                         selectElement={this.selectElement}
+                                         deleteElement={this.showDeleteConfirmation}/>)}
+        </>)
+    }
+
     render() {
         const data = this.props.integration.spec.flows?.filter(f => f.dslName === 'RestDefinition');
+        const configData = this.props.integration.spec.flows?.filter(f => f.dslName === 'RestConfigurationDefinition');
+        const config = configData && Array.isArray(configData) ? configData[0] : undefined;
         return (
             <PageSection className="rest-page" isFilled padding={{default: 'noPadding'}}>
                 <div className="rest-page-columns">
-                    <div className="graph" data-click="REST"  onClick={event => this.unselectElement(event)}>
+                    <div className="graph" data-click="REST" onClick={event => this.unselectElement(event)}>
                         <div className="flows">
-                            {data?.map(rest => <RestCard key={rest.uuid + this.state.key} selectedStep={this.state.selectedStep} rest={rest} integration={this.props.integration} selectMethod={this.selectMethod} selectElement={this.selectElement} deleteElement={this.showDeleteConfirmation}/>)}
+                            {config && this.getRestConfigurationCard(config)}
+                            {data && this.getRestCards(data)}
                             <div className="add-rest">
+                                {config === undefined &&
+                                    <Button
+                                        variant="primary"
+                                        data-click="ADD_REST_REST_CONFIG"
+                                        icon={<PlusIcon/>}
+                                        onClick={e => this.createRestConfiguration()}>Create REST Configuration
+                                    </Button>
+                                }
                                 <Button
                                     variant={data?.length === 0 ? "primary" : "secondary"}
                                     data-click="ADD_REST"
                                     icon={<PlusIcon/>}
-                                    onClick={e => this.createRest()}>Create new REST
+                                    onClick={e => this.createRest()}>Create REST Service
                                 </Button>
                             </div>
                         </div>
diff --git a/karavan-designer/src/designer/route/property/DslPropertyField.tsx b/karavan-designer/src/designer/route/property/DslPropertyField.tsx
index 9ef0872..0282273 100644
--- a/karavan-designer/src/designer/route/property/DslPropertyField.tsx
+++ b/karavan-designer/src/designer/route/property/DslPropertyField.tsx
@@ -30,7 +30,7 @@ import "@patternfly/patternfly/patternfly.css";
 import HelpIcon from "@patternfly/react-icons/dist/js/icons/help-icon";
 import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-circle-icon";
 import {CamelUtil} from "karavan-core/lib/api/CamelUtil";
-import { PropertyMeta} from "karavan-core/lib/model/CamelMetadata";
+import {PropertyMeta} from "karavan-core/lib/model/CamelMetadata";
 import {CamelDefinitionApiExt} from "karavan-core/lib/api/CamelDefinitionApiExt";
 import {ExpressionField} from "./ExpressionField";
 import {CamelUi, RouteToCreate} from "../../utils/CamelUi";
@@ -49,11 +49,12 @@ interface Props {
     property: PropertyMeta,
     value: any,
     onChange?: (fieldId: string, value: string | number | boolean | any, newRoute?: RouteToCreate) => void,
-    onExpressionChange?: (propertyName: string, exp:ExpressionDefinition) => void,
+    onExpressionChange?: (propertyName: string, exp: ExpressionDefinition) => void,
     onDataFormatChange?: (value: DataFormatDefinition) => void,
     onParameterChange?: (parameter: string, value: string | number | boolean | any, pathParameter?: boolean, newRoute?: RouteToCreate) => void,
     element?: CamelElement
     integration: Integration,
+    hideLabel?: boolean
 }
 
 interface State {
@@ -134,7 +135,7 @@ export class DslPropertyField extends React.Component<Props, State> {
     }
 
     isUriReadOnly = (property: PropertyMeta): boolean => {
-        const dslName:string = this.props.element?.dslName || '';
+        const dslName: string = this.props.element?.dslName || '';
         return property.name === 'uri' && !['ToDynamicDefinition', 'WireTapDefinition'].includes(dslName)
     }
 
@@ -173,7 +174,7 @@ export class DslPropertyField extends React.Component<Props, State> {
     getObjectField = (property: PropertyMeta, value: any) => {
         return (
             <div className="object">
-                {value && <ObjectField property={property} value={value} onPropertyUpdate={this.props.onChange} integration={this.props.integration} />}
+                {value && <ObjectField property={property} value={value} onPropertyUpdate={this.props.onChange} integration={this.props.integration}/>}
             </div>
         )
     }
@@ -239,10 +240,10 @@ export class DslPropertyField extends React.Component<Props, State> {
         )
     }
 
-    getMediaTypeSelectOptions(filter?: string){
+    getMediaTypeSelectOptions(filter?: string) {
         return filter
-        ? MediaTypes.filter(mt => mt.includes(filter)).map((value: string) => <SelectOption key={value} value={value.trim()}/>)
-        : MediaTypes.map((value: string) => <SelectOption key={value} value={value.trim()}/>);
+            ? MediaTypes.filter(mt => mt.includes(filter)).map((value: string) => <SelectOption key={value} value={value.trim()}/>)
+            : MediaTypes.map((value: string) => <SelectOption key={value} value={value.trim()}/>);
     }
 
     getMediaTypeSelect = (property: PropertyMeta, value: any) => {
@@ -268,12 +269,12 @@ export class DslPropertyField extends React.Component<Props, State> {
         )
     }
 
-     canBeInternalUri = (property: PropertyMeta, element?: CamelElement): boolean => {
-        if  (element?.dslName === 'WireTapDefinition' && property.name === 'uri') {
+    canBeInternalUri = (property: PropertyMeta, element?: CamelElement): boolean => {
+        if (element?.dslName === 'WireTapDefinition' && property.name === 'uri') {
             return true;
-        } else if  (element?.dslName === 'SagaDefinition' && ['compensation', 'completion'].includes(property.name)) {
+        } else if (element?.dslName === 'SagaDefinition' && ['compensation', 'completion'].includes(property.name)) {
             return true;
-        } else if  (element && ['GetDefinition', 'PostDefinition', 'PutDefinition', 'PatchDefinition', 'DeleteDefinition', 'HeadDefinition'].includes(element?.dslName) && property.name === 'to') {
+        } else if (element && ['GetDefinition', 'PostDefinition', 'PutDefinition', 'PatchDefinition', 'DeleteDefinition', 'HeadDefinition'].includes(element?.dslName) && property.name === 'to') {
             return true;
         } else {
             return false;
@@ -281,7 +282,7 @@ export class DslPropertyField extends React.Component<Props, State> {
     }
 
     canBeMediaType = (property: PropertyMeta, element?: CamelElement): boolean => {
-        if  (element
+        if (element
             && ['RestDefinition', 'GetDefinition', 'PostDefinition', 'PutDefinition', 'PatchDefinition', 'DeleteDefinition', 'HeadDefinition'].includes(element?.dslName)
             && ['consumes', 'produces'].includes(property.name)) {
             return true;
@@ -330,24 +331,46 @@ export class DslPropertyField extends React.Component<Props, State> {
         this.props.onChange?.call(this, fieldId, mValue);
     }
 
+    isKeyValueObject(property: PropertyMeta) {
+        const props = CamelDefinitionApiExt.getElementProperties(property.type);
+        return props.length === 2 && props.filter(p => p.name === 'key').length === 1 && props.filter(p => p.name === 'value').length === 1;
+    }
+
+    getMultiObjectFieldProps(property: PropertyMeta, value: any, v: any, index: number, hideLabel: boolean = false) {
+        return (<>
+            <div className="object">
+                {value && <ObjectField property={property}
+                                       hideLabel={hideLabel}
+                                       value={v}
+                                       onPropertyUpdate={(f, v) => this.onMultiValueObjectUpdate(index, f, v)}
+                                       integration={this.props.integration}/>}
+            </div>
+            <Button variant="link" className="delete-button" onClick={e => {
+                const v = Array.from(value);
+                v.splice(index, 1);
+                this.propertyChanged(property.name, v);
+            }}><DeleteIcon/></Button>
+        </>)
+    }
+
     getMultiValueObjectField = (property: PropertyMeta, value: any) => {
+        const isKeyValue = this.isKeyValueObject(property);
         return (
             <div>
-                {value && Array.from(value).map((v: any, index: number) => (
-                    <Card key={property + "-" + index} className="object-value">
-                        <div className="object">
-                            {value && <ObjectField property={property} value={v} onPropertyUpdate={(f, v) => this.onMultiValueObjectUpdate(index, f, v)} integration={this.props.integration} />}
+                {value && Array.from(value).map((v: any, index: number) => {
+                    if (isKeyValue)
+                        return <div key={property + "-" + index} className="object-key-value">
+                            {this.getMultiObjectFieldProps(property, value, v, index, index > 0)}
                         </div>
-                        <Button variant="link" className="delete-button" onClick={e => {
-                            const v = Array.from(value);
-                            v.splice(index, 1);
-                            this.propertyChanged(property.name,v);
-                        }}><DeleteIcon/></Button>
-                    </Card>
-                ))}
-                <Button variant="link" className="add-button" onClick={e => this.propertyChanged(property.name, [...value, CamelDefinitionApi.createStep(property.type, {})])}><AddIcon/>{"Add " + property.displayName}</Button>
+                    else
+                        return <Card key={property + "-" + index} className="object-value">
+                            {this.getMultiObjectFieldProps(property, value, v, index)}
+                        </Card>
+                })}
+                <Button variant="link" className="add-button"
+                        onClick={e => this.propertyChanged(property.name, [...value, CamelDefinitionApi.createStep(property.type, {})])}><AddIcon/>{"Add " + property.displayName}
+                </Button>
             </div>
-
         )
     }
 
@@ -443,7 +466,7 @@ export class DslPropertyField extends React.Component<Props, State> {
         const value = this.props.value;
         return (
             <FormGroup
-                label={this.getLabel(property, value)}
+                label={this.props.hideLabel ? undefined : this.getLabel(property, value)}
                 fieldId={property.name}
                 labelIcon={this.getLabelIcon(property)}>
                 {value && ["ExpressionDefinition", "ExpressionSubElementDefinition"].includes(property.type)
diff --git a/karavan-designer/src/designer/route/property/ObjectField.tsx b/karavan-designer/src/designer/route/property/ObjectField.tsx
index f5ff80f..28918b2 100644
--- a/karavan-designer/src/designer/route/property/ObjectField.tsx
+++ b/karavan-designer/src/designer/route/property/ObjectField.tsx
@@ -31,6 +31,7 @@ interface Props {
     value?: CamelElement,
     onPropertyUpdate?: (fieldId: string, value: CamelElement) => void
     integration: Integration,
+    hideLabel?: boolean
 }
 
 interface State {
@@ -72,9 +73,10 @@ export class ObjectField extends React.Component<Props, State> {
     render() {
         const value = this.props.value;
         return (
-                <div>
+                <div className="object-field">
                     {value && CamelDefinitionApiExt.getElementProperties(value.dslName).map((property: PropertyMeta)  =>
                         <DslPropertyField key={property.name}
+                                          hideLabel={this.props.hideLabel}
                                           integration={this.props.integration}
                                           property={property}
                                           element={value}
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 e85a917..1890c60 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
@@ -50,6 +50,15 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
         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);
+            }
+        });
+
         List<String> modelList = getClasses(definitions, "org.apache.camel");
         modelList.forEach(className -> {
             String model = generateModel(className, definitions.getJsonObject(className), definitions, stepNames);