This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 7bbb7b7c2adb7441142d3826d458d11c95c72c46
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon May 2 13:31:30 2022 +0200

    CAMEL-18029: camel-jbang - Uber Jar - Specify custom properties file to 
override what was packaged
---
 .../apache/camel/main/MainCommandLineSupport.java  | 10 +++-
 .../org/apache/camel/main/uberjar/UberJarMain.java | 65 +++++++++++++++++++++-
 2 files changed, 70 insertions(+), 5 deletions(-)

diff --git 
a/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java
 
b/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java
index b0afbf5a2c7..839f1b6eefd 100644
--- 
a/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java
+++ 
b/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java
@@ -83,6 +83,11 @@ public abstract class MainCommandLineSupport extends 
MainSupport {
         if (initOptionsDone) {
             return;
         }
+        addInitialOptions();
+        initOptionsDone = true;
+    }
+
+    protected void addInitialOptions() {
         addOption(new Option("h", "help", "Displays the help screen") {
             protected void doProcess(String arg, LinkedList<String> 
remainingArgs) {
                 showOptions();
@@ -156,7 +161,6 @@ public abstract class MainCommandLineSupport extends 
MainSupport {
                 setPropertyPlaceholderLocations(parameter);
             }
         });
-        initOptionsDone = true;
     }
 
     /**
@@ -276,7 +280,7 @@ public abstract class MainCommandLineSupport extends 
MainSupport {
         private final String fullName;
         private final String description;
 
-        protected Option(String abbreviation, String fullName, String 
description) {
+        public Option(String abbreviation, String fullName, String 
description) {
             this.abbreviation = "-" + abbreviation;
             this.fullName = "-" + fullName;
             this.description = description;
@@ -312,7 +316,7 @@ public abstract class MainCommandLineSupport extends 
MainSupport {
     public abstract class ParameterOption extends Option {
         private final String parameterName;
 
-        protected ParameterOption(String abbreviation, String fullName, String 
description, String parameterName) {
+        public ParameterOption(String abbreviation, String fullName, String 
description, String parameterName) {
             super(abbreviation, fullName, description);
             this.parameterName = parameterName;
         }
diff --git 
a/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java
 
b/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java
index ae9fd9cdfb6..2b14e46b1e7 100644
--- 
a/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java
+++ 
b/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java
@@ -19,9 +19,12 @@ package org.apache.camel.main.uberjar;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.nio.file.FileSystems;
+import java.util.LinkedList;
 
 import org.apache.camel.main.KameletMain;
 import org.apache.camel.util.OrderedProperties;
+import org.apache.camel.util.StringHelper;
 
 /**
  * Main class to run Camel as an uber-jar packaged by camel-jbang
@@ -30,16 +33,74 @@ public class UberJarMain extends KameletMain {
 
     public static final String RUN_SETTINGS_FILE = 
"camel-jbang-run.properties";
 
+    private UberJarMain main;
+
     public static void main(String[] args) throws Exception {
         UberJarMain main = new UberJarMain();
-        main.run(); // run without args as they are for legacy camel-main
-        int code = main.getExitCode();
+        main.main = main;
+        int code = main.run(args);
         if (code != 0) {
             System.exit(code);
         }
         // normal exit
     }
 
+    @Override
+    public void showOptionsHeader() {
+        System.out.println("Apache Camel (UberJar) takes the following 
options");
+        System.out.println();
+    }
+
+    @Override
+    protected void addInitialOptions() {
+        addOption(new Option("h", "help", "Displays the help screen") {
+            protected void doProcess(String arg, LinkedList<String> 
remainingArgs) {
+                showOptions();
+                completed();
+            }
+        });
+        addOption(new ParameterOption("prop", "property", "Additional 
properties (override existing)", "property") {
+            @Override
+            protected void doProcess(String arg, String parameter, 
LinkedList<String> remainingArgs) {
+                if (arg.equals("-prop") || arg.equals("-property")) {
+                    String k = StringHelper.before(parameter, "=");
+                    String v = StringHelper.after(parameter, "=");
+                    if (k != null && v != null) {
+                        main.addArgumentProperty(k, v);
+                    }
+                }
+            }
+        });
+        addOption(new ParameterOption(
+                "properties", "properties",
+                "Load properties file for route placeholders (ex. 
/path/to/file.properties",
+                "properties") {
+            protected void doProcess(String arg, String parameter, 
LinkedList<String> remainingArgs) {
+                if (arg.equals("-properties") && parameter != null) {
+                    String[] filesLocation = parameter.split(",");
+                    StringBuilder locations = new StringBuilder();
+                    for (String file : filesLocation) {
+                        if (!file.startsWith("file:")) {
+                            if (!file.startsWith("/")) {
+                                file = 
FileSystems.getDefault().getPath("").toAbsolutePath() + File.separator + file;
+                            }
+                            file = "file://" + file;
+                        }
+                        locations.append(file).append(",");
+                    }
+                    // there may be existing properties
+                    String loc = 
main.getInitialProperties().getProperty("camel.component.properties.location");
+                    if (loc != null) {
+                        loc = loc + "," + locations;
+                    } else {
+                        loc = locations.toString();
+                    }
+                    
main.addInitialProperty("camel.component.properties.location", loc);
+                }
+            }
+        });
+    }
+
     @Override
     protected ClassLoader createApplicationContextClassLoader() {
         // use the classloader that loaded this class

Reply via email to