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