You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2018/07/06 15:56:57 UTC

[sling-org-apache-sling-feature-launcher] branch master updated: Allow variables to be overridden from the launcher command line.

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

davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-launcher.git


The following commit(s) were added to refs/heads/master by this push:
     new aab19eb  Allow variables to be overridden from the launcher command line.
aab19eb is described below

commit aab19eb5bc32ded2ea1eb56dfd4b16b954821a64
Author: David Bosschaert <bo...@adobe.com>
AuthorDate: Fri Jul 6 16:55:44 2018 +0100

    Allow variables to be overridden from the launcher command line.
    
    To override a variable specified in the application.json, use the
      -V variable1=value1 -V variable2=value2
    syntax.
---
 .../feature/launcher/impl/FeatureProcessor.java    | 11 +++++---
 .../feature/launcher/impl/LauncherConfig.java      |  9 +++++++
 .../apache/sling/feature/launcher/impl/Main.java   | 31 +++++++++++++++-------
 3 files changed, 38 insertions(+), 13 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index 26f7e51..1ca2107 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@ -35,6 +35,7 @@ import java.io.IOException;
 import java.io.StringReader;
 import java.util.List;
 import java.util.Map;
+
 import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonReader;
@@ -52,7 +53,7 @@ public class FeatureProcessor {
     throws IOException {
         Application app = null;
         if ( config.getApplicationFile() != null ) {
-            app = read(config.getApplicationFile(), artifactManager);
+            app = read(config.getApplicationFile(), artifactManager, config.getVariables());
             // write application back
             final File file = new File(config.getHomeDirectory(), "resources" + File.separatorChar + "provisioning" + File.separatorChar + "application.json");
             file.getParentFile().mkdirs();
@@ -65,20 +66,22 @@ public class FeatureProcessor {
             }
         }
         else {
-            app = read(new File(config.getHomeDirectory(), "resources" + File.separatorChar + "provisioning" + File.separatorChar + "application.json").getPath(), artifactManager);
+            app = read(new File(config.getHomeDirectory(), "resources" + File.separatorChar + "provisioning" + File.separatorChar + "application.json").getPath(),
+                    artifactManager, config.getVariables());
         }
 
         return app;
     }
 
-    private static Application read(String absoluteArg, ArtifactManager artifactManager) throws IOException {
+    private static Application read(String absoluteArg, ArtifactManager artifactManager,
+            Map<String, String> overriddenVars) throws IOException {
         if ( absoluteArg.indexOf(":") < 2 ) {
             absoluteArg = new File(absoluteArg).getAbsolutePath();
         }
         final ArtifactHandler appArtifact = artifactManager.getArtifactHandler(absoluteArg);
 
         try (final FileReader r = new FileReader(appArtifact.getFile())) {
-            return ApplicationJSONReader.read(r);
+            return ApplicationJSONReader.read(r, overriddenVars);
         }
     }
     /**
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java b/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
index 015c217..1173148 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
@@ -21,6 +21,8 @@ import org.apache.sling.feature.io.spi.ArtifactProviderContext;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * This class holds the configuration of the launcher.
@@ -49,6 +51,9 @@ public class LauncherConfig
     private final Installation installation = new Installation();
 
     private volatile File home = new File(HOME);
+
+    private final Map<String, String> variables = new HashMap<>();
+
     /**
      * Create a new configuration object.
      * Set the default values
@@ -123,4 +128,8 @@ public class LauncherConfig
     public void clear() {
         this.installation.clear();
     }
+
+    public Map<String, String> getVariables() {
+        return this.variables;
+    }
 }
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/Main.java b/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
index 32c8f30..4be0089 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
@@ -16,17 +16,10 @@
  */
 package org.apache.sling.feature.launcher.impl;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
 import org.apache.commons.cli.BasicParser;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
@@ -41,6 +34,14 @@ import org.osgi.framework.FrameworkEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * This is the launcher main class.
  * It parses command line parameters and prepares the launcher.
@@ -76,7 +77,7 @@ public class Main {
         final Option repoOption =  new Option("u", true, "Set repository url");
         final Option appOption =  new Option("a", true, "Set application file");
         final Option fwkProperties = new Option("D", true, "Set framework properties");
-        fwkProperties.setArgs(20);
+        final Option varValue = new Option("V", true, "Set variable value");
         final Option debugOption = new Option("v", false, "Verbose");
         debugOption.setArgs(0);
         final Option installerOption = new Option("I", false, "Use OSGi installer for additional artifacts.");
@@ -86,6 +87,7 @@ public class Main {
         options.addOption(repoOption);
         options.addOption(appOption);
         options.addOption(fwkProperties);
+        options.addOption(varValue);
         options.addOption(debugOption);
         options.addOption(installerOption);
         options.addOption(cacheOption);
@@ -106,6 +108,13 @@ public class Main {
                     config.getInstallation().getFrameworkProperties().put(keyVal[0], keyVal[1]);
                 }
             }
+            if ( cl.hasOption(varValue.getOpt()) ) {
+                for(final String optVal : cl.getOptionValues(varValue.getOpt())) {
+                    final String[] keyVal = split(optVal);
+
+                    config.getVariables().put(keyVal[0], keyVal[1]);
+                }
+            }
             if ( cl.hasOption(debugOption.getOpt()) ) {
                 System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug");
             }
@@ -123,6 +132,10 @@ public class Main {
             }
         } catch ( final ParseException pe) {
             Main.LOG().error("Unable to parse command line: {}", pe.getMessage(), pe);
+
+            HelpFormatter formatter = new HelpFormatter();
+            formatter.printHelp("launcher", options);
+
             System.exit(1);
         }
     }