Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 324bb38be -> 08995e068


accept `-D...` options as part of `launch`, treat them as system properties
as if passed as a JVM arg, similar to how maven does it


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a20f85b7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a20f85b7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a20f85b7

Branch: refs/heads/master
Commit: a20f85b7f07a40048f296edcd06db7dae04217b1
Parents: 324bb38
Author: Alex Heneveld <[email protected]>
Authored: Sun Sep 20 17:15:30 2015 +0100
Committer: Alex Heneveld <[email protected]>
Committed: Sun Sep 20 17:43:37 2015 -0500

----------------------------------------------------------------------
 .../org/apache/brooklyn/cli/AbstractMain.java   | 37 ++++++++++++++++++--
 .../main/java/org/apache/brooklyn/cli/Main.java |  4 ++-
 .../java/org/apache/brooklyn/cli/CliTest.java   | 34 ++++++++++++++++--
 3 files changed, 68 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a20f85b7/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java
----------------------------------------------------------------------
diff --git a/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java 
b/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java
index b55111c..619768e 100644
--- a/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java
+++ b/usage/cli/src/main/java/org/apache/brooklyn/cli/AbstractMain.java
@@ -33,19 +33,22 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Callable;
 
 import javax.inject.Inject;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.brooklyn.api.catalog.BrooklynCatalog;
 import org.apache.brooklyn.cli.Main.LaunchCommand;
 import org.apache.brooklyn.core.BrooklynVersion;
+import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.exceptions.FatalConfigurationRuntimeException;
 import org.apache.brooklyn.util.exceptions.FatalRuntimeException;
 import org.apache.brooklyn.util.exceptions.UserFacingException;
+import org.apache.brooklyn.util.text.KeyValueParser;
 import org.apache.brooklyn.util.text.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
@@ -117,7 +120,7 @@ public abstract class AbstractMain {
                     .add("verbose", verbose)
                     .add("quiet", quiet);
         }
-
+        
         @Override
         public String toString() {
             return string().toString();
@@ -150,6 +153,34 @@ public abstract class AbstractMain {
                     .add("arguments", arguments);
         }
     }
+    
+    /** superclass which reads `-D` system property definitions and applies 
them
+     * <p>
+     * useful when scripting, e.g. where brooklyn.sh encodes `java o.a.b.Main 
"$@"` 
+     * but we want the caller to be able to pass system properties
+     */
+    public static abstract class BrooklynCommandWithSystemDefines extends 
BrooklynCommandCollectingArgs {
+        @Option(type = OptionType.GLOBAL, name = { "-D" }, description = "Set 
java system property")
+        public List<String> defines1;
+
+        @Option(name = { "-D" }, description = "Set java system property")
+        public List<String> defines2;
+
+        public List<String> getDefines() { return 
MutableList.copyOf(defines1).appendAll(defines2); }
+        public Map<String,String> getDefinesAsMap() { return 
KeyValueParser.parseMap(Strings.join(getDefines(),",")); }
+        public void applyDefinesAsSystemProperties() { 
System.getProperties().putAll(getDefinesAsMap()); }
+        
+        public ToStringHelper string() {
+            return super.string()
+                    .add("defines", getDefines());
+        }
+        
+        @Override
+        public Void call() throws Exception {
+            applyDefinesAsSystemProperties();
+            return null;
+        }
+    }
 
     @Command(name = "help", description = "Display help for available 
commands")
     public static class HelpCommand extends BrooklynCommand {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a20f85b7/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java
----------------------------------------------------------------------
diff --git a/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java 
b/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java
index b546d7b..1c66a04 100644
--- a/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java
+++ b/usage/cli/src/main/java/org/apache/brooklyn/cli/Main.java
@@ -194,7 +194,7 @@ public class Main extends AbstractMain {
     }
     
     @Command(name = "launch", description = "Starts a server, optionally with 
applications")
-    public static class LaunchCommand extends BrooklynCommandCollectingArgs {
+    public static class LaunchCommand extends BrooklynCommandWithSystemDefines 
{
 
         @Option(name = { "--localBrooklynProperties" }, title = "local 
brooklyn.properties file",
                 description = "Load the given properties file, specific to 
this launch (appending to and overriding global properties)")
@@ -381,6 +381,8 @@ public class Main extends AbstractMain {
         
         @Override
         public Void call() throws Exception {
+            super.call();
+            
             // Configure launcher
             BrooklynLauncher launcher;
             AppShutdownHandler shutdownHandler = new AppShutdownHandler();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a20f85b7/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java
----------------------------------------------------------------------
diff --git a/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java 
b/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java
index 01ec00f..c3d9eb6 100644
--- a/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java
+++ b/usage/cli/src/test/java/org/apache/brooklyn/cli/CliTest.java
@@ -47,6 +47,7 @@ import org.apache.brooklyn.api.entity.ImplementedBy;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.cli.AbstractMain.BrooklynCommand;
 import org.apache.brooklyn.cli.AbstractMain.BrooklynCommandCollectingArgs;
+import org.apache.brooklyn.cli.AbstractMain.DefaultInfoCommand;
 import org.apache.brooklyn.cli.AbstractMain.HelpCommand;
 import org.apache.brooklyn.cli.Main.AppShutdownHandler;
 import org.apache.brooklyn.cli.Main.GeneratePasswordCommand;
@@ -300,12 +301,39 @@ public class CliTest {
         cli.parse("launch", "blah", "my.App");
     }
     
+    @Test
     public void testHelpCommand() {
         Cli<BrooklynCommand> cli = buildCli();
         BrooklynCommand command = cli.parse("help");
-        assertTrue(command instanceof HelpCommand);
-        command = cli.parse();
-        assertTrue(command instanceof HelpCommand);
+        assertTrue(command instanceof HelpCommand, "Command is: "+command);
+    }
+    
+    @Test
+    public void testDefaultInfoCommand() {
+        Cli<BrooklynCommand> cli = buildCli();
+        BrooklynCommand command = cli.parse("");
+        assertTrue(command instanceof DefaultInfoCommand, "Command is: 
"+command);
+    }
+
+    @Test
+    public void testCliSystemPropertyDefines() {
+        Cli<BrooklynCommand> cli = buildCli();
+        BrooklynCommand command0 = cli.parse(
+            "-Dorg.apache.brooklyn.cli.CliTest.sample1=foo",
+            "-Dorg.apache.brooklyn.cli.CliTest.sample2=bar",
+            "launch", 
+            "-Dorg.apache.brooklyn.cli.CliTest.sample3=baz"
+            );
+        assertTrue(command0 instanceof LaunchCommand);
+        LaunchCommand command = (LaunchCommand) command0;
+        assertEquals(command.getDefines().size(), 3, 
+            "Command is: "+command);
+        
assertTrue(command.getDefines().get(0).equals("org.apache.brooklyn.cli.CliTest.sample1=foo"),
  
+            "Command is: "+command);
+        
assertTrue(command.getDefines().get(2).equals("org.apache.brooklyn.cli.CliTest.sample3=baz"),
 
+            "Command is: "+command);
+        
assertEquals(command.getDefinesAsMap().get("org.apache.brooklyn.cli.CliTest.sample3"),
 "baz",
+            "Command is: "+command);
     }
 
     @Test

Reply via email to