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 225f21f0038befa534e5384a752efd8c71073b68 Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Tue May 21 18:27:26 2024 -0400 Fix #1289 --- karavan-app/pom.xml | 6 -- .../camel/karavan/api/ProjectFileResource.java | 18 ------ .../org/apache/camel/karavan/code/CodeService.java | 13 ---- karavan-app/src/main/webui/src/api/KaravanApi.tsx | 47 -------------- .../webui/src/project/files/UploadFileModal.tsx | 73 +--------------------- 5 files changed, 3 insertions(+), 154 deletions(-) diff --git a/karavan-app/pom.xml b/karavan-app/pom.xml index c99407d3..5b79ef18 100644 --- a/karavan-app/pom.xml +++ b/karavan-app/pom.xml @@ -145,12 +145,6 @@ <version>${docker-java.version}</version> <optional>false</optional> </dependency> - <!-- Code generator --> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-openapi-rest-dsl-generator</artifactId> - <version>${camel.version}</version> - </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-container-image-docker</artifactId> diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java index 9de9c10b..7ce9320b 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java @@ -93,22 +93,4 @@ public class ProjectFileResource { URLDecoder.decode(filename, StandardCharsets.UTF_8.toString()) ); } - - @POST - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @Path("/openapi/{generateRest}/{generateRoutes}/{integrationName}") - public ProjectFile saveOpenapi(@HeaderParam("username") String username, - @PathParam("integrationName") String integrationName, - @PathParam("generateRest") boolean generateRest, - @PathParam("generateRoutes") boolean generateRoutes, ProjectFile file) throws Exception { - karavanCacheService.saveProjectFile(file); - if (generateRest) { - String yaml = codeService.generate(file.getName(), file.getCode(), generateRoutes); - ProjectFile integration = new ProjectFile(integrationName, yaml, file.getProjectId(), Instant.now().toEpochMilli()); - karavanCacheService.saveProjectFile(integration); - return file; - } - return file; - } } \ No newline at end of file diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java b/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java index b4290c01..93ea951a 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java @@ -18,8 +18,6 @@ package org.apache.camel.karavan.code; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import io.apicurio.datamodels.Library; -import io.apicurio.datamodels.models.openapi.OpenApiDocument; import io.quarkus.qute.Engine; import io.quarkus.qute.Template; import io.quarkus.qute.TemplateInstance; @@ -28,9 +26,6 @@ import io.vertx.core.Vertx; import io.vertx.core.buffer.Buffer; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import org.apache.camel.CamelContext; -import org.apache.camel.generator.openapi.RestDslGenerator; -import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.karavan.api.KameletResources; import org.apache.camel.karavan.model.DockerComposeService; import org.apache.camel.karavan.docker.DockerService; @@ -244,14 +239,6 @@ public class CodeService { return data.map(s -> s.split("=")[1]).orElse(null); } - public String generate(String fileName, String openApi, boolean generateRoutes) throws Exception { - final ObjectNode node = fileName.endsWith("json") ? readNodeFromJson(openApi) : readNodeFromYaml(openApi); - OpenApiDocument document = (OpenApiDocument) Library.readDocument(node); - try (CamelContext context = new DefaultCamelContext()) { - return RestDslGenerator.toYaml(document).generate(context, generateRoutes); - } - } - private ObjectNode readNodeFromJson(String openApi) throws Exception { final ObjectMapper mapper = new ObjectMapper(); return (ObjectNode) mapper.readTree(openApi); diff --git a/karavan-app/src/main/webui/src/api/KaravanApi.tsx b/karavan-app/src/main/webui/src/api/KaravanApi.tsx index 99e1625b..90b2f0ac 100644 --- a/karavan-app/src/main/webui/src/api/KaravanApi.tsx +++ b/karavan-app/src/main/webui/src/api/KaravanApi.tsx @@ -695,51 +695,4 @@ export class KaravanApi { console.log(err); }); } - - static async getSupportedComponents(after: (json: string) => void) { - instance.get('/ui/supported-component') - .then(res => { - if (res.status === 200) { - after(JSON.stringify(res.data)); - } - }).catch(err => { - console.log(err); - }); - } - - static async getOpenApis(after: (openapis: []) => void) { - instance.get('/ui/openapi') - .then(res => { - if (res.status === 200) { - after(res.data); - } - }).catch(err => { - console.log(err); - }); - } - - static async getOpenApi(name: string, after: (res: AxiosResponse<any>) => void) { - instance.get('/ui/openapi/' + name, {headers: {'Accept': 'text/plain'}}) - .then(res => { - after(res); - }).catch(err => { - after(err); - }); - } - - static async postOpenApi(file: ProjectFile, generateRest: boolean, generateRoutes: boolean, integrationName: string, after: (result: boolean, file: ProjectFile | any) => void) { - try { - const uri = `/ui/file/openapi/${generateRest}/${generateRoutes}/${integrationName}`; - instance.post(encodeURI(uri), file) - .then(res => { - if (res.status === 200) { - after(true, res.data); - } - }).catch(err => { - after(false, err); - }); - } catch (error: any) { - after(false, error); - } - } } diff --git a/karavan-app/src/main/webui/src/project/files/UploadFileModal.tsx b/karavan-app/src/main/webui/src/project/files/UploadFileModal.tsx index 4c4f3e15..63cd29c8 100644 --- a/karavan-app/src/main/webui/src/project/files/UploadFileModal.tsx +++ b/karavan-app/src/main/webui/src/project/files/UploadFileModal.tsx @@ -20,13 +20,10 @@ import { Modal, FormGroup, ModalVariant, - Switch, Form, FileUpload, - Radio, FormAlert, Alert, - TextInputGroupMain, Text, TextVariants, TextInputGroup } from '@patternfly/react-core'; import '../../designer/karavan.css'; import { ProjectFile} from "../../api/ProjectModels"; @@ -38,19 +35,13 @@ import {ProjectService} from "../../api/ProjectService"; import {SubmitHandler, useForm} from "react-hook-form"; import {KaravanApi} from "../../api/KaravanApi"; import {AxiosResponse} from "axios"; -import {useFormUtil} from "../../util/useFormUtil"; export function UploadFileModal() { - const integrationExtension = '.camel.yaml' const [project] = useProjectStore((s) => [s.project], shallow); const [operation, setFile] = useFileStore((s) => [s.operation, s.setFile], shallow); - const [type, setType] = useState<'integration' | 'openapi' | 'other'>('integration'); - const [integrationName, setIntegrationName] = useState(''); const [isLoading, setIsLoading] = useState(false); const [isRejected, setIsRejected] = useState(false); - const [generateRest, setGenerateRest] = useState(true); - const [generateRoutes, setGenerateRoutes] = useState(true); const [isReset, setReset] = React.useState(false); const [backendError, setBackendError] = React.useState<string>(); const formContext = useForm<ProjectFile>({mode: "all"}); @@ -67,7 +58,6 @@ export function UploadFileModal() { reset(new ProjectFile('', project.projectId, '', 0)); setBackendError(undefined); setReset(true); - setType('integration') }, [reset, operation]); React.useEffect(() => { @@ -76,11 +66,7 @@ export function UploadFileModal() { const onSubmit: SubmitHandler<ProjectFile> = (data) => { data.projectId = project.projectId; - if (type === "openapi") { - KaravanApi.postOpenApi(data, generateRest, generateRoutes, integrationName + integrationExtension, after) - } else { - KaravanApi.saveProjectFile(data, after) - } + KaravanApi.saveProjectFile(data, after) } function after (result: boolean, file: AxiosResponse<ProjectFile> | any) { @@ -115,12 +101,7 @@ export function UploadFileModal() { }; const fileNotUploaded = (getValues('name') === '' || getValues('code') === ''); - const accept : Accept = type === 'integration' - ? {'application/yaml': ['.yaml', '.yml']} - : ( type === 'openapi' - ? {'application/yaml': ['.yaml', '.yml'], 'application/json': ['.json']} - : {} - ); + const accept : Accept = {}; return ( <Modal title="Upload" @@ -130,7 +111,7 @@ export function UploadFileModal() { actions={[ <Button key="confirm" variant="primary" onClick={handleSubmit(onSubmit)} - isDisabled={Object.getOwnPropertyNames(errors).length > 0 || fileNotUploaded || (type === "openapi" && integrationName?.length < 3)} + isDisabled={Object.getOwnPropertyNames(errors).length > 0 || fileNotUploaded} > Save </Button>, @@ -138,23 +119,6 @@ export function UploadFileModal() { ]} > <Form> - <FormGroup fieldId="type"> - <Radio value="Integration" label="Integration yaml" name="Integration" id="Integration" isChecked={type === 'integration'} - onChange={(event, _) => { - setType(_ ? 'integration': 'openapi' ); - }} - />{' '} - <Radio value="OpenAPI" label="OpenAPI json/yaml" name="OpenAPI" id="OpenAPI" isChecked={type === 'openapi'} - onChange={(event, _) => { - setType( _ ? 'openapi' : 'integration' ); - }} - /> - <Radio value="Other" label="Other" name="Other" id="Other" isChecked={type === 'other'} - onChange={(event, _) => { - setType( _ ? 'other' : 'integration' ); - }} - /> - </FormGroup> <FormGroup fieldId="upload"> <FileUpload id="file-upload" @@ -180,37 +144,6 @@ export function UploadFileModal() { dropzoneProps={{accept: accept, onDropRejected: handleFileRejected}} /> </FormGroup> - {type === 'openapi' && <FormGroup fieldId="generateRest"> - <Switch - id="generate-rest" - label="Generate REST DSL" - labelOff="Do not generate REST DSL" - isChecked={generateRest} - onChange={(_, checked) => setGenerateRest(checked)} - /> - </FormGroup>} - {type === 'openapi' && generateRest && <FormGroup fieldId="generateRoutes"> - <Switch - id="generate-routes" - label="Generate Routes" - labelOff="Do not generate Routes" - isChecked={generateRoutes} - onChange={(_, checked) => setGenerateRoutes(checked)} - /> - </FormGroup>} - {type === 'openapi' && generateRest && - <FormGroup fieldId="integrationName" label="Integration name"> - <TextInputGroup className="text-field-with-suffix"> - <TextInputGroupMain type="text" id={"integrationName"} autoComplete="off" - value={integrationName} - required - onChange={(_, value) => setIntegrationName(value)} - > - </TextInputGroupMain> - <Text className='text-field-suffix' component={TextVariants.p}>{integrationExtension}</Text> - </TextInputGroup> - </FormGroup> - } {backendError && <FormAlert> <Alert variant="danger" title={backendError} aria-live="polite" isInline />