This is an automated email from the ASF dual-hosted git repository. fmariani pushed a commit to branch jbang-user-config in repository https://gitbox.apache.org/repos/asf/camel.git
commit 81bd09bb3463268e7c0c822bbb612cd4715cf143 Author: Croway <[email protected]> AuthorDate: Tue Mar 7 18:22:39 2023 +0100 config commands --- dsl/camel-jbang/camel-jbang-core/pom.xml | 22 ----------- .../dsl/jbang/core/commands/CamelJBangMain.java | 7 +++- .../dsl/jbang/core/commands/ConfigCommand.java | 18 +++++++++ .../camel/dsl/jbang/core/commands/ConfigGet.java | 30 +++++++++++++++ .../camel/dsl/jbang/core/commands/ConfigList.java | 22 +++++++++++ .../camel/dsl/jbang/core/commands/ConfigSet.java | 37 ++++++++++++++++++ .../camel/dsl/jbang/core/commands/ConfigUnset.java | 27 +++++++++++++ .../dsl/jbang/core/common/CommandLineHelper.java | 44 ++++++++++++++++++++-- 8 files changed, 180 insertions(+), 27 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/pom.xml b/dsl/camel-jbang/camel-jbang-core/pom.xml index 052a3d2105d..82b382932f3 100644 --- a/dsl/camel-jbang/camel-jbang-core/pom.xml +++ b/dsl/camel-jbang/camel-jbang-core/pom.xml @@ -129,28 +129,6 @@ <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> - - <!-- Test dependencies --> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-api</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-params</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.assertj</groupId> - <artifactId>assertj-core</artifactId> - <scope>test</scope> - </dependency> </dependencies> </project> diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java index eb5ecc5f287..b7ad751d078 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java @@ -125,7 +125,12 @@ public class CamelJBangMain implements Callable<Integer> { .addSubcommand("bind", new CommandLine(new Bind(main))) .addSubcommand("pipe", new CommandLine(new Pipe(main))) .addSubcommand("export", new CommandLine(new Export(main))) - .addSubcommand("completion", new CommandLine(new Complete(main))); + .addSubcommand("completion", new CommandLine(new Complete(main))) + .addSubcommand("config", new CommandLine(new ConfigCommand(main)) + .addSubcommand("list", new CommandLine(new ConfigList(main))) + .addSubcommand("get", new CommandLine(new ConfigGet(main))) + .addSubcommand("unset", new CommandLine(new ConfigUnset(main))) + .addSubcommand("set", new CommandLine(new ConfigSet(main)))); commandLine.getCommandSpec().versionProvider(() -> { CamelCatalog catalog = new DefaultCamelCatalog(); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigCommand.java new file mode 100644 index 00000000000..0496e2fab69 --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigCommand.java @@ -0,0 +1,18 @@ +package org.apache.camel.dsl.jbang.core.commands; + +import picocli.CommandLine; + [email protected](name = "config", description = "Interacts with camel-jbang config file") +public class ConfigCommand extends CamelCommand { + + public ConfigCommand(CamelJBangMain main) { + super(main); + } + + @Override + public Integer call() throws Exception { + // defaults to list + new CommandLine(new ConfigList(getMain())).execute(); + return 0; + } +} diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigGet.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigGet.java new file mode 100644 index 00000000000..f42e9591aed --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigGet.java @@ -0,0 +1,30 @@ +package org.apache.camel.dsl.jbang.core.commands; + +import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; + +import picocli.CommandLine; + [email protected](name = "get", + description = "Displays user config value") +public class ConfigGet extends CamelCommand { + + @CommandLine.Parameters(description = "Configuration key") + private String key; + + public ConfigGet(CamelJBangMain main) { + super(main); + } + + @Override + public Integer call() throws Exception { + CommandLineHelper.loadProperties(properties -> { + if (properties.containsKey(key)) { + System.out.println(properties.get(key)); + } else { + System.out.println(key + " key not found"); + } + }); + + return 0; + } +} diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigList.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigList.java new file mode 100644 index 00000000000..cd7ed11bd2c --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigList.java @@ -0,0 +1,22 @@ +package org.apache.camel.dsl.jbang.core.commands; + +import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; + +import picocli.CommandLine; + [email protected](name = "list", + description = "Displays user config overrides") +public class ConfigList extends CamelCommand { + + public ConfigList(CamelJBangMain main) { + super(main); + } + + @Override + public Integer call() throws Exception { + CommandLineHelper.loadProperties(properties -> + properties.entrySet().forEach(entry -> System.out.println(entry.getKey()))); + + return 0; + } +} diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigSet.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigSet.java new file mode 100644 index 00000000000..ef977d0fe0a --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigSet.java @@ -0,0 +1,37 @@ +package org.apache.camel.dsl.jbang.core.commands; + +import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; + +import picocli.CommandLine; + [email protected](name = "set", + description = "Set user config value") +public class ConfigSet extends CamelCommand { + + @CommandLine.Parameters(description = "Configuration parameter (ex. key=value)") + private String configuration; + + public ConfigSet(CamelJBangMain main) { + super(main); + } + + @Override + public Integer call() throws Exception { + CommandLineHelper.createPropertyFile(); + + if (configuration.split("=").length == 1) { + System.out.println("Configuration parameter not in key=value form"); + + return 1; + } + + CommandLineHelper.loadProperties(properties -> { + String key = configuration.substring(0, configuration.indexOf("=")); + String value = configuration.substring(configuration.indexOf("=") + 1, configuration.length()); + properties.put(key, value); + CommandLineHelper.storeProperties(properties); + }); + + return 0; + } +} diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigUnset.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigUnset.java new file mode 100644 index 00000000000..3375eeaaabe --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ConfigUnset.java @@ -0,0 +1,27 @@ +package org.apache.camel.dsl.jbang.core.commands; + +import org.apache.camel.dsl.jbang.core.common.CommandLineHelper; + +import picocli.CommandLine; + [email protected](name = "unset", + description = "Remove user config value") +public class ConfigUnset extends CamelCommand { + + @CommandLine.Parameters(description = "Configuration key") + private String key; + + public ConfigUnset(CamelJBangMain main) { + super(main); + } + + @Override + public Integer call() throws Exception { + CommandLineHelper.loadProperties(properties -> { + properties.remove(key); + CommandLineHelper.storeProperties(properties); + }); + + return 0; + } +} diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java index 0856fdd55fc..b1d8f3f0268 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java @@ -16,11 +16,16 @@ */ package org.apache.camel.dsl.jbang.core.common; +import org.apache.camel.util.IOHelper; + import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.Properties; +import java.util.function.Consumer; -import org.apache.camel.util.IOHelper; import picocli.CommandLine; /** @@ -32,6 +37,20 @@ public class CommandLineHelper { public static void augmentWithUserConfiguration(CommandLine commandLine, String... args) { File file = new File(System.getProperty("user.home"), USER_CONFIG); + if (file.isFile() && file.exists()) { + commandLine.setDefaultValueProvider(new CamelUserConfigDefaultValueProvider(file)); + } + } + + public static void createPropertyFile() throws IOException { + File file = new File(System.getProperty("user.home"), CommandLineHelper.USER_CONFIG); + if (!file.exists()) { + file.createNewFile(); + } + } + + public static void loadProperties(Consumer<Properties> consumer) { + File file = new File(System.getProperty("user.home"), CommandLineHelper.USER_CONFIG); if (file.isFile() && file.exists()) { FileInputStream fis = null; try { @@ -39,14 +58,27 @@ public class CommandLineHelper { Properties prop = new Properties(); prop.load(fis); IOHelper.close(fis); - if (!prop.isEmpty()) { - commandLine.setDefaultValueProvider(new CamelUserConfigDefaultValueProvider(prop)); - } + consumer.accept(prop); } catch (Exception e) { throw new RuntimeException("Cannot load user configuration: " + file); } finally { IOHelper.close(fis); } + } else { + System.out.println(CommandLineHelper.USER_CONFIG + " does not exists"); + } + } + + public static void storeProperties(Properties properties) { + File file = new File(System.getProperty("user.home"), CommandLineHelper.USER_CONFIG); + if (file.isFile() && file.exists()) { + try (FileOutputStream fos = new FileOutputStream(file)) { + properties.store(fos, null); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } else { + System.out.println(CommandLineHelper.USER_CONFIG + " does not exists"); } } @@ -56,6 +88,10 @@ public class CommandLineHelper { super(properties); } + public CamelUserConfigDefaultValueProvider(File file) { + super(file); + } + @Override public String defaultValue(CommandLine.Model.ArgSpec arg) throws Exception { String value = super.defaultValue(arg);
