You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/12/19 00:09:46 UTC

(camel-karavan) branch main updated: Fix #955

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 78b7fe4b Fix #955
78b7fe4b is described below

commit 78b7fe4b81c37bd7af5feebaf7c3f922554f72e2
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Mon Dec 18 19:09:39 2023 -0500

    Fix #955
---
 karavan-designer/public/example/demo.camel.yaml    | 41 ++++++++++++++--------
 .../designer/property/property/BeanProperties.tsx  |  1 -
 .../src/designer/property/usePropertiesHook.tsx    | 41 ++++++++++++++++------
 .../src/designer/route/useRouteDesignerHook.tsx    |  1 -
 karavan-designer/src/designer/utils/CamelUi.tsx    |  1 +
 .../designer/property/property/BeanProperties.tsx  |  1 -
 .../src/designer/property/usePropertiesHook.tsx    | 41 ++++++++++++++++------
 .../src/designer/route/useRouteDesignerHook.tsx    |  1 -
 karavan-space/src/designer/utils/CamelUi.tsx       |  1 +
 .../designer/property/property/BeanProperties.tsx  |  1 -
 .../src/designer/property/usePropertiesHook.tsx    | 41 ++++++++++++++++------
 .../src/designer/route/useRouteDesignerHook.tsx    |  1 -
 .../src/main/webui/src/designer/utils/CamelUi.tsx  |  1 +
 13 files changed, 119 insertions(+), 54 deletions(-)

diff --git a/karavan-designer/public/example/demo.camel.yaml b/karavan-designer/public/example/demo.camel.yaml
index a56231a5..f1df17dc 100644
--- a/karavan-designer/public/example/demo.camel.yaml
+++ b/karavan-designer/public/example/demo.camel.yaml
@@ -1,19 +1,30 @@
-- beans:
-      - constructors: {}
-      - constructors: {}
 - route:
-      id: route-a947
-      nodePrefixId: route-a32
-      from:
-          id: from-c489
-          uri: kamelet:aws-ddb-streams-source
-          steps:
-              - setBody:
-                    id: setBody-4434
-                    expression:
-                        simple:
-                            id: simple-abd8
-                            expression: dddddd
+    id: route-a947
+    nodePrefixId: route-a32
+    from:
+      id: from-c489
+      uri: kamelet:aws-ddb-streams-source
+      steps:
+        - setHeader:
+            id: setBody-4434
+            expression:
+              simple:
+                id: simple-abd8
+                expression: dddddd
+        - filter:
+            id: filter-929b
+            expression:
+              simple:
+                id: simple-d932
+                expression: Hello
+            steps:
+              - bean:
+                  id: bean-120b
+                  ref: xxx
+              - log:
+                  id: log-d86e
+                  message: ${body}!!!
+
 #      steps:
 #        - marshal:
 #            id: marshal-b68c
diff --git a/karavan-designer/src/designer/property/property/BeanProperties.tsx b/karavan-designer/src/designer/property/property/BeanProperties.tsx
index 2322d8f4..2d03ec22 100644
--- a/karavan-designer/src/designer/property/property/BeanProperties.tsx
+++ b/karavan-designer/src/designer/property/property/BeanProperties.tsx
@@ -16,7 +16,6 @@
  */
 import React, {useEffect, useState} from 'react';
 import {
-    FormGroup,
     TextInput, Button, Tooltip, Popover, InputGroup, InputGroupItem, capitalize,
 } from '@patternfly/react-core';
 import '../../karavan.css';
diff --git a/karavan-designer/src/designer/property/usePropertiesHook.tsx b/karavan-designer/src/designer/property/usePropertiesHook.tsx
index 67f0e5d4..f8b94498 100644
--- a/karavan-designer/src/designer/property/usePropertiesHook.tsx
+++ b/karavan-designer/src/designer/property/usePropertiesHook.tsx
@@ -26,6 +26,7 @@ import {RouteToCreate} from "../utils/CamelUi";
 import {useDesignerStore, useIntegrationStore} from "../DesignerStore";
 import {shallow} from "zustand/shallow";
 import {CamelMetadataApi} from "karavan-core/lib/model/CamelMetadata";
+import {EventBus} from "../utils/EventBus";
 
 export function usePropertiesHook (designerType: 'routes' | 'rest' | 'beans' = 'routes') {
 
@@ -147,18 +148,36 @@ export function usePropertiesHook (designerType: 'routes' | 'rest' | 'beans' = '
     }
 
     const convertStep = (step: CamelElement, targetDslName: string ) => {
-        const metaSource = CamelMetadataApi.getCamelModelMetadataByClassName(step.dslName);
-        const metaTarget = CamelMetadataApi.getCamelModelMetadataByClassName(targetDslName);
-        metaSource?.properties.forEach(pro => {
-            const toDelete = metaTarget?.properties.findIndex(x => x.name === pro.name) === -1;
-            if (toDelete) {
-                delete (step as any)[pro.name];
+        try {
+            // setSelectedStep(undefined);
+            if (targetDslName === 'ChoiceDefinition' && step.dslName === 'FilterDefinition') {
+                const clone = CamelUtil.cloneStep(step, true);
+                delete (clone as any).dslName;
+                delete (clone as any).stepName;
+                const when = CamelDefinitionApi.createWhenDefinition(clone);
+                const otherwise = CamelDefinitionApi.createOtherwiseDefinition(undefined);
+                const choice = CamelDefinitionApi.createChoiceDefinition({uuid: step.uuid, when: [when], otherwise: otherwise});
+                onPropertyUpdate(choice);
+                setSelectedStep(choice);
+            } else {
+                const clone = CamelUtil.cloneStep(step, false);
+                const metaSource = CamelMetadataApi.getCamelModelMetadataByClassName(clone.dslName);
+                const metaTarget = CamelMetadataApi.getCamelModelMetadataByClassName(targetDslName);
+                metaSource?.properties.forEach(pro => {
+                    const toDelete = metaTarget?.properties.findIndex(x => x.name === pro.name) === -1;
+                    if (toDelete) {
+                        delete (clone as any)[pro.name];
+                    }
+                })
+                delete (clone as any).dslName;
+                delete (clone as any).stepName;
+                const converted= CamelDefinitionApi.createStep(targetDslName, clone, true);
+                onPropertyUpdate(converted);
+                setSelectedStep(converted);
             }
-        })
-        delete (step as any).dslName;
-        const converted = CamelDefinitionApi.createStep(targetDslName, step, true);
-        onPropertyUpdate(converted);
-        setSelectedStep(converted)
+        } catch (e: any) {
+            EventBus.sendAlert('Error converting step', e.message, 'danger')
+        }
     }
 
     return {convertStep, cloneElement, onPropertyChange, onParametersChange, onDataFormatChange, onExpressionChange, getInternalComponentName}
diff --git a/karavan-designer/src/designer/route/useRouteDesignerHook.tsx b/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
index 51b97e20..192988ab 100644
--- a/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
+++ b/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
@@ -254,7 +254,6 @@ export function useRouteDesignerHook () {
             default:
                 const step = CamelDefinitionApi.createStep(dsl.dsl, undefined);
                 const augmentedStep = setDslDefaults(step);
-                console.log(step, augmentedStep)
                 addStep(augmentedStep, parentId, position)
                 break;
         }
diff --git a/karavan-designer/src/designer/utils/CamelUi.tsx b/karavan-designer/src/designer/utils/CamelUi.tsx
index 92858e09..02acba92 100644
--- a/karavan-designer/src/designer/utils/CamelUi.tsx
+++ b/karavan-designer/src/designer/utils/CamelUi.tsx
@@ -169,6 +169,7 @@ const INTEGRATION_PATTERNS = 'Integration Patterns';
 const stepConvertMap = new Map<string, string>([
     ["SetBodyDefinition", "SetHeaderDefinition"],
     ["SetHeaderDefinition", "SetBodyDefinition"],
+    ["FilterDefinition", "ChoiceDefinition"],
 ]);
 
 export class CamelUi {
diff --git a/karavan-space/src/designer/property/property/BeanProperties.tsx b/karavan-space/src/designer/property/property/BeanProperties.tsx
index 2322d8f4..2d03ec22 100644
--- a/karavan-space/src/designer/property/property/BeanProperties.tsx
+++ b/karavan-space/src/designer/property/property/BeanProperties.tsx
@@ -16,7 +16,6 @@
  */
 import React, {useEffect, useState} from 'react';
 import {
-    FormGroup,
     TextInput, Button, Tooltip, Popover, InputGroup, InputGroupItem, capitalize,
 } from '@patternfly/react-core';
 import '../../karavan.css';
diff --git a/karavan-space/src/designer/property/usePropertiesHook.tsx b/karavan-space/src/designer/property/usePropertiesHook.tsx
index 67f0e5d4..f8b94498 100644
--- a/karavan-space/src/designer/property/usePropertiesHook.tsx
+++ b/karavan-space/src/designer/property/usePropertiesHook.tsx
@@ -26,6 +26,7 @@ import {RouteToCreate} from "../utils/CamelUi";
 import {useDesignerStore, useIntegrationStore} from "../DesignerStore";
 import {shallow} from "zustand/shallow";
 import {CamelMetadataApi} from "karavan-core/lib/model/CamelMetadata";
+import {EventBus} from "../utils/EventBus";
 
 export function usePropertiesHook (designerType: 'routes' | 'rest' | 'beans' = 'routes') {
 
@@ -147,18 +148,36 @@ export function usePropertiesHook (designerType: 'routes' | 'rest' | 'beans' = '
     }
 
     const convertStep = (step: CamelElement, targetDslName: string ) => {
-        const metaSource = CamelMetadataApi.getCamelModelMetadataByClassName(step.dslName);
-        const metaTarget = CamelMetadataApi.getCamelModelMetadataByClassName(targetDslName);
-        metaSource?.properties.forEach(pro => {
-            const toDelete = metaTarget?.properties.findIndex(x => x.name === pro.name) === -1;
-            if (toDelete) {
-                delete (step as any)[pro.name];
+        try {
+            // setSelectedStep(undefined);
+            if (targetDslName === 'ChoiceDefinition' && step.dslName === 'FilterDefinition') {
+                const clone = CamelUtil.cloneStep(step, true);
+                delete (clone as any).dslName;
+                delete (clone as any).stepName;
+                const when = CamelDefinitionApi.createWhenDefinition(clone);
+                const otherwise = CamelDefinitionApi.createOtherwiseDefinition(undefined);
+                const choice = CamelDefinitionApi.createChoiceDefinition({uuid: step.uuid, when: [when], otherwise: otherwise});
+                onPropertyUpdate(choice);
+                setSelectedStep(choice);
+            } else {
+                const clone = CamelUtil.cloneStep(step, false);
+                const metaSource = CamelMetadataApi.getCamelModelMetadataByClassName(clone.dslName);
+                const metaTarget = CamelMetadataApi.getCamelModelMetadataByClassName(targetDslName);
+                metaSource?.properties.forEach(pro => {
+                    const toDelete = metaTarget?.properties.findIndex(x => x.name === pro.name) === -1;
+                    if (toDelete) {
+                        delete (clone as any)[pro.name];
+                    }
+                })
+                delete (clone as any).dslName;
+                delete (clone as any).stepName;
+                const converted= CamelDefinitionApi.createStep(targetDslName, clone, true);
+                onPropertyUpdate(converted);
+                setSelectedStep(converted);
             }
-        })
-        delete (step as any).dslName;
-        const converted = CamelDefinitionApi.createStep(targetDslName, step, true);
-        onPropertyUpdate(converted);
-        setSelectedStep(converted)
+        } catch (e: any) {
+            EventBus.sendAlert('Error converting step', e.message, 'danger')
+        }
     }
 
     return {convertStep, cloneElement, onPropertyChange, onParametersChange, onDataFormatChange, onExpressionChange, getInternalComponentName}
diff --git a/karavan-space/src/designer/route/useRouteDesignerHook.tsx b/karavan-space/src/designer/route/useRouteDesignerHook.tsx
index 51b97e20..192988ab 100644
--- a/karavan-space/src/designer/route/useRouteDesignerHook.tsx
+++ b/karavan-space/src/designer/route/useRouteDesignerHook.tsx
@@ -254,7 +254,6 @@ export function useRouteDesignerHook () {
             default:
                 const step = CamelDefinitionApi.createStep(dsl.dsl, undefined);
                 const augmentedStep = setDslDefaults(step);
-                console.log(step, augmentedStep)
                 addStep(augmentedStep, parentId, position)
                 break;
         }
diff --git a/karavan-space/src/designer/utils/CamelUi.tsx b/karavan-space/src/designer/utils/CamelUi.tsx
index 92858e09..02acba92 100644
--- a/karavan-space/src/designer/utils/CamelUi.tsx
+++ b/karavan-space/src/designer/utils/CamelUi.tsx
@@ -169,6 +169,7 @@ const INTEGRATION_PATTERNS = 'Integration Patterns';
 const stepConvertMap = new Map<string, string>([
     ["SetBodyDefinition", "SetHeaderDefinition"],
     ["SetHeaderDefinition", "SetBodyDefinition"],
+    ["FilterDefinition", "ChoiceDefinition"],
 ]);
 
 export class CamelUi {
diff --git a/karavan-web/karavan-app/src/main/webui/src/designer/property/property/BeanProperties.tsx b/karavan-web/karavan-app/src/main/webui/src/designer/property/property/BeanProperties.tsx
index 2322d8f4..2d03ec22 100644
--- a/karavan-web/karavan-app/src/main/webui/src/designer/property/property/BeanProperties.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/designer/property/property/BeanProperties.tsx
@@ -16,7 +16,6 @@
  */
 import React, {useEffect, useState} from 'react';
 import {
-    FormGroup,
     TextInput, Button, Tooltip, Popover, InputGroup, InputGroupItem, capitalize,
 } from '@patternfly/react-core';
 import '../../karavan.css';
diff --git a/karavan-web/karavan-app/src/main/webui/src/designer/property/usePropertiesHook.tsx b/karavan-web/karavan-app/src/main/webui/src/designer/property/usePropertiesHook.tsx
index 67f0e5d4..f8b94498 100644
--- a/karavan-web/karavan-app/src/main/webui/src/designer/property/usePropertiesHook.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/designer/property/usePropertiesHook.tsx
@@ -26,6 +26,7 @@ import {RouteToCreate} from "../utils/CamelUi";
 import {useDesignerStore, useIntegrationStore} from "../DesignerStore";
 import {shallow} from "zustand/shallow";
 import {CamelMetadataApi} from "karavan-core/lib/model/CamelMetadata";
+import {EventBus} from "../utils/EventBus";
 
 export function usePropertiesHook (designerType: 'routes' | 'rest' | 'beans' = 'routes') {
 
@@ -147,18 +148,36 @@ export function usePropertiesHook (designerType: 'routes' | 'rest' | 'beans' = '
     }
 
     const convertStep = (step: CamelElement, targetDslName: string ) => {
-        const metaSource = CamelMetadataApi.getCamelModelMetadataByClassName(step.dslName);
-        const metaTarget = CamelMetadataApi.getCamelModelMetadataByClassName(targetDslName);
-        metaSource?.properties.forEach(pro => {
-            const toDelete = metaTarget?.properties.findIndex(x => x.name === pro.name) === -1;
-            if (toDelete) {
-                delete (step as any)[pro.name];
+        try {
+            // setSelectedStep(undefined);
+            if (targetDslName === 'ChoiceDefinition' && step.dslName === 'FilterDefinition') {
+                const clone = CamelUtil.cloneStep(step, true);
+                delete (clone as any).dslName;
+                delete (clone as any).stepName;
+                const when = CamelDefinitionApi.createWhenDefinition(clone);
+                const otherwise = CamelDefinitionApi.createOtherwiseDefinition(undefined);
+                const choice = CamelDefinitionApi.createChoiceDefinition({uuid: step.uuid, when: [when], otherwise: otherwise});
+                onPropertyUpdate(choice);
+                setSelectedStep(choice);
+            } else {
+                const clone = CamelUtil.cloneStep(step, false);
+                const metaSource = CamelMetadataApi.getCamelModelMetadataByClassName(clone.dslName);
+                const metaTarget = CamelMetadataApi.getCamelModelMetadataByClassName(targetDslName);
+                metaSource?.properties.forEach(pro => {
+                    const toDelete = metaTarget?.properties.findIndex(x => x.name === pro.name) === -1;
+                    if (toDelete) {
+                        delete (clone as any)[pro.name];
+                    }
+                })
+                delete (clone as any).dslName;
+                delete (clone as any).stepName;
+                const converted= CamelDefinitionApi.createStep(targetDslName, clone, true);
+                onPropertyUpdate(converted);
+                setSelectedStep(converted);
             }
-        })
-        delete (step as any).dslName;
-        const converted = CamelDefinitionApi.createStep(targetDslName, step, true);
-        onPropertyUpdate(converted);
-        setSelectedStep(converted)
+        } catch (e: any) {
+            EventBus.sendAlert('Error converting step', e.message, 'danger')
+        }
     }
 
     return {convertStep, cloneElement, onPropertyChange, onParametersChange, onDataFormatChange, onExpressionChange, getInternalComponentName}
diff --git a/karavan-web/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx b/karavan-web/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx
index 51b97e20..192988ab 100644
--- a/karavan-web/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx
@@ -254,7 +254,6 @@ export function useRouteDesignerHook () {
             default:
                 const step = CamelDefinitionApi.createStep(dsl.dsl, undefined);
                 const augmentedStep = setDslDefaults(step);
-                console.log(step, augmentedStep)
                 addStep(augmentedStep, parentId, position)
                 break;
         }
diff --git a/karavan-web/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx b/karavan-web/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx
index 92858e09..02acba92 100644
--- a/karavan-web/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx
@@ -169,6 +169,7 @@ const INTEGRATION_PATTERNS = 'Integration Patterns';
 const stepConvertMap = new Map<string, string>([
     ["SetBodyDefinition", "SetHeaderDefinition"],
     ["SetHeaderDefinition", "SetBodyDefinition"],
+    ["FilterDefinition", "ChoiceDefinition"],
 ]);
 
 export class CamelUi {