This is an automated email from the ASF dual-hosted git repository. cdeppisch pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 4a1d3549dd8 chore(jbang): Use runtime type enum in all commands 4a1d3549dd8 is described below commit 4a1d3549dd8aad68e727a31ac7205ecf84bec823 Author: Christoph Deppisch <cdeppi...@redhat.com> AuthorDate: Wed Jul 3 09:50:48 2024 +0200 chore(jbang): Use runtime type enum in all commands - Use central runtime types enumeration (quarkus, spring-boot, camel-main) - Use one single place to hold the default runtime version for the individual runtime providers --- .../dsl/jbang/core/commands/DependencyList.java | 30 +++++++----- .../camel/dsl/jbang/core/commands/Export.java | 28 +++++++---- .../dsl/jbang/core/commands/ExportBaseCommand.java | 16 ++++--- .../apache/camel/dsl/jbang/core/commands/Run.java | 19 +++++--- .../dsl/jbang/core/commands/SBOMGenerator.java | 30 +++++++----- .../core/commands/catalog/CatalogBaseCommand.java | 16 ++++--- .../jbang/core/commands/catalog/CatalogDoc.java | 14 ++++-- .../jbang/core/commands/version/VersionList.java | 24 ++++++---- .../jbang/core/commands/version/VersionSet.java | 10 ++-- .../camel/dsl/jbang/core/common/RuntimeType.java | 54 ++++++++++++++++++++++ .../jbang/core/common}/RuntimeTypeConverter.java | 2 +- .../core/commands/generate/CodeRestGenerator.java | 12 +++-- .../camel/dsl/jbang/core/commands/k/Agent.java | 13 ++++-- .../jbang/core/commands/k/support/RuntimeType.java | 38 --------------- 14 files changed, 188 insertions(+), 118 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyList.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyList.java index e59ce15ed94..0ef740f7420 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyList.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyList.java @@ -29,6 +29,7 @@ import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; import org.apache.camel.dsl.jbang.core.common.RuntimeUtil; import org.apache.camel.dsl.jbang.core.common.XmlHelper; import org.apache.camel.tooling.maven.MavenGav; @@ -185,8 +186,8 @@ public class DependencyList extends Export { if (profile.exists()) { Properties prop = new CamelCaseOrderedProperties(); RuntimeUtil.loadProperties(prop, profile); - if (this.runtime == null) { - this.runtime = prop.getProperty("camel.jbang.runtime"); + if (this.runtime == null && prop.containsKey("camel.jbang.runtime")) { + this.runtime = RuntimeType.fromValue(prop.getProperty("camel.jbang.runtime")); } if (this.gav == null) { this.gav = prop.getProperty("camel.jbang.gav"); @@ -208,19 +209,24 @@ public class DependencyList extends Export { gav = "org.apache.camel:camel-jbang-dummy:1.0"; } if (runtime == null) { - runtime = "camel-main"; + runtime = RuntimeType.main; } // turn off noise - if ("spring-boot".equals(runtime) || "camel-spring-boot".equals(runtime)) { - return export(new ExportSpringBoot(getMain())); - } else if ("quarkus".equals(runtime) || "camel-quarkus".equals(runtime)) { - return export(new ExportQuarkus(getMain())); - } else if ("main".equals(runtime) || "camel-main".equals(runtime)) { - return export(new ExportCamelMain(getMain())); - } else { - System.err.println("Unknown runtime: " + runtime); - return 1; + switch (runtime) { + case springBoot -> { + return export(new ExportSpringBoot(getMain())); + } + case quarkus -> { + return export(new ExportQuarkus(getMain())); + } + case main -> { + return export(new ExportCamelMain(getMain())); + } + default -> { + System.err.println("Unknown runtime: " + runtime); + return 1; + } } } 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 650de02b114..5860c743910 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 @@ -20,6 +20,7 @@ import java.io.File; import java.util.Comparator; import java.util.Properties; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; import org.apache.camel.dsl.jbang.core.common.RuntimeUtil; import org.apache.camel.tooling.maven.MavenGav; import org.apache.camel.util.CamelCaseOrderedProperties; @@ -51,15 +52,20 @@ public class Export extends ExportBaseCommand { return 1; } - if ("spring-boot".equals(runtime) || "camel-spring-boot".equals(runtime)) { - return export(new ExportSpringBoot(getMain())); - } else if ("quarkus".equals(runtime) || "camel-quarkus".equals(runtime)) { - return export(new ExportQuarkus(getMain())); - } else if ("main".equals(runtime) || "camel-main".equals(runtime)) { - return export(new ExportCamelMain(getMain())); - } else { - System.err.println("Unknown runtime: " + runtime); - return 1; + switch (runtime) { + case springBoot -> { + return export(new ExportSpringBoot(getMain())); + } + case quarkus -> { + return export(new ExportQuarkus(getMain())); + } + case main -> { + return export(new ExportCamelMain(getMain())); + } + default -> { + System.err.println("Unknown runtime: " + runtime); + return 1; + } } } @@ -68,7 +74,9 @@ public class Export extends ExportBaseCommand { Properties prop = new CamelCaseOrderedProperties(); RuntimeUtil.loadProperties(prop, file); // read runtime and gav from profile if not configured - this.runtime = prop.getProperty("camel.jbang.runtime", this.runtime); + if (prop.containsKey("camel.jbang.runtime")) { + this.runtime = RuntimeType.fromValue(prop.getProperty("camel.jbang.runtime")); + } this.gav = prop.getProperty("camel.jbang.gav", this.gav); // allow configuring versions from profile this.javaVersion = prop.getProperty("camel.jbang.javaVersion", this.javaVersion); 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 31fc76f161c..6596c8cd921 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 @@ -48,6 +48,8 @@ import java.util.stream.Collectors; import org.apache.camel.catalog.DefaultCamelCatalog; import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import org.apache.camel.dsl.jbang.core.common.RuntimeUtil; import org.apache.camel.dsl.jbang.core.common.VersionHelper; import org.apache.camel.tooling.maven.MavenArtifact; @@ -95,9 +97,11 @@ abstract class ExportBaseCommand extends CamelCommand { "--dep", "--deps" }, description = "Add additional dependencies (Use commas to separate multiple dependencies).") protected String dependencies; - @CommandLine.Option(names = { "--runtime" }, completionCandidates = RuntimeCompletionCandidates.class, + @CommandLine.Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, + converter = RuntimeTypeConverter.class, description = "Runtime (${COMPLETION-CANDIDATES})") - protected String runtime; + protected RuntimeType runtime; @CommandLine.Option(names = { "--gav" }, description = "The Maven group:artifact:version") protected String gav; @@ -148,8 +152,8 @@ abstract class ExportBaseCommand extends CamelCommand { protected String localKameletDir; @CommandLine.Option(names = { "--spring-boot-version" }, description = "Spring Boot version", - defaultValue = "3.3.1") - protected String springBootVersion = "3.3.1"; + defaultValue = RuntimeType.SPRING_BOOT_VERSION) + protected String springBootVersion = RuntimeType.SPRING_BOOT_VERSION; @CommandLine.Option(names = { "--camel-spring-boot-version" }, description = "Camel version to use with Spring Boot") protected String camelSpringBootVersion; @@ -163,8 +167,8 @@ abstract class ExportBaseCommand extends CamelCommand { protected String quarkusArtifactId = "quarkus-bom"; @CommandLine.Option(names = { "--quarkus-version" }, description = "Quarkus Platform version", - defaultValue = "3.12.0") - protected String quarkusVersion = "3.12.0"; + defaultValue = RuntimeType.QUARKUS_VERSION) + protected String quarkusVersion = RuntimeType.QUARKUS_VERSION; @CommandLine.Option(names = { "--maven-wrapper" }, defaultValue = "true", description = "Include Maven Wrapper files in exported project") 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 21789d01a01..d7fcb089a70 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 @@ -51,6 +51,8 @@ import org.apache.camel.catalog.DefaultCamelCatalog; import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; import org.apache.camel.dsl.jbang.core.common.LoggingLevelCompletionCandidates; import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import org.apache.camel.dsl.jbang.core.common.RuntimeUtil; import org.apache.camel.dsl.jbang.core.common.VersionHelper; import org.apache.camel.main.KameletMain; @@ -120,9 +122,12 @@ public class Run extends CamelCommand { public List<String> files = new ArrayList<>(); - @Option(names = { "--runtime" }, completionCandidates = RuntimeCompletionCandidates.class, - defaultValue = "camel-main", description = "Runtime (${COMPLETION-CANDIDATES})") - String runtime = "camel-main"; + @Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, + defaultValue = "camel-main", + converter = RuntimeTypeConverter.class, + description = "Runtime (${COMPLETION-CANDIDATES})") + RuntimeType runtime = RuntimeType.main; @Option(names = { "--source-dir" }, description = "Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time.") @@ -141,12 +146,12 @@ public class Run extends CamelCommand { String kameletsVersion; @Option(names = { "--quarkus-version" }, description = "Quarkus Platform version", - defaultValue = "3.12.0") - String quarkusVersion = "3.12.0"; + defaultValue = RuntimeType.QUARKUS_VERSION) + String quarkusVersion = RuntimeType.QUARKUS_VERSION; @Option(names = { "--spring-boot-version" }, description = "Spring Boot version", - defaultValue = "3.3.1") - String springBootVersion = "3.3.1"; + defaultValue = RuntimeType.SPRING_BOOT_VERSION) + String springBootVersion = RuntimeType.SPRING_BOOT_VERSION; @Option(names = { "--profile" }, scope = CommandLine.ScopeType.INHERIT, defaultValue = "dev", description = "Profile to run (dev, test, or prod).") diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java index 185ff0ac530..260d343db2d 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java @@ -22,6 +22,7 @@ import java.util.Properties; import java.util.concurrent.TimeUnit; import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; import org.apache.camel.dsl.jbang.core.common.RuntimeUtil; import org.apache.camel.util.CamelCaseOrderedProperties; import org.apache.camel.util.FileUtil; @@ -149,8 +150,8 @@ public class SBOMGenerator extends Export { if (profile.exists()) { Properties prop = new CamelCaseOrderedProperties(); RuntimeUtil.loadProperties(prop, profile); - if (this.runtime == null) { - this.runtime = prop.getProperty("camel.jbang.runtime"); + if (this.runtime == null && prop.containsKey("camel.jbang.runtime")) { + this.runtime = RuntimeType.fromValue(prop.getProperty("camel.jbang.runtime")); } if (this.gav == null) { this.gav = prop.getProperty("camel.jbang.gav"); @@ -172,18 +173,23 @@ public class SBOMGenerator extends Export { gav = "org.apache.camel:camel-jbang-export:1.0"; } if (runtime == null) { - runtime = "camel-main"; + runtime = RuntimeType.main; } - if ("spring-boot".equals(runtime) || "camel-spring-boot".equals(runtime)) { - return export(new ExportSpringBoot(getMain())); - } else if ("quarkus".equals(runtime) || "camel-quarkus".equals(runtime)) { - return export(new ExportQuarkus(getMain())); - } else if ("main".equals(runtime) || "camel-main".equals(runtime)) { - return export(new ExportCamelMain(getMain())); - } else { - System.err.println("Unknown runtime: " + runtime); - return 1; + switch (runtime) { + case springBoot -> { + return export(new ExportSpringBoot(getMain())); + } + case quarkus -> { + return export(new ExportQuarkus(getMain())); + } + case main -> { + return export(new ExportCamelMain(getMain())); + } + default -> { + System.err.println("Unknown runtime: " + runtime); + return 1; + } } } } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java index eb4ca931045..6e28cec1cb7 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java @@ -32,6 +32,8 @@ import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import org.apache.camel.dsl.jbang.core.common.CatalogLoader; import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import org.apache.camel.dsl.jbang.core.common.VersionHelper; import org.apache.camel.tooling.maven.MavenGav; import org.apache.camel.tooling.model.ArtifactModel; @@ -44,12 +46,14 @@ public abstract class CatalogBaseCommand extends CamelCommand { description = "To use a different Camel version than the default version") String camelVersion; - @CommandLine.Option(names = { "--runtime" }, completionCandidates = RuntimeCompletionCandidates.class, + @CommandLine.Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, + converter = RuntimeTypeConverter.class, description = "Runtime (${COMPLETION-CANDIDATES})") - String runtime; + RuntimeType runtime; @CommandLine.Option(names = { "--quarkus-version" }, description = "Quarkus Platform version", - defaultValue = "3.12.0") + defaultValue = RuntimeType.QUARKUS_VERSION) String quarkusVersion; @CommandLine.Option(names = { "--quarkus-group-id" }, description = "Quarkus Platform Maven groupId", @@ -97,9 +101,9 @@ public abstract class CatalogBaseCommand extends CamelCommand { } CamelCatalog loadCatalog() throws Exception { - if ("spring-boot".equals(runtime)) { + if (RuntimeType.springBoot == runtime) { return CatalogLoader.loadSpringBootCatalog(repos, camelVersion); - } else if ("quarkus".equals(runtime)) { + } else if (RuntimeType.quarkus == runtime) { return CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion, quarkusGroupId); } if (camelVersion == null) { @@ -152,7 +156,7 @@ public abstract class CatalogBaseCommand extends CamelCommand { new Column().header("ARTIFACT-ID").visible(gav).dataAlign(HorizontalAlign.LEFT).with(this::shortGav), new Column().header("LEVEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.level), new Column().header("NATIVE").dataAlign(HorizontalAlign.CENTER) - .visible("quarkus".equals(runtime)).with(this::nativeSupported), + .visible(RuntimeType.quarkus == runtime).with(this::nativeSupported), new Column().header("SINCE").dataAlign(HorizontalAlign.RIGHT).with(r -> r.since), new Column().header("DESCRIPTION").dataAlign(HorizontalAlign.LEFT).with(this::shortDescription)))); } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java index 9ceb7cdf571..936c3efe74e 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java @@ -34,6 +34,8 @@ import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import org.apache.camel.dsl.jbang.core.common.CatalogLoader; import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import org.apache.camel.main.util.SuggestSimilarHelper; import org.apache.camel.tooling.maven.MavenGav; import org.apache.camel.tooling.model.BaseOptionModel; @@ -59,12 +61,14 @@ public class CatalogDoc extends CamelCommand { description = "To use a different Camel version than the default version") String camelVersion; - @CommandLine.Option(names = { "--runtime" }, completionCandidates = RuntimeCompletionCandidates.class, + @CommandLine.Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, + converter = RuntimeTypeConverter.class, description = "Runtime (${COMPLETION-CANDIDATES})") - String runtime; + RuntimeType runtime; @CommandLine.Option(names = { "--quarkus-version" }, description = "Quarkus Platform version", - defaultValue = "3.12.0") + defaultValue = RuntimeType.QUARKUS_VERSION) String quarkusVersion; @CommandLine.Option(names = { "--quarkus-group-id" }, description = "Quarkus Platform Maven groupId", @@ -104,9 +108,9 @@ public class CatalogDoc extends CamelCommand { } CamelCatalog loadCatalog() throws Exception { - if ("spring-boot".equals(runtime)) { + if (RuntimeType.springBoot == runtime) { return CatalogLoader.loadSpringBootCatalog(repos, camelVersion); - } else if ("quarkus".equals(runtime)) { + } else if (RuntimeType.quarkus == runtime) { return CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion, quarkusGroupId); } if (camelVersion == null) { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java index 4be1d3db4a4..d3bf909fc89 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java @@ -39,6 +39,8 @@ import org.apache.camel.catalog.DefaultCamelCatalog; import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import org.apache.camel.dsl.jbang.core.common.VersionHelper; import org.apache.camel.main.KameletMain; import org.apache.camel.main.download.MavenDependencyDownloader; @@ -58,9 +60,11 @@ public class VersionList extends CamelCommand { private static final String GIT_CAMEL_QUARKUS_URL = "https://raw.githubusercontent.com/apache/camel-website/main/content/releases/q/release-%s.md"; - @CommandLine.Option(names = { "--runtime" }, completionCandidates = RuntimeCompletionCandidates.class, + @CommandLine.Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, + converter = RuntimeTypeConverter.class, description = "Runtime (${COMPLETION-CANDIDATES})") - String runtime; + RuntimeType runtime; @CommandLine.Option(names = { "--from-version" }, description = "Filter by Camel version (inclusive)", defaultValue = "4.0.0") @@ -102,10 +106,10 @@ public class VersionList extends CamelCommand { String g = "org.apache.camel"; String a = "camel-catalog"; - if ("spring-boot".equalsIgnoreCase(runtime)) { + if (RuntimeType.springBoot == runtime) { g = "org.apache.camel.springboot"; a = "camel-spring-boot"; - } else if ("quarkus".equalsIgnoreCase(runtime)) { + } else if (RuntimeType.quarkus == runtime) { g = "org.apache.camel.quarkus"; a = "camel-quarkus-catalog"; } @@ -137,7 +141,7 @@ public class VersionList extends CamelCommand { } CamelCatalog catalog = new DefaultCamelCatalog(); - List<ReleaseModel> releases = "quarkus".equals(runtime) ? catalog.camelQuarkusReleases() : catalog.camelReleases(); + List<ReleaseModel> releases = RuntimeType.quarkus == runtime ? catalog.camelQuarkusReleases() : catalog.camelReleases(); List<Row> rows = new ArrayList<>(); for (String[] v : versions) { @@ -147,7 +151,7 @@ public class VersionList extends CamelCommand { row.runtimeVersion = v[1]; // enrich with details from catalog (if we can find any) - String catalogVersion = "quarkus".equals(runtime) ? v[1] : v[0]; + String catalogVersion = RuntimeType.quarkus == runtime ? v[1] : v[0]; ReleaseModel rm = releases.stream().filter(r -> catalogVersion.equals(r.getVersion())).findFirst().orElse(null); if (rm == null) { // unknown release but if it's an Apache Camel release we can grab from online @@ -175,9 +179,9 @@ public class VersionList extends CamelCommand { printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList( new Column().header("CAMEL VERSION") .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r -> r.coreVersion), - new Column().header("QUARKUS").visible("quarkus".equalsIgnoreCase(runtime)) + new Column().header("QUARKUS").visible(RuntimeType.quarkus == runtime) .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r -> r.runtimeVersion), - new Column().header("SPRING-BOOT").visible("spring-boot".equalsIgnoreCase(runtime)) + new Column().header("SPRING-BOOT").visible(RuntimeType.springBoot == runtime) .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r -> r.runtimeVersion), new Column().header("JDK") .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT).with(this::jdkVersion), @@ -259,8 +263,8 @@ public class VersionList extends CamelCommand { return VersionHelper.isGE(version, fromVersion); } - private ReleaseModel onlineRelease(String runtime, String coreVersion) throws Exception { - String gitUrl = String.format("quarkus".equals(runtime) ? GIT_CAMEL_QUARKUS_URL : GIT_CAMEL_URL, coreVersion); + private ReleaseModel onlineRelease(RuntimeType runtime, String coreVersion) throws Exception { + String gitUrl = String.format(RuntimeType.quarkus == runtime ? GIT_CAMEL_QUARKUS_URL : GIT_CAMEL_URL, coreVersion); HttpClient hc = HttpClient.newHttpClient(); HttpResponse<String> res = hc.send(HttpRequest.newBuilder(new URI(gitUrl)).timeout(Duration.ofSeconds(20)).build(), diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java index aa620b3bc5a..3d8304b103f 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java @@ -20,6 +20,8 @@ import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import picocli.CommandLine; @CommandLine.Command(name = "set", description = "Set/change current Camel version") @@ -28,9 +30,11 @@ public class VersionSet extends CamelCommand { @CommandLine.Parameters(description = "Camel version", arity = "0..1") String version; - @CommandLine.Option(names = { "--runtime" }, completionCandidates = RuntimeCompletionCandidates.class, + @CommandLine.Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, + converter = RuntimeTypeConverter.class, description = "Runtime (${COMPLETION-CANDIDATES})") - String runtime; + RuntimeType runtime; @CommandLine.Option(names = { "--repo", "--repos" }, description = "Maven repository for downloading the dependencies") String repo; @@ -59,7 +63,7 @@ public class VersionSet extends CamelCommand { properties.put("repos", repo); } if (runtime != null) { - properties.put("runtime", runtime); + properties.put("runtime", runtime.runtime()); } } CommandLineHelper.storeProperties(properties, printer()); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeType.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeType.java new file mode 100644 index 00000000000..a51b96b2881 --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeType.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.camel.dsl.jbang.core.common; + +import org.apache.camel.catalog.DefaultCamelCatalog; + +public enum RuntimeType { + springBoot, + quarkus, + main; + + public static final String QUARKUS_VERSION = "3.12.0"; + public static final String SPRING_BOOT_VERSION = "3.3.1"; + + public static RuntimeType fromValue(String value) { + return switch (value) { + case "spring-boot", "camel-spring-boot" -> RuntimeType.springBoot; + case "quarkus", "camel-quarkus" -> RuntimeType.quarkus; + case "main", "camel-main" -> RuntimeType.main; + default -> throw new IllegalArgumentException("Unsupported runtime " + value); + }; + } + + public String runtime() { + return switch (this) { + case springBoot -> "spring-boot"; + case quarkus -> "quarkus"; + case main -> "camel-main"; + }; + } + + public String version() { + return switch (this) { + case springBoot -> SPRING_BOOT_VERSION; + case quarkus -> QUARKUS_VERSION; + case main -> new DefaultCamelCatalog().getCatalogVersion(); + }; + } +} diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/support/RuntimeTypeConverter.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeTypeConverter.java similarity index 94% rename from dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/support/RuntimeTypeConverter.java rename to dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeTypeConverter.java index c630aaa18fb..e2784ef7f05 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/support/RuntimeTypeConverter.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeTypeConverter.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.camel.dsl.jbang.core.commands.k.support; +package org.apache.camel.dsl.jbang.core.common; import picocli.CommandLine; diff --git a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java index b6e7fe90416..173f42069ae 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java +++ b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java @@ -27,6 +27,9 @@ import io.swagger.v3.parser.OpenAPIV3Parser; import org.apache.camel.CamelContext; import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import org.apache.camel.generator.openapi.RestDslGenerator; import org.apache.camel.impl.DefaultCamelContext; import org.apache.logging.log4j.Level; @@ -52,9 +55,12 @@ public class CodeRestGenerator extends CamelCommand { private boolean generateRoutes; @CommandLine.Option(names = { "--dto" }, description = "Generate Java Data Objects") private boolean generateDataObjects; - @CommandLine.Option(names = { "--runtime" }, description = "Runtime (quarkus, or spring-boot)", - defaultValue = "quarkus") - private String runtime; + @CommandLine.Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, + converter = RuntimeTypeConverter.class, + defaultValue = "quarkus", + description = "Runtime (${COMPLETION-CANDIDATES})") + RuntimeType runtime = RuntimeType.quarkus; @CommandLine.Option(names = { "--package" }, description = "Package for generated Java models", defaultValue = "model") private String packageName; diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/Agent.java b/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/Agent.java index 0743e204e08..0d8a56809a7 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/Agent.java +++ b/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/Agent.java @@ -47,14 +47,15 @@ import org.apache.camel.component.kamelet.KameletEndpoint; import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import org.apache.camel.dsl.jbang.core.commands.k.support.Capability; -import org.apache.camel.dsl.jbang.core.commands.k.support.RuntimeType; -import org.apache.camel.dsl.jbang.core.commands.k.support.RuntimeTypeConverter; import org.apache.camel.dsl.jbang.core.commands.k.support.SourceMetadata; import org.apache.camel.dsl.jbang.core.commands.k.support.StubComponentResolver; import org.apache.camel.dsl.jbang.core.commands.k.support.StubDataFormatResolver; import org.apache.camel.dsl.jbang.core.commands.k.support.StubLanguageResolver; import org.apache.camel.dsl.jbang.core.commands.k.support.StubTransformerResolver; import org.apache.camel.dsl.jbang.core.common.CatalogLoader; +import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates; +import org.apache.camel.dsl.jbang.core.common.RuntimeType; +import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultModelReifierFactory; import org.apache.camel.model.CircuitBreakerDefinition; @@ -126,9 +127,11 @@ public class Agent extends CamelCommand { String runtimeVersion; @CommandLine.Option(names = { "--runtime" }, + completionCandidates = RuntimeCompletionCandidates.class, converter = RuntimeTypeConverter.class, - description = "Runtime (spring-boot, quarkus, camel-main)") - RuntimeType runtimeType = RuntimeType.camelMain; + defaultValue = "camel-main", + description = "Runtime (${COMPLETION-CANDIDATES})") + RuntimeType runtimeType = RuntimeType.main; @CommandLine.Option(names = { "--repos" }, description = "Comma separated list of additional maven repositories") @@ -377,7 +380,7 @@ public class Agent extends CamelCommand { return CatalogLoader.loadSpringBootCatalog(repos, runtimeVersion); case quarkus: return CatalogLoader.loadQuarkusCatalog(repos, runtimeVersion, quarkusGroupId); - case camelMain: + case main: return CatalogLoader.loadCatalog(repos, runtimeVersion); default: throw new IllegalArgumentException("Unsupported runtime: " + runtime); diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/support/RuntimeType.java b/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/support/RuntimeType.java deleted file mode 100644 index 40834ebbeba..00000000000 --- a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/support/RuntimeType.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.camel.dsl.jbang.core.commands.k.support; - -public enum RuntimeType { - springBoot, - quarkus, - camelMain; - - public static RuntimeType fromValue(String value) { - switch (value) { - case "spring-boot": - return RuntimeType.springBoot; - case "quarkus": - return RuntimeType.quarkus; - case "camel-main": - return RuntimeType.camelMain; - default: - throw new IllegalArgumentException("Unsupported runtime " + value); - } - - } -}