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);

Reply via email to