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 7006e27 Fix #543
7006e27 is described below
commit 7006e27c5449d5abd62521e0daa441c5b6ce73c0
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Fri Dec 2 13:14:40 2022 -0500
Fix #543
---
karavan-app/pom.xml | 2 +-
.../org/apache/camel/karavan/api/GitResource.java | 13 +----
.../apache/camel/karavan/service/GitService.java | 67 +++++++++-------------
.../camel/karavan/service/ImportService.java | 66 +++++++++++----------
.../camel/karavan/service/KaravanService.java | 1 -
.../src/main/resources/application.properties | 14 ++---
.../designer/route/property/DslPropertyField.tsx | 6 +-
.../src/designer/route/property/ModalEditor.tsx | 21 +++----
8 files changed, 80 insertions(+), 110 deletions(-)
diff --git a/karavan-app/pom.xml b/karavan-app/pom.xml
index 8f35089..2243d48 100644
--- a/karavan-app/pom.xml
+++ b/karavan-app/pom.xml
@@ -29,7 +29,7 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
- <quarkus.platform.version>2.13.3.Final</quarkus.platform.version>
+ <quarkus.platform.version>2.13.5.Final</quarkus.platform.version>
<surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
<version.camel>3.18.3</version.camel>
</properties>
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 70114fc..2f85a37 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
@@ -17,25 +17,19 @@
package org.apache.camel.karavan.api;
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.InfinispanService;
import org.jboss.logging.Logger;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
-import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
-import java.util.List;
@Path("/api/git")
public class GitResource {
- @Inject
- InfinispanService infinispanService;
@Inject
GitService gitService;
@@ -45,11 +39,6 @@ public class GitResource {
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Project push(Project project) throws Exception {
- Project p = infinispanService.getProject(project.getProjectId());
- List<ProjectFile> files =
infinispanService.getProjectFiles(project.getProjectId());
- String commitId = gitService.commitAndPushProject(p, files);
- p.setLastCommit(commitId);
- infinispanService.saveProject(p, false);
- return p;
+ return gitService.commitAndPushProject(project);
}
}
\ 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 6780c94..13498ef 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
@@ -45,6 +45,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Base64;
import java.util.HashMap;
@@ -56,34 +57,32 @@ import java.util.UUID;
@ApplicationScoped
public class GitService {
- private static final String PROJECTS = "projects";
- private static final String KAMELETS = "kamelets";
-
@Inject
Vertx vertx;
@Inject
KubernetesService kubernetesService;
+ @Inject
+ InfinispanService infinispanService;
+
private static final Logger LOGGER =
Logger.getLogger(GitService.class.getName());
void onStart(@Observes StartupEvent ev) {
- LOGGER.info("Git service for projects repo: " +
getGitConfig(PROJECTS).getUri());
- LOGGER.info("Git service for kamelets repo: " +
getGitConfig(KAMELETS).getUri());
+ LOGGER.info("Git service for repo: " + getGitConfig().getUri());
}
- private GitConfig getGitConfig(String name) {
- String propertiesPrefix = "karavan." + name + "-";
+ private GitConfig getGitConfig() {
+ String propertiesPrefix = "karavan.";
String branch = ConfigProvider.getConfig().getValue(propertiesPrefix +
"git-branch", String.class);
if (kubernetesService.inKubernetes()){
LOGGER.info("inKubernetes " + kubernetesService.getNamespace());
- String kubernetesPrefix = name + "-";
Secret secret = kubernetesService.getKaravanSecret();
- String uri = new
String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix +
"git-repository").getBytes(StandardCharsets.UTF_8)));
- String username = new
String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix +
"git-username").getBytes(StandardCharsets.UTF_8)));
- String password = new
String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix +
"git-password").getBytes(StandardCharsets.UTF_8)));
- if (secret.getData().containsKey(kubernetesPrefix + "git-branch")){
- branch = new
String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix +
"git-branch").getBytes(StandardCharsets.UTF_8)));
+ String uri = new
String(Base64.getDecoder().decode(secret.getData().get("git-repository").getBytes(StandardCharsets.UTF_8)));
+ String username = new
String(Base64.getDecoder().decode(secret.getData().get("git-username").getBytes(StandardCharsets.UTF_8)));
+ String password = new
String(Base64.getDecoder().decode(secret.getData().get("git-password").getBytes(StandardCharsets.UTF_8)));
+ if (secret.getData().containsKey("git-branch")){
+ branch = new
String(Base64.getDecoder().decode(secret.getData().get("git-branch").getBytes(StandardCharsets.UTF_8)));
}
return new GitConfig(uri, username, password, branch);
} else {
@@ -94,13 +93,22 @@ public class GitService {
}
}
+ public Project commitAndPushProject(Project project) throws Exception {
+ Project p = infinispanService.getProject(project.getProjectId());
+ List<ProjectFile> files =
infinispanService.getProjectFiles(project.getProjectId());
+ String commitId = commitAndPushProject(p, files);
+ p.setLastCommit(commitId);
+ infinispanService.saveProject(p, false);
+ return p;
+ }
+
public String commitAndPushProject(Project project, List<ProjectFile>
files) throws GitAPIException, IOException, URISyntaxException {
LOGGER.info("Commit and push project " + project.getProjectId());
- GitConfig gitConfig = getGitConfig(PROJECTS);
+ GitConfig gitConfig = getGitConfig();
CredentialsProvider cred = new
UsernamePasswordCredentialsProvider(gitConfig.getUsername(),
gitConfig.getPassword());
String uuid = UUID.randomUUID().toString();
String folder = vertx.fileSystem().createTempDirectoryBlocking(uuid);
- LOGGER.infof("Temp folder created: {}", folder);
+ LOGGER.info("Temp folder created " + folder);
Git git = null;
try {
git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(),
cred);
@@ -113,33 +121,12 @@ public class GitService {
}
writeProjectToFolder(folder, project, files);
addDeletedFilesToIndex(git, folder, project, files);
- return commitAddedAndPush(git, gitConfig.getBranch(),
cred).getId().getName();
- }
-
- public List<Tuple2<String, String>> readKameletsFromRepository() {
- LOGGER.info("Read kamelets...");
- GitConfig gitConfig = getGitConfig(KAMELETS);
- LOGGER.info("Read kamelets from repository " + gitConfig.getUri());
- CredentialsProvider cred = new
UsernamePasswordCredentialsProvider(gitConfig.getUsername(),
gitConfig.getPassword());
- String uuid = UUID.randomUUID().toString();
- String folder = vertx.fileSystem().createTempDirectoryBlocking(uuid);
- LOGGER.infof("Temp folder created: %s", folder);
- try {
- Git git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(),
cred);
- checkout(git, false, null, null, gitConfig.getBranch());
- return readKameletsFromFolder(folder);
- } catch (RefNotFoundException e) {
- LOGGER.error("New repository");
- return List.of();
- } catch (Exception e) {
- LOGGER.error("Error", e);
- return List.of();
- }
+ return commitAddedAndPush(git, gitConfig.getBranch(), cred,
project.getProjectId()).getId().getName();
}
public List<Tuple2<String, Map<String, String>>>
readProjectsFromRepository() {
LOGGER.info("Read projects...");
- GitConfig gitConfig = getGitConfig(PROJECTS);
+ GitConfig gitConfig = getGitConfig();
LOGGER.info("Read projects from repository " + gitConfig.getUri());
CredentialsProvider cred = new
UsernamePasswordCredentialsProvider(gitConfig.getUsername(),
gitConfig.getPassword());
String uuid = UUID.randomUUID().toString();
@@ -243,10 +230,10 @@ public class GitService {
});
}
- public RevCommit commitAddedAndPush(Git git, String branch,
CredentialsProvider cred) throws GitAPIException, IOException,
URISyntaxException {
+ public RevCommit commitAddedAndPush(Git git, String branch,
CredentialsProvider cred, String message) throws GitAPIException, IOException,
URISyntaxException {
LOGGER.info("Commit and push changes");
LOGGER.info("Git add: " + git.add().addFilepattern(".").call());
- RevCommit commit =
git.commit().setMessage(LocalDate.now().toString()).call();
+ RevCommit commit = git.commit().setMessage(LocalDateTime.now() + ": "
+ message).call();
LOGGER.info("Git commit: " + commit);
Iterable<PushResult> result =
git.push().add(branch).setRemote("origin").setCredentialsProvider(cred).call();
LOGGER.info("Git push: " + result);
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 e59d423..b8f743b 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
@@ -29,8 +29,6 @@ import java.time.Instant;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
@ApplicationScoped
public class ImportService {
@@ -38,7 +36,6 @@ public class ImportService {
private static final Logger LOGGER =
Logger.getLogger(ImportService.class.getName());
public static final String IMPORT_TEMPLATES = "import-templates";
public static final String IMPORT_PROJECTS = "import-projects";
- public static final String IMPORT_KAMELETS = "import-kamelets";
@Inject
@@ -59,12 +56,19 @@ public class ImportService {
try {
List<Tuple2<String, Map<String, String>>> repo =
gitService.readProjectsFromRepository();
repo.forEach(p -> {
+ Project project;
String folderName = p.getItem1();
- String propertiesFile = getPropertiesFile(p);
- String projectName = getProjectName(propertiesFile);
- String projectDescription =
getProjectDescription(propertiesFile);
- String runtime = getProjectRuntime(propertiesFile);
- Project project = new Project(folderName, projectName,
projectDescription, runtime, "");
+ if (folderName.equals(Project.NAME_TEMPLATES)) {
+ project = new Project(Project.NAME_TEMPLATES, "Templates",
"Templates", "quarkus", "");
+ } else if (folderName.equals(Project.NAME_KAMELETS)){
+ project = new Project(Project.NAME_KAMELETS, "Custom
Kamelets", "Custom Kamelets", "quarkus", "");
+ } else {
+ String propertiesFile = getPropertiesFile(p);
+ String projectName = getProjectName(propertiesFile);
+ String projectDescription =
getProjectDescription(propertiesFile);
+ String runtime = getProjectRuntime(propertiesFile);
+ project = new Project(folderName, projectName,
projectDescription, runtime, "");
+ }
infinispanService.saveProject(project, true);
p.getItem2().forEach((key, value) -> {
@@ -72,15 +76,30 @@ public class ImportService {
infinispanService.saveProjectFile(file);
});
});
+ addKameletsProject("");
} catch (Exception e) {
LOGGER.error("Error during project import", e);
}
- addTemplates("");
+ addTemplatesProject("");
+ }
+
+ void addKameletsProject(String data) {
+ LOGGER.info("Add custom kamelets project if not exists");
+ try {
+ Project kamelets =
infinispanService.getProject(Project.NAME_KAMELETS);
+ if (kamelets == null) {
+ kamelets = new Project(Project.NAME_KAMELETS, "Custom
Kamelets", "Custom Kamelets", "quarkus", "");
+ infinispanService.saveProject(kamelets, true);
+ gitService.commitAndPushProject(kamelets);
+ }
+ } catch (Exception e) {
+ LOGGER.error("Error during custom kamelets project creation", e);
+ }
}
@ConsumeEvent(value = IMPORT_TEMPLATES, blocking = true)
- void addTemplates(String data) {
- LOGGER.info("Add templates if not exists");
+ void addTemplatesProject(String data) {
+ LOGGER.info("Add templates project if not exists");
try {
Project templates =
infinispanService.getProject(Project.NAME_TEMPLATES);
if (templates == null) {
@@ -91,31 +110,10 @@ public class ImportService {
ProjectFile file = new ProjectFile(name, value,
Project.NAME_TEMPLATES, Instant.now().toEpochMilli());
infinispanService.saveProjectFile(file);
});
+ gitService.commitAndPushProject(templates);
}
} catch (Exception e) {
- LOGGER.error("Error during project import", e);
- }
- }
-
- @ConsumeEvent(value = IMPORT_KAMELETS, blocking = true)
- void loadCustomKamelets(String data) {
- LOGGER.info("Load custom Kamelets from Git");
- try {
- Project kamelets =
infinispanService.getProject(Project.NAME_KAMELETS);
- if (kamelets == null) {
- kamelets = new Project(Project.NAME_KAMELETS, "Custom
Kamelets", "Custom Kamelets", "quarkus", "");
- infinispanService.saveProject(kamelets, true);
-
- List<Tuple2<String, String>> repo =
gitService.readKameletsFromRepository();
- repo.forEach(p -> {
- String name = p.getItem1();
- String yaml = p.getItem2();
- ProjectFile file = new ProjectFile(name, yaml,
Project.NAME_KAMELETS, Instant.now().toEpochMilli());
- infinispanService.saveProjectFile(file);
- });
- }
- } catch (Exception e) {
- LOGGER.error("Error during project import", e);
+ LOGGER.error("Error during templates project creation", e);
}
}
diff --git
a/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
b/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
index 932d22b..f0b0f85 100644
---
a/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
+++
b/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
@@ -70,7 +70,6 @@ public class KaravanService {
} else {
bus.publish(ImportService.IMPORT_TEMPLATES, "");
}
- bus.publish(ImportService.IMPORT_KAMELETS, "");
}
void startInformers() {
diff --git a/karavan-app/src/main/resources/application.properties
b/karavan-app/src/main/resources/application.properties
index e38d52d..2c8c7c4 100644
--- a/karavan-app/src/main/resources/application.properties
+++ b/karavan-app/src/main/resources/application.properties
@@ -5,16 +5,10 @@ karavan.runtimes=quarkus,spring-boot
karavan.camel-status-threshold=2000
# Git repository Configuration
-karavan.projects-git-repository=${GIT_REPOSITORY}
-karavan.projects-git-username=${GIT_USERNAME}
-karavan.projects-git-password=${GIT_TOKEN}
-karavan.projects-git-branch=main
-
-# Git repository Configuration for custom Kamelets
-karavan.kamelets-git-repository=${KAMELETS_GIT_REPOSITORY}
-karavan.kamelets-git-username=${GIT_USERNAME}
-karavan.kamelets-git-password=${GIT_TOKEN}
-karavan.kamelets-git-branch=main
+karavan.git-repository=${GIT_REPOSITORY}
+karavan.git-username=${GIT_USERNAME}
+karavan.git-password=${GIT_TOKEN}
+karavan.git-branch=main
# Infinispan Server address
#quarkus.infinispan-client.server-list=localhost:12345
diff --git
a/karavan-app/src/main/webui/src/designer/route/property/DslPropertyField.tsx
b/karavan-app/src/main/webui/src/designer/route/property/DslPropertyField.tsx
index c958bb6..f553cfe 100644
---
a/karavan-app/src/main/webui/src/designer/route/property/DslPropertyField.tsx
+++
b/karavan-app/src/main/webui/src/designer/route/property/DslPropertyField.tsx
@@ -274,11 +274,12 @@ export class DslPropertyField extends
React.Component<Props, State> {
</Button>
</Tooltip>
<ModalEditor property={property}
- value={customCode}
+ customCode={customCode}
showEditor={showEditor}
dark={dark}
dslLanguage={dslLanguage}
title="Java Class"
+ onClose={() => this.setState({showEditor: false})}
onSave={(fieldId, value1) => {
this.propertyChanged(fieldId, value);
KaravanInstance.getProps().onSaveCustomCode?.call(this, value, value1);
@@ -306,11 +307,12 @@ export class DslPropertyField extends
React.Component<Props, State> {
</Button>
</Tooltip>
<ModalEditor property={property}
- value={value}
+ customCode={value}
showEditor={showEditor}
dark={dark}
dslLanguage={dslLanguage}
title={`Expression (${dslLanguage?.[0]})`}
+ onClose={() => this.setState({showEditor: false})}
onSave={(fieldId, value1) => {
this.propertyChanged(fieldId, value1);
this.setState({showEditor: false});
diff --git
a/karavan-app/src/main/webui/src/designer/route/property/ModalEditor.tsx
b/karavan-app/src/main/webui/src/designer/route/property/ModalEditor.tsx
index a12242a..0d5568e 100644
--- a/karavan-app/src/main/webui/src/designer/route/property/ModalEditor.tsx
+++ b/karavan-app/src/main/webui/src/designer/route/property/ModalEditor.tsx
@@ -27,8 +27,9 @@ import Editor from "@monaco-editor/react";
interface Props {
property: PropertyMeta,
- value: any,
- onSave?: (fieldId: string, value: string | number | boolean | any) => void,
+ customCode: any,
+ onSave: (fieldId: string, value: string | number | boolean | any) => void,
+ onClose: () => void,
title: string,
dslLanguage?: [string, string, string],
dark: boolean
@@ -36,32 +37,32 @@ interface Props {
}
interface State {
- value: any,
+ customCode: any,
}
export class ModalEditor extends React.Component<Props, State> {
public state: State = {
- value: this.props.value,
+ customCode: this.props.customCode,
}
componentDidUpdate = (prevProps: Readonly<Props>, prevState:
Readonly<State>, snapshot?: any) => {
if (prevProps.showEditor !== this.props.showEditor) {
- this.setState({value: this.props.value})
+ this.setState({customCode: this.props.customCode})
}
}
close(){
- this.props.onSave?.call(this, this.props.property.name,
this.props.value);
+ this.props.onClose?.call(this);
}
closeAndSave(){
- this.props.onSave?.call(this, this.props.property.name,
this.state.value);
+ this.props.onSave?.call(this, this.props.property.name,
this.state.customCode);
}
render() {
const {dark, dslLanguage, title, showEditor} = this.props;
- const {value} = this.state;
+ const {customCode} = this.state;
return (
<Modal
aria-label={"expression"}
@@ -88,9 +89,9 @@ export class ModalEditor extends React.Component<Props,
State> {
language={'java'}
theme={dark ? 'vs-dark' : 'light'}
options={{lineNumbers: "off", folding: false,
lineNumbersMinChars: 10, showUnused: false, fontSize: 12, minimap: {enabled:
false}}}
- value={value?.toString()}
+ value={customCode?.toString()}
className={'code-editor'}
- onChange={(value: any, ev: any) => this.setState({value:
value})}
+ onChange={(value: any, ev: any) =>
this.setState({customCode: value})}
/>
</Modal>
)