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