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 <marat.gubaidul...@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; }