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 2023/03/01 21:44:52 UTC

[camel-karavan] 01/02: Git progect pull for #647

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 eaaff7921dcd6ecb552af4b428821ed02052c933
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Tue Feb 28 15:11:46 2023 -0500

    Git progect pull for #647
---
 .../org/apache/camel/karavan/api/GitResource.java  | 18 +++++++++++++-
 .../apache/camel/karavan/service/GitService.java   | 12 +++++++++
 .../camel/karavan/service/ImportService.java       | 29 +++++++++++++++++++---
 3 files changed, 54 insertions(+), 5 deletions(-)

diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java
index 9bd7d21a..3e9de9c2 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java
@@ -16,24 +16,33 @@
  */
 package org.apache.camel.karavan.api;
 
+import org.apache.camel.karavan.model.GitRepo;
 import org.apache.camel.karavan.model.Project;
+import org.apache.camel.karavan.model.ProjectFile;
 import org.apache.camel.karavan.service.GitService;
+import org.apache.camel.karavan.service.ImportService;
 import org.jboss.logging.Logger;
 
 import javax.inject.Inject;
 import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import java.util.HashMap;
 
+
 @Path("/api/git")
 public class GitResource {
 
     @Inject
     GitService gitService;
 
+    @Inject
+    ImportService importService;
+
     private static final Logger LOGGER = Logger.getLogger(GitResource.class.getName());
 
 
@@ -41,7 +50,14 @@ public class GitResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
     public Project push(HashMap<String, String> params) throws Exception {
-        System.out.println(params);
         return gitService.commitAndPushProject(params.get("projectId"), params.get("message"));
     }
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Path("/{projectId}")
+    public Project pull(@PathParam("projectId") String projectId) throws Exception {
+        return importService.importProject(projectId);
+    }
 }
\ No newline at end of file
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
index 26f2c821..57765e4d 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
@@ -55,6 +55,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 @ApplicationScoped
 public class GitService {
@@ -130,6 +131,14 @@ public class GitService {
     }
 
     public List<GitRepo> readProjectsFromRepository() {
+        return readProjectsFromRepository(null);
+    }
+
+    public GitRepo readProjectFromRepository(String projectId) {
+        return readProjectsFromRepository(projectId).get(0);
+    }
+
+    private List<GitRepo> readProjectsFromRepository(String filter) {
         LOGGER.info("Read projects...");
         GitConfig gitConfig = getGitConfig();
         LOGGER.info("Read projects from repository " + gitConfig.getUri());
@@ -143,6 +152,9 @@ public class GitService {
             git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(), cred);
             checkout(git, false, null, null, gitConfig.getBranch());
             List<String> projects = readProjectsFromFolder(folder);
+            if (filter != null) {
+                projects = projects.stream().filter(s -> s.equals(filter)).collect(Collectors.toList());
+            }
             for (String project : projects) {
                 Map<String, String> filesRead = readProjectFilesFromFolder(folder, project);
                 List<GitRepoFile> files = new ArrayList<>(filesRead.size());
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/ImportService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/ImportService.java
index a56d40ae..3ebc09c4 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/ImportService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/ImportService.java
@@ -17,7 +17,6 @@
 package org.apache.camel.karavan.service;
 
 import io.quarkus.vertx.ConsumeEvent;
-import io.smallrye.mutiny.tuples.Tuple2;
 import org.apache.camel.karavan.model.GitRepo;
 import org.apache.camel.karavan.model.GitRepoFile;
 import org.apache.camel.karavan.model.Project;
@@ -30,7 +29,6 @@ import javax.inject.Inject;
 import java.time.Instant;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 
 @ApplicationScoped
 public class ImportService {
@@ -85,6 +83,29 @@ public class ImportService {
         addTemplatesProject("");
     }
 
+    public Project importProject(String projectId) {
+        LOGGER.info("Import project from Git " + projectId);
+        try {
+            GitRepo repo = gitService.readProjectFromRepository(projectId);
+            Project project;
+            String folderName = repo.getName();
+            String propertiesFile = getPropertiesFile(repo);
+            String projectName = getProjectName(propertiesFile);
+            String projectDescription = getProjectDescription(propertiesFile);
+            String runtime = getProjectRuntime(propertiesFile);
+            project = new Project(folderName, projectName, projectDescription, runtime, repo.getCommitId(), repo.getLastCommitTimestamp());
+            infinispanService.saveProject(project, true);
+            repo.getFiles().forEach(repoFile -> {
+                ProjectFile file = new ProjectFile(repoFile.getName(), repoFile.getBody(), folderName, repoFile.getLastCommitTimestamp());
+                infinispanService.saveProjectFile(file);
+            });
+            return project;
+        } catch (Exception e) {
+            LOGGER.error("Error during project import", e);
+            return null;
+        }
+    }
+
     void addKameletsProject(String data) {
         LOGGER.info("Add custom kamelets project if not exists");
         try {
@@ -92,7 +113,7 @@ public class ImportService {
             if (kamelets == null) {
                 kamelets = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "quarkus", "", Instant.now().toEpochMilli());
                 infinispanService.saveProject(kamelets, true);
-                gitService.commitAndPushProject(kamelets);
+                gitService.commitAndPushProject("kamelets", "Add custom kamelets");
             }
         } catch (Exception e) {
             LOGGER.error("Error during custom kamelets project creation", e);
@@ -112,7 +133,7 @@ public class ImportService {
                     ProjectFile file = new ProjectFile(name, value, Project.NAME_TEMPLATES, Instant.now().toEpochMilli());
                     infinispanService.saveProjectFile(file);
                 });
-                gitService.commitAndPushProject(templates);
+                gitService.commitAndPushProject("templates", "Add default templates");
             }
         } catch (Exception e) {
             LOGGER.error("Error during templates project creation", e);