You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2023/03/07 14:11:37 UTC
[camel] branch camel-3.x updated: CAMEL-19120: export configurable template
This is an automated email from the ASF dual-hosted git repository.
fmariani pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.x by this push:
new 4a8b4a93450 CAMEL-19120: export configurable template
4a8b4a93450 is described below
commit 4a8b4a9345051793874bfb40f96850701a3e4475
Author: Croway <fe...@gmail.com>
AuthorDate: Mon Mar 6 16:35:40 2023 +0100
CAMEL-19120: export configurable template
---
.../org/apache/camel/catalog/CamelCatalog.java | 10 +++++++
.../apache/camel/catalog/DefaultCamelCatalog.java | 6 ++++
.../org/apache/camel/catalog/CamelCatalogTest.java | 18 ++++++++++++
.../resources/org/apache/camel/catalog/bar/foo.txt | 1 +
.../camel/dsl/jbang/core/commands/Export.java | 1 +
.../dsl/jbang/core/commands/ExportBaseCommand.java | 4 +++
.../dsl/jbang/core/commands/ExportSpringBoot.java | 34 +++++++++++++++++++---
.../apache/camel/dsl/jbang/core/commands/Run.java | 1 -
.../camel/dsl/jbang/core/common/CatalogLoader.java | 14 +++++++--
9 files changed, 82 insertions(+), 7 deletions(-)
diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index ff9bcf1d13c..6938c48e009 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.catalog;
+import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
@@ -570,4 +571,13 @@ public interface CamelCatalog {
*/
ArtifactModel<?> modelFromMavenGAV(String groupId, String artifactId, String version);
+ /**
+ * Load resource from catalog classpath
+ *
+ * @param kind The resource kind, ex. camel-jbang
+ * @param name The resource name
+ * @return An input stream for reading the resource; null if the resource could not be found
+ */
+ InputStream loadResource(String kind, String name);
+
}
diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index 8791b097985..775294144f3 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -63,6 +63,7 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa
private static final String ARCHETYPES_CATALOG = "org/apache/camel/catalog/archetypes/archetype-catalog.xml";
private static final String SCHEMAS_XML = "org/apache/camel/catalog/schemas";
private static final String MAIN_DIR = "org/apache/camel/catalog/main";
+ private static final String BASE_RESOURCE_DIR = "org/apache/camel/catalog";
private final VersionHelper version = new VersionHelper();
@@ -495,6 +496,11 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa
return null;
}
+ @Override
+ public InputStream loadResource(String kind, String name) {
+ return versionManager.getResourceAsStream(BASE_RESOURCE_DIR + "/" + kind + "/" + name);
+ }
+
private static boolean matchArtifact(ArtifactModel<?> am, String groupId, String artifactId, String version) {
return groupId.equals(am.getGroupId()) && artifactId.equals(am.getArtifactId())
&& (version == null || version.isBlank() || version.equals(am.getVersion()));
diff --git a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 407ec076ce2..97f09b0eba5 100644
--- a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -17,6 +17,9 @@
package org.apache.camel.catalog;
import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -1577,4 +1580,19 @@ public class CamelCatalogTest {
Assertions.assertEquals("Sent and receive messages to/from a JMS Queue or Topic.", am.getDescription());
}
+ @Test
+ public void loadFooResourceWithBarKind() throws IOException {
+ InputStream is = catalog.loadResource("bar", "foo.txt");
+ Assertions.assertNotNull(is);
+
+ String content = new String(is.readAllBytes(), StandardCharsets.UTF_8);
+ Assertions.assertEquals("Hello Camel", content);
+ }
+
+ @Test
+ public void loadNotExistingResource() {
+ InputStream is = catalog.loadResource("bar", "not_exists");
+ Assertions.assertNull(is);
+ }
+
}
diff --git a/catalog/camel-catalog/src/test/resources/org/apache/camel/catalog/bar/foo.txt b/catalog/camel-catalog/src/test/resources/org/apache/camel/catalog/bar/foo.txt
new file mode 100644
index 00000000000..1d9ad12b82a
--- /dev/null
+++ b/catalog/camel-catalog/src/test/resources/org/apache/camel/catalog/bar/foo.txt
@@ -0,0 +1 @@
+Hello Camel
\ No newline at end of file
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
index 3eb0815a346..22d599ff96a 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
@@ -107,6 +107,7 @@ class Export extends ExportBaseCommand {
cmd.gradleWrapper = this.gradleWrapper;
cmd.buildTool = this.buildTool;
cmd.quiet = this.quiet;
+ cmd.additionalProperties = this.additionalProperties;
// run export
return cmd.export();
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 32913ca9812..b9a108a4885 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -136,6 +136,10 @@ abstract class ExportBaseCommand extends CamelCommand {
@CommandLine.Option(names = { "--fresh" }, description = "Make sure we use fresh (i.e. non-cached) resources")
protected boolean fresh;
+ @CommandLine.Option(names = { "--additional-properties" },
+ description = "Additional maven properties, ex. --additional-properties=prop1=foo,prop2=bar")
+ protected String additionalProperties;
+
@CommandLine.Option(names = { "--logging" }, defaultValue = "false",
description = "Can be used to turn on logging (logs to file in <user home>/.camel directory)")
boolean logging;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index 955e8502f28..3348211f2b3 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -22,11 +22,13 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
@@ -140,13 +142,22 @@ class ExportSpringBoot extends Export {
private void createMavenPom(File settings, File profile, File pom, Set<String> deps) throws Exception {
String[] ids = gav.split(":");
- String context = readResourceTemplate("templates/spring-boot-pom.tmpl");
-
Properties prop = new CamelCaseOrderedProperties();
RuntimeUtil.loadProperties(prop, settings);
String repos = getMavenRepos(settings, prop, camelSpringBootVersion);
CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
+
+ // First try to load a specialized template from the catalog, if the catalog does not provide it
+ // fallback to the template defined in camel-jbang-core
+ String context;
+ InputStream template = catalog.loadResource("camel-jbang", "spring-boot-pom.tmpl");
+ if (template != null) {
+ context = IOHelper.loadText(template);
+ } else {
+ context = readResourceTemplate("templates/spring-boot-pom.tmpl");
+ }
+
String camelVersion = catalog.getLoadedVersion();
context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
@@ -155,6 +166,21 @@ class ExportSpringBoot extends Export {
context = context.replaceAll("\\{\\{ \\.SpringBootVersion }}", springBootVersion);
context = context.replaceFirst("\\{\\{ \\.JavaVersion }}", javaVersion);
context = context.replaceFirst("\\{\\{ \\.CamelVersion }}", camelVersion);
+ if (camelSpringBootVersion != null) {
+ context = context.replaceFirst("\\{\\{ \\.CamelSpringBootVersion }}", camelSpringBootVersion);
+ }
+ if (additionalProperties != null) {
+ String properties = Arrays.stream(additionalProperties.split(","))
+ .map(property -> {
+ String[] keyValueProperty = property.split("=");
+ String mavenProperty = String.format("\t\t<%s>%s</%s>", keyValueProperty[0], keyValueProperty[1],
+ keyValueProperty[0]);
+ return mavenProperty;
+ })
+ .map(property -> property + System.lineSeparator())
+ .collect(Collectors.joining());
+ context = context.replaceFirst("\\{\\{ \\.AdditionalProperties }}", properties);
+ }
// Convert jkube properties to maven properties
Properties allProps = new CamelCaseOrderedProperties();
@@ -169,7 +195,7 @@ class ExportSpringBoot extends Export {
context = context.replaceFirst(Pattern.quote("{{ .jkubeProperties }}"),
Matcher.quoteReplacement(sbJKube.toString()));
- if (repos == null) {
+ if (repos == null || repos.isEmpty()) {
context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", "");
} else {
int i = 1;
@@ -269,7 +295,7 @@ class ExportSpringBoot extends Export {
context = context.replaceFirst("\\{\\{ \\.JavaVersion }}", javaVersion);
context = context.replaceAll("\\{\\{ \\.CamelVersion }}", camelVersion);
- if (repos == null) {
+ if (repos == null || repos.isEmpty()) {
context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", "");
} else {
StringBuilder sb = new StringBuilder();
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 76a4f41f365..41f9b3d8637 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -1067,7 +1067,6 @@ class Run extends CamelCommand {
onDownloadDependency(groupId, artifactId, version);
}
- @Override
public void onExtraRepository(String repo) {
if (!repos.contains(repo)) {
writeSettings("repository", repo);
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
index e29672496d5..49030808388 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
@@ -33,6 +33,7 @@ import org.apache.camel.catalog.RuntimeProvider;
import org.apache.camel.catalog.VersionManager;
import org.apache.camel.main.KameletMain;
import org.apache.camel.main.download.DependencyDownloaderClassLoader;
+import org.apache.camel.main.download.DownloadException;
import org.apache.camel.main.download.MavenArtifact;
import org.apache.camel.main.download.MavenDependencyDownloader;
@@ -106,12 +107,21 @@ public final class CatalogLoader {
// download camel-catalog for that specific version
MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
- MavenArtifact ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", version);
+ MavenArtifact ma;
+ String camelCatalogVersion = version;
+ try {
+ ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", camelCatalogVersion);
+ } catch (DownloadException ex) {
+ // fallback, in case camel spring boot version differ from camel version
+ camelCatalogVersion = answer.getCatalogVersion();
+ ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", camelCatalogVersion);
+ }
if (ma != null) {
cl.addFile(ma.getFile());
} else {
- throw new IOException("Cannot download org.apache.camel:camel-catalog:" + version);
+ throw new IOException("Cannot download org.apache.camel:camel-catalog:" + camelCatalogVersion);
}
+
ma = downloader.downloadArtifact("org.apache.camel.springboot", "camel-catalog-provider-springboot", version);
if (ma != null) {
cl.addFile(ma.getFile());