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/10/06 05:26:57 UTC

[camel-karavan] 02/04: Upload kamalets and component as batch

This is an automated email from the ASF dual-hosted git repository.

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git

commit 76e9ffb722174d8468130cc12ca77064a8a6850c
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Wed Oct 5 22:34:37 2022 -0400

    Upload kamalets and component as batch
---
 karavan-app/pom.xml                                |  1 -
 .../camel/karavan/api/ComponentResources.java      | 13 +------
 .../apache/camel/karavan/api/KameletResources.java | 44 ++++++----------------
 karavan-app/src/main/webapp/src/Main.tsx           | 17 ++++++---
 karavan-app/src/main/webapp/src/api/KaravanApi.tsx | 28 ++------------
 .../main/webapp/src/components/ComponentsPage.tsx  | 18 +--------
 .../src/main/webapp/src/kamelets/KameletsPage.tsx  | 31 +++------------
 .../generator/CamelComponentsGenerator.java        |  2 +-
 .../camel/karavan/generator/KameletGenerator.java  | 30 +++++++++------
 karavan-vscode/kamelets/kamelets.yaml              |  1 -
 karavan-vscode/src/utils.ts                        |  3 +-
 11 files changed, 55 insertions(+), 133 deletions(-)

diff --git a/karavan-app/pom.xml b/karavan-app/pom.xml
index 9c8aab1..2c20131 100644
--- a/karavan-app/pom.xml
+++ b/karavan-app/pom.xml
@@ -31,7 +31,6 @@
         <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
         <quarkus.platform.version>2.11.2.Final</quarkus.platform.version>
         <surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
-        <version.camel-kamelet>0.9.0</version.camel-kamelet>
         <version.camel>3.18.2</version.camel>
     </properties>
     <dependencyManagement>
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/ComponentResources.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/ComponentResources.java
index f1d1ea5..25b9309 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/ComponentResources.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/ComponentResources.java
@@ -32,17 +32,8 @@ public class ComponentResources {
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public List<String> getList() {
-        String list = getResourceFile("components.properties");
-        return List.of(list.split(System.getProperty("line.separator"))).stream()
-                .map(s -> s + ".json").collect(Collectors.toList());
-    }
-
-    @GET
-    @Produces(MediaType.APPLICATION_JSON)
-    @Path("/{name}")
-    public String getJson(@PathParam("name") String name) {
-        return getResourceFile(name);
+    public String getJson() {
+        return getResourceFile("components.json");
     }
 
     private String getResourceFile(String path) {
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java
index 840df37..1803610 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java
@@ -16,24 +16,17 @@
  */
 package org.apache.camel.karavan.api;
 
-import io.vertx.core.Vertx;
 import org.apache.camel.karavan.service.InfinispanService;
-import org.eclipse.microprofile.config.inject.ConfigProperty;
 
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import java.io.BufferedReader;
-import java.io.File;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.util.List;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Path("/api/kamelet")
@@ -42,21 +35,18 @@ public class KameletResources {
     @Inject
     InfinispanService infinispanService;
 
-    @Inject
-    Vertx vertx;
-
     @GET
-    @Produces(MediaType.APPLICATION_JSON)
-    public List<String> getList() throws Exception {
-        List<String> kameletList = getBuildInKameletsList();
-        kameletList.addAll(infinispanService.getKameletNames());
-        return kameletList;
-    }
-
-    private List<String> getBuildInKameletsList() {
-        String list = getResourceFile("kamelets.properties");
-        return List.of(list.split(System.getProperty("line.separator"))).stream()
-                .map(s -> s + ".kamelet.yaml").collect(Collectors.toList());
+    @Produces(MediaType.TEXT_PLAIN)
+    public String getCustomYamls() {
+        StringBuilder kamelets = new StringBuilder(getResourceFile("kamelets.yaml"));
+        List<String> customKameletNames = infinispanService.getKameletNames();
+        if (customKameletNames.size() > 0) {
+            kamelets.append("\n---\n");
+            kamelets.append(infinispanService.getKameletNames().stream()
+                    .map(name -> infinispanService.getKameletYaml(name))
+                    .collect(Collectors.joining("\n---\n")));
+        }
+        return kamelets.toString();
     }
 
     private String getResourceFile(String path) {
@@ -69,16 +59,4 @@ public class KameletResources {
             return null;
         }
     }
-
-
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    @Path("/{name}")
-    public String getYaml(@PathParam("name") String name) {
-        if (infinispanService.getKameletNames().contains(name)) {
-            return infinispanService.getKameletYaml(name);
-        } else {
-            return getResourceFile(name);
-        }
-    }
 }
diff --git a/karavan-app/src/main/webapp/src/Main.tsx b/karavan-app/src/main/webapp/src/Main.tsx
index 1b35acb..b056697 100644
--- a/karavan-app/src/main/webapp/src/Main.tsx
+++ b/karavan-app/src/main/webapp/src/Main.tsx
@@ -126,12 +126,17 @@ export class Main extends React.Component<Props, State> {
         KaravanApi.getConfiguration((config: any) => {
             this.setState({ config: config })
         });
-        KaravanApi.getKameletNames(names => names.forEach(name => {
-            KaravanApi.getKamelet(name, yaml => KameletApi.saveKamelet(yaml))
-        }));
-        KaravanApi.getComponentNames(names => names.forEach(name => {
-            KaravanApi.getComponent(name, json => ComponentApi.saveComponent(json))
-        }));
+        KaravanApi.getKamelets(yamls => {
+            const kamelets: string[] = [];
+            yamls.split("\n---\n").map(c => c.trim()).forEach(z => kamelets.push(z));
+            KameletApi.saveKamelets(kamelets, true);
+        })
+        KaravanApi.getComponents(code => {
+            const components: [] = JSON.parse(code);
+            const jsons: string[] = [];
+            components.forEach(c => jsons.push(JSON.stringify(c)));
+            ComponentApi.saveComponents(jsons, true);
+        })
     }
 
     deleteErrorMessage = (id: string) => {
diff --git a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
index 31d976b..0d400b2 100644
--- a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
@@ -351,8 +351,8 @@ export class KaravanApi {
     }
 
 
-    static async getKameletNames(after: (names: []) => void) {
-        instance.get('/api/kamelet')
+    static async getKamelets(after: (yaml: string) => void) {
+        instance.get('/api/kamelet', {headers: {'Accept': 'text/plain'}})
             .then(res => {
                 if (res.status === 200) {
                     after(res.data);
@@ -362,30 +362,8 @@ export class KaravanApi {
         });
     }
 
-    static async getKamelet(name: string, after: (yaml: string) => void) {
-        instance.get('/api/kamelet/' + name, {headers: {'Accept': 'text/plain'}})
-            .then(res => {
-                if (res.status === 200) {
-                    after(res.data);
-                }
-            }).catch(err => {
-            console.log(err);
-        });
-    }
-
-    static async getComponentNames(after: (names: []) => void) {
+    static async getComponents(after: (json: string) => void) {
         instance.get('/api/component')
-            .then(res => {
-                if (res.status === 200) {
-                    after(res.data);
-                }
-            }).catch(err => {
-            console.log(err);
-        });
-    }
-
-    static async getComponent(name: string, after: (json: string) => void) {
-        instance.get('/api/component/' + name)
             .then(res => {
                 if (res.status === 200) {
                     after(JSON.stringify(res.data));
diff --git a/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx b/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx
index 696f0ba..182ce03 100644
--- a/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx
+++ b/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx
@@ -21,16 +21,13 @@ import {
     Gallery,
     ToolbarItem,
     TextInput,
-    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge, Button
+    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
 import {ComponentCard} from "./ComponentCard";
 import {ComponentModal} from "./ComponentModal";
 import {Component} from "karavan-core/lib/model/ComponentModels";
 import {ComponentApi} from "karavan-core/lib/api/ComponentApi";
-import RefreshIcon from "@patternfly/react-icons/dist/esm/icons/sync-alt-icon";
-import {KaravanApi} from "../api/KaravanApi";
-import {Components} from "karavan-core/lib/api/ComponentApi";
 
 interface Props {
     dark: boolean
@@ -89,19 +86,6 @@ export class ComponentsPage extends React.Component<Props, State> {
                         <FlexItem>
                             <Toolbar id="toolbar-group-types">
                                 <ToolbarContent>
-                                    <ToolbarItem>
-                                        <Button icon={<RefreshIcon/>} variant="link"
-                                                onClick={e => {
-                                                    KaravanApi.getComponentNames(names => names.forEach(name => {
-                                                        KaravanApi.getComponent(name, json => {
-                                                            ComponentApi.saveComponent(json);
-                                                            if (Components.length === names.length){
-                                                                this.setState({components: ComponentApi.getComponents()});
-                                                            }
-                                                        })
-                                                    }));
-                                                }}/>
-                                    </ToolbarItem>
                                     <ToolbarItem>
                                         <TextInput className="text-field" type="search" id="search" name="search"
                                                    value={this.state.filter}
diff --git a/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx b/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx
index 2fb8095..9176532 100644
--- a/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx
+++ b/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx
@@ -21,16 +21,13 @@ import {
     Gallery,
     ToolbarItem,
     TextInput,
-    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge, Button
+    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
 import {KameletCard} from "./KameletCard";
 import {KameletModel} from "karavan-core/lib/model/KameletModels";
 import {KameletApi} from "karavan-core/lib/api/KameletApi";
 import {KameletModal} from "./KameletModal";
-import {KaravanApi} from "../api/KaravanApi";
-import RefreshIcon from "@patternfly/react-icons/dist/esm/icons/sync-alt-icon";
-import {Kamelets} from "karavan-core/lib/api/KameletApi";
 
 interface Props {
     dark: boolean
@@ -59,11 +56,11 @@ export class KameletsPage extends React.Component<Props, State> {
         this.setState({kamelets: KameletApi.getKamelets()})
     }
 
-    select = (k: KameletModel) => {
+    select = (k: KameletModel)=> {
         this.setState({kamelet: k, isModalOpen: true})
     }
 
-    search(filter: string) {
+    search(filter: string){
         this.setState({
             filter: filter,
             isModalOpen: false,
@@ -73,12 +70,10 @@ export class KameletsPage extends React.Component<Props, State> {
 
     render() {
         return (
-            <PageSection variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}
-                         padding={{default: 'noPadding'}} className="kamelet-section">
+            <PageSection variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light} padding={{ default: 'noPadding' }} className="kamelet-section">
                 <KameletModal key={this.state.kamelet?.metadata.name + this.state.isModalOpen.toString()}
                               isOpen={this.state.isModalOpen} kamelet={this.state.kamelet}/>
-                <PageSection className="tools-section"
-                             variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}>
+                <PageSection  className="tools-section" variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}>
                     <Flex className="tools" justifyContent={{default: 'justifyContentSpaceBetween'}}>
                         <FlexItem>
                             <TextContent className="header">
@@ -89,19 +84,6 @@ export class KameletsPage extends React.Component<Props, State> {
                         <FlexItem>
                             <Toolbar id="toolbar-group-types">
                                 <ToolbarContent>
-                                    <ToolbarItem>
-                                        <Button icon={<RefreshIcon/>} variant="link"
-                                                onClick={e => {
-                                                    KaravanApi.getKameletNames(names => names.forEach(name => {
-                                                        KaravanApi.getKamelet(name, yaml => {
-                                                            KameletApi.saveKamelet(yaml);
-                                                            if (Kamelets.length === names.length){
-                                                                this.setState({kamelets: KameletApi.getKamelets()});
-                                                            }
-                                                        })
-                                                    }));
-                                                }}/>
-                                    </ToolbarItem>
                                     <ToolbarItem>
                                         <TextInput className="text-field" type="search" id="search" name="search"
                                                    value={this.state.filter}
@@ -114,8 +96,7 @@ export class KameletsPage extends React.Component<Props, State> {
                         </FlexItem>
                     </Flex>
                 </PageSection>
-                <PageSection isFilled className="kamelets-page"
-                             variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}>
+                <PageSection isFilled className="kamelets-page" variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}>
                     <Gallery hasGutter>
                         {this.state.kamelets.map(k => (
                             <KameletCard key={k.metadata.name} kamelet={k} onClickCard={this.select}/>
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelComponentsGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelComponentsGenerator.java
index 0a8f321..865e7f5 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelComponentsGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelComponentsGenerator.java
@@ -41,7 +41,7 @@ public final class CamelComponentsGenerator extends AbstractGenerator {
 
     public static void generate() throws Exception {
         CamelComponentsGenerator g = new CamelComponentsGenerator();
-        g.createCreateComponents("karavan-app/src/main/resources/components", false);
+        g.createCreateComponents("karavan-app/src/main/resources/components", true);
         g.createCreateComponents("karavan-designer/public/components", false);
         g.createCreateComponents("karavan-vscode/components", true);
     }
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KameletGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KameletGenerator.java
index 410617d..5c9a408 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KameletGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KameletGenerator.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.karavan.generator;
 
+import io.fabric8.camelk.v1alpha1.Kamelet;
 import io.vertx.core.Vertx;
 import org.apache.camel.kamelets.catalog.KameletsCatalog;
 import org.jboss.logging.Logger;
@@ -26,10 +27,15 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.lang.reflect.Array;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 public class KameletGenerator extends AbstractGenerator {
@@ -39,7 +45,7 @@ public class KameletGenerator extends AbstractGenerator {
 
     public static void generate() throws Exception {
         KameletGenerator g = new KameletGenerator();
-        g.createKamelets("karavan-app/src/main/resources/kamelets", false);
+        g.createKamelets("karavan-app/src/main/resources/kamelets", true);
         g.createKamelets("karavan-designer/public/kamelets", false);
         g.createKamelets("karavan-vscode/kamelets", true);
     }
@@ -49,16 +55,18 @@ public class KameletGenerator extends AbstractGenerator {
         KameletsCatalog catalog = new KameletsCatalog();
         StringBuilder list = new StringBuilder();
         StringBuilder sources = new StringBuilder();
-        catalog.getKamelets().entrySet().stream()
-                .map(k -> k.getValue().getMetadata().getName())
-                .forEach(name -> {
-                    list.append(name).append("\n");
-                    if (singleFile) {
-                        sources.append(readKamelet(name)).append("\n---\n");
-                    } else {
-                        saveKamelet(folder, name);
-                    }
-                });
+
+        List<Map.Entry<String, Kamelet>> kamelets = new ArrayList<>(catalog.getKamelets().entrySet());
+        for (int i = 0; i < kamelets.size() ; i++) {
+            Map.Entry<String, Kamelet> k = kamelets.get(i);
+            String name = k.getValue().getMetadata().getName();
+            list.append(name).append("\n");
+            if (singleFile) {
+                sources.append(readKamelet(name)).append(i != kamelets.size() - 1 ? "\n---\n": "\n");
+            } else {
+                saveKamelet(folder, name);
+            }
+        }
         saveFile(folder, "kamelets.properties", list.toString());
         if (singleFile) {
             saveFile(folder, "kamelets.yaml", sources.toString());
diff --git a/karavan-vscode/kamelets/kamelets.yaml b/karavan-vscode/kamelets/kamelets.yaml
index bc4b9ef..6c31ca1 100644
--- a/karavan-vscode/kamelets/kamelets.yaml
+++ b/karavan-vscode/kamelets/kamelets.yaml
@@ -16253,4 +16253,3 @@ spec:
       - set-header:
           name: "Content-Type"
           constant: "application/json"
----
diff --git a/karavan-vscode/src/utils.ts b/karavan-vscode/src/utils.ts
index 8ccdbb6..3d3279d 100644
--- a/karavan-vscode/src/utils.ts
+++ b/karavan-vscode/src/utils.ts
@@ -60,8 +60,7 @@ async function readBuildInKamelets(context: ExtensionContext) {
     const result: string[] = [];
     const file = await readFile(kameletsPath);
     const code = Buffer.from(file).toString('utf8');
-    code.split("\n---\n").map(c => c.trim())
-        .filter(x => x !== undefined && x.length > 100).forEach(z => result.push(z));
+    code.split("\n---\n").map(c => c.trim()).forEach(z => result.push(z));
     return result;
 }