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>
                 }

Reply via email to