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 d2651e8c Fix save file d2651e8c is described below commit d2651e8cf71ce289178a710163953449c49f902b Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Tue Jan 30 17:21:42 2024 -0500 Fix save file --- .../apache/camel/karavan/api/ProjectFileResource.java | 16 +++++++++++++++- .../camel/karavan/infinispan/InfinispanService.java | 7 ------- .../validation/project/ProjectFileCreateValidator.java | 3 +-- .../karavan-app/src/main/webui/src/api/KaravanApi.tsx | 4 ++-- .../karavan-app/src/main/webui/src/api/ProjectService.ts | 4 ++-- .../src/main/webui/src/project/DevModeToolbar.tsx | 12 ++++++------ .../src/main/webui/src/project/FileEditor.tsx | 4 ++-- .../src/main/webui/src/projects/ProjectsTableRow.tsx | 2 +- 8 files changed, 29 insertions(+), 23 deletions(-) diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java index bf00fa8a..77776f6c 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java @@ -22,6 +22,7 @@ import jakarta.ws.rs.core.MediaType; import org.apache.camel.karavan.code.CodeService; import org.apache.camel.karavan.infinispan.InfinispanService; import org.apache.camel.karavan.infinispan.model.ProjectFile; +import org.apache.camel.karavan.validation.project.ProjectFileCreateValidator; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; @@ -39,6 +40,9 @@ public class ProjectFileResource { @Inject CodeService codeService; + @Inject + ProjectFileCreateValidator projectFileCreateValidator; + @GET @Produces(MediaType.APPLICATION_JSON) @Path("/{projectId}") @@ -52,7 +56,17 @@ public class ProjectFileResource { @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - public ProjectFile save(ProjectFile file) throws Exception { + public ProjectFile create(ProjectFile file) throws Exception { + file.setLastUpdate(Instant.now().toEpochMilli()); + projectFileCreateValidator.validate(file).failOnError(); + infinispanService.saveProjectFile(file); + return file; + } + + @PUT + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + public ProjectFile update(ProjectFile file) throws Exception { file.setLastUpdate(Instant.now().toEpochMilli()); infinispanService.saveProjectFile(file); return file; diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java index 594dde7b..fca6c20e 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java @@ -17,10 +17,8 @@ package org.apache.camel.karavan.infinispan; import jakarta.enterprise.inject.Default; -import jakarta.inject.Inject; import jakarta.inject.Singleton; import org.apache.camel.karavan.infinispan.model.*; -import org.apache.camel.karavan.validation.project.ProjectFileCreateValidator; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.eclipse.microprofile.faulttolerance.Retry; import org.eclipse.microprofile.health.HealthCheck; @@ -65,9 +63,6 @@ public class InfinispanService implements HealthCheck { @ConfigProperty(name = "karavan.infinispan.password") String infinispanPassword; - @Inject - ProjectFileCreateValidator projectFileCreateValidator; - private RemoteCache<GroupedKey, Project> projects; private RemoteCache<GroupedKey, ProjectFile> files; private RemoteCache<GroupedKey, DeploymentStatus> deploymentStatuses; @@ -179,8 +174,6 @@ public class InfinispanService implements HealthCheck { } public void saveProjectFile(ProjectFile file) { - projectFileCreateValidator.validate(file).failOnError(); - files.put(GroupedKey.create(file.getProjectId(), DEFAULT_ENVIRONMENT, file.getName()), file); } diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/validation/project/ProjectFileCreateValidator.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/validation/project/ProjectFileCreateValidator.java index 686c3db1..f6f71265 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/validation/project/ProjectFileCreateValidator.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/validation/project/ProjectFileCreateValidator.java @@ -21,14 +21,13 @@ public class ProjectFileCreateValidator extends Validator<ProjectFile> { this.infinispanService = infinispanService; } - @Override protected void validationRules(ProjectFile value, List<ValidationError> errors) { simpleValidator.validate(value, errors); boolean projectFileExists = infinispanService.getProjectFile(value.getProjectId(), value.getName()) != null; - if(projectFileExists) { + if (projectFileExists) { errors.add(new ValidationError("name", "File with given name already exists")); } } diff --git a/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx b/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx index 840e0234..4cef25c0 100644 --- a/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx +++ b/karavan-web/karavan-app/src/main/webui/src/api/KaravanApi.tsx @@ -271,8 +271,8 @@ export class KaravanApi { return instance.post('/api/file', file); } - static async postProjectFile(file: ProjectFile, after: (res: AxiosResponse<any>) => void) { - instance.post('/api/file', file) + static async putProjectFile(file: ProjectFile, after: (res: AxiosResponse<any>) => void) { + instance.put('/api/file', file) .then(res => { after(res); }).catch(err => { diff --git a/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts b/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts index d0d03034..0876b506 100644 --- a/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts +++ b/karavan-web/karavan-app/src/main/webui/src/api/ProjectService.ts @@ -139,8 +139,8 @@ export class ProjectService { }) } - public static saveFile(file: ProjectFile, active: boolean) { - KaravanApi.postProjectFile(file, res => { + public static updateFile(file: ProjectFile, active: boolean) { + KaravanApi.putProjectFile(file, res => { if (res.status === 200) { const newFile = res.data; useFilesStore.getState().upsertFile(newFile); diff --git a/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx b/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx index af580439..e2b0bfe1 100644 --- a/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx +++ b/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx @@ -78,7 +78,7 @@ export function DevModeToolbar(props: Props) { } return (<Flex className="toolbar" direction={{default: "row"}} alignItems={{default: "alignItemsCenter"}}> - <FlexItem className="refresher"> + <FlexItem className="dev-action-button-place refresher"> {poll && <Spinner className="spinner" size="lg" aria-label="Refresh"/>} <Tooltip content={poll ? "Stop refresh" : "Refresh auto"} position={TooltipPosition.bottom}> <Button className="dev-action-button button" @@ -96,7 +96,7 @@ export function DevModeToolbar(props: Props) { {containerStatus?.containerId && <FlexItem> <Label icon={icon} color={color}> <Tooltip content={"Show log"} position={TooltipPosition.bottom}> - <Button className='dev-action-button labeled-button' variant="link" isDisabled={!isRunning} + <Button className='labeled-button' variant="link" isDisabled={!isRunning} onClick={e => setShowLog(true, 'container', containerStatus.containerName)}> {containerStatus.containerName} @@ -105,7 +105,7 @@ export function DevModeToolbar(props: Props) { <Badge isRead>{containerStatus.type}</Badge> </Label> </FlexItem>} - {!isRunning && <FlexItem> + {!isRunning && <FlexItem className="dev-action-button-place"> <Tooltip content="Verbose" position={TooltipPosition.bottom}> <Switch aria-label="verbose" id="verbose" @@ -114,7 +114,7 @@ export function DevModeToolbar(props: Props) { /> </Tooltip> </FlexItem>} - {!isRunning && <FlexItem> + {!isRunning && <FlexItem className="dev-action-button-place"> <Tooltip content="Run in developer mode" position={TooltipPosition.bottomEnd}> <Button className="dev-action-button" size="sm" isDisabled={(!(commands.length === 0) && !commands.includes('run')) || inTransit} @@ -128,7 +128,7 @@ export function DevModeToolbar(props: Props) { </Button> </Tooltip> </FlexItem>} - {isRunning && inDevMode && <FlexItem> + {isRunning && inDevMode && <FlexItem className="dev-action-button-place"> <Tooltip content="Reload" position={TooltipPosition.bottomEnd}> <Button className="project-button dev-action-button" size="sm" isDisabled={inTransit} @@ -138,7 +138,7 @@ export function DevModeToolbar(props: Props) { </Button> </Tooltip> </FlexItem>} - {inDevMode && <FlexItem> + {inDevMode && <FlexItem className="dev-action-button-place"> <Tooltip content="Delete container" position={TooltipPosition.bottomEnd}> <Button className="dev-action-button" size="sm" isDisabled={!commands.includes('delete') || inTransit} diff --git a/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx b/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx index b98285eb..7193243a 100644 --- a/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx +++ b/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx @@ -41,7 +41,7 @@ export function FileEditor (props: Props) { function save (name: string, code: string) { if (file) { file.code = code; - ProjectService.saveFile(file, true); + ProjectService.updateFile(file, true); } } @@ -61,7 +61,7 @@ export function FileEditor (props: Props) { tab={designerTab} onSave={(name, yaml) => save(name, yaml)} onSaveCustomCode={(name, code) => - ProjectService.saveFile(new ProjectFile(name + ".java", props.projectId, code, Date.now()), false)} + ProjectService.updateFile(new ProjectFile(name + ".java", props.projectId, code, Date.now()), false)} onGetCustomCode={onGetCustomCode} /> ) diff --git a/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx b/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx index 6e4da548..9e47d449 100644 --- a/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx +++ b/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx @@ -81,7 +81,7 @@ export function ProjectsTableRow (props: Props) { const active = value[1]; const color = active ? "green" : "grey" const style = active ? {fontWeight: "bold"} : {} - return <Label style={style} color={color} >{value[0]}</Label> + return <Label key={value.toString()} style={style} color={color} >{value[0]}</Label> })} </div> }