You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by me...@apache.org on 2015/03/10 06:11:18 UTC

[1/2] stratos git commit: Bugfix for CLI command options (e.g. -f) not being accepted (ported from 4.0.0): from the CLI. They only worked in interactive CLI mode. This is because theparser in the StratosApplication class parses all the options (it trips

Repository: stratos
Updated Branches:
  refs/heads/master 21c5baa4c -> c18226c01


http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDomainMappingsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDomainMappingsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDomainMappingsCommand.java
index ca66caf..11702d1 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDomainMappingsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDomainMappingsCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class ListDomainMappingsCommand implements Command<StratosCommandContext>
 		return "[application-id]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesClustersCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesClustersCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesClustersCommand.java
index 9e926d1..dec547b 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesClustersCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesClustersCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class ListKubernetesClustersCommand implements Command<StratosCommandCont
 		return null;
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesHostsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesHostsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesHostsCommand.java
index 1b500b4..dcb21d8 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesHostsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListKubernetesHostsCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class ListKubernetesHostsCommand implements Command<StratosCommandContext
 		return "[cluster-id]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListNetworkPartitionCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListNetworkPartitionCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListNetworkPartitionCommand.java
index f18a260..6a05675 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListNetworkPartitionCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListNetworkPartitionCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListNetworkPartitionCommand implements Command<StratosCommandContex
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListPartialSearchTenantsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListPartialSearchTenantsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListPartialSearchTenantsCommand.java
index 7c2ef87..e6a3f8a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListPartialSearchTenantsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListPartialSearchTenantsCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,7 +62,7 @@ public class ListPartialSearchTenantsCommand implements Command<StratosCommandCo
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -74,16 +75,18 @@ public class ListPartialSearchTenantsCommand implements Command<StratosCommandCo
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("List cartridges by partial domain search");
                 }
 
-                if (commandLine.hasOption(CliConstants.TENANT_PARTIAL_SEARCH_OPTION)) {
+                if (opts.hasOption(CliConstants.TENANT_PARTIAL_SEARCH_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Partial domain option is passed");
                     }
-                    partialDomain = commandLine.getOptionValue(CliConstants.TENANT_PARTIAL_SEARCH_OPTION);
+                    partialDomain = opts.getOption(CliConstants.TENANT_PARTIAL_SEARCH_OPTION).getValue();
                 }
 
                 if (partialDomain == null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListTenants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListTenants.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListTenants.java
index 8cd040d..03740cc 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListTenants.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListTenants.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListTenants implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListUsers.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListUsers.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListUsers.java
index fe90c9b..e6cb0d6 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListUsers.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListUsers.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListUsers implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeCommand.java
index 5e3582e..7bc997b 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class RemoveCartridgeCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeGroupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeGroupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeGroupCommand.java
index 2f1d097..66c7845 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeGroupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveCartridgeGroupCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -59,7 +60,7 @@ public class RemoveCartridgeGroupCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDeploymentPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDeploymentPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDeploymentPolicyCommand.java
index 31d7905..b9823cd 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDeploymentPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDeploymentPolicyCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -52,7 +53,7 @@ public class RemoveDeploymentPolicyCommand implements Command<StratosCommandCont
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDomainMappingsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDomainMappingsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDomainMappingsCommand.java
index b711008..6d7a641 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDomainMappingsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveDomainMappingsCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -59,7 +60,7 @@ public class RemoveDomainMappingsCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesClusterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesClusterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesClusterCommand.java
index 677efae..b6e117c 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesClusterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesClusterCommand.java
@@ -59,7 +59,7 @@ public class RemoveKubernetesClusterCommand implements Command<StratosCommandCon
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesHostCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesHostCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesHostCommand.java
index 3bd5a1f..de81f53 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesHostCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveKubernetesHostCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -59,7 +60,7 @@ public class RemoveKubernetesHostCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveNetworkPartitionCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveNetworkPartitionCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveNetworkPartitionCommand.java
index 641a63e..a882521 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveNetworkPartitionCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/RemoveNetworkPartitionCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -52,7 +53,7 @@ public class RemoveNetworkPartitionCommand implements Command<StratosCommandCont
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SynchronizeArtifactsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SynchronizeArtifactsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SynchronizeArtifactsCommand.java
index 5a17a3d..433402a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SynchronizeArtifactsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SynchronizeArtifactsCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -50,7 +51,7 @@ public class SynchronizeArtifactsCommand implements Command<StratosCommandContex
 	}
 
 	@Override
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UndeployApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UndeployApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UndeployApplicationCommand.java
index 0fba797..dbec04c 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UndeployApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UndeployApplicationCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -59,7 +60,7 @@ public class UndeployApplicationCommand implements Command<StratosCommandContext
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateAutoscalingPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateAutoscalingPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateAutoscalingPolicyCommand.java
index 1154b07..7c8a05e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateAutoscalingPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateAutoscalingPolicyCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,7 @@ public class UpdateAutoscalingPolicyCommand implements Command<StratosCommandCon
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -83,16 +84,18 @@ public class UpdateAutoscalingPolicyCommand implements Command<StratosCommandCon
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Updating autoscaling policy");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     autoscalingPolicyDeployment = CliUtils.readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateCartridgeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateCartridgeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateCartridgeCommand.java
index da5cb1f..ae1ec4e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateCartridgeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateCartridgeCommand.java
@@ -24,6 +24,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,7 +65,7 @@ public class UpdateCartridgeCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -78,16 +79,18 @@ public class UpdateCartridgeCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Cartridge deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     cartridgeJson = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateDeploymentPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateDeploymentPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateDeploymentPolicyCommand.java
index 27c9a5b..b415b24 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateDeploymentPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateDeploymentPolicyCommand.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,7 +68,7 @@ public class UpdateDeploymentPolicyCommand implements Command<StratosCommandCont
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -81,12 +82,14 @@ public class UpdateDeploymentPolicyCommand implements Command<StratosCommandCont
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Updating deployment policy");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesHostCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesHostCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesHostCommand.java
index e39f6c0..f80cd9e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesHostCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesHostCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -72,7 +73,7 @@ public class UpdateKubernetesHostCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -85,26 +86,28 @@ public class UpdateKubernetesHostCommand implements Command<StratosCommandContex
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
             
-            if((commandLine.hasOption(CliConstants.RESOURCE_PATH)) && (commandLine.hasOption(CliConstants.HOST_ID_OPTION)) 
-            		&& (commandLine.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
+            if((opts.hasOption(CliConstants.RESOURCE_PATH)) && (opts.hasOption(CliConstants.HOST_ID_OPTION)) 
+            		&& (opts.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
             	               
                 // get cluster id arg value
-            	String clusterId = commandLine.getOptionValue(CliConstants.CLUSTER_ID_OPTION);
+            	String clusterId = opts.getOption(CliConstants.CLUSTER_ID_OPTION).getValue();
                 if (clusterId == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;
                 }
                 
                 // get host id arg value
-            	String hostId = commandLine.getOptionValue(CliConstants.HOST_ID_OPTION);
+            	String hostId = opts.getOption(CliConstants.HOST_ID_OPTION).getValue();
                 if (hostId == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;
                 }
                 
                 // get resource path arg value
-            	String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            	String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesMasterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesMasterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesMasterCommand.java
index ceab67a..d741a0e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesMasterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateKubernetesMasterCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,7 @@ public class UpdateKubernetesMasterCommand implements Command<StratosCommandCont
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -82,17 +83,19 @@ public class UpdateKubernetesMasterCommand implements Command<StratosCommandCont
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if((commandLine.hasOption(CliConstants.RESOURCE_PATH)) && (commandLine.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if((opts.hasOption(CliConstants.RESOURCE_PATH)) && (opts.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
             	               
                 // get cluster id arg value
-            	String clusterId = commandLine.getOptionValue(CliConstants.CLUSTER_ID_OPTION);
+            	String clusterId = opts.getOption(CliConstants.CLUSTER_ID_OPTION).getValue();
                 if (clusterId == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;
                 }
                 
                 // get resource path arg value
-            	String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            	String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateNetworkPartitionCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateNetworkPartitionCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateNetworkPartitionCommand.java
index aeb54af..fedec13 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateNetworkPartitionCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateNetworkPartitionCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,7 +65,7 @@ public class UpdateNetworkPartitionCommand implements Command<StratosCommandCont
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -78,16 +79,18 @@ public class UpdateNetworkPartitionCommand implements Command<StratosCommandCont
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Network partition deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     partitionJson = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateTenantCommand.java
index 80ce7db..1d9c776 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateTenantCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -90,7 +91,7 @@ public class UpdateTenantCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -109,54 +110,56 @@ public class UpdateTenantCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Update tenant");
                 }
 
-                if (commandLine.hasOption(CliConstants.USERNAME_OPTION)) {
+                if (opts.hasOption(CliConstants.USERNAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Username option is passed");
                     }
-                    admin = commandLine.getOptionValue(CliConstants.USERNAME_OPTION);
+                    admin = opts.getOption(CliConstants.USERNAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.FIRST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.FIRST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("First name option is passed");
                     }
-                    firstName = commandLine.getOptionValue(CliConstants.FIRST_NAME_OPTION);
+                    firstName = opts.getOption(CliConstants.FIRST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.LAST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.LAST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Last name option is passed");
                     }
-                    lastaName = commandLine.getOptionValue(CliConstants.LAST_NAME_OPTION);
+                    lastaName = opts.getOption(CliConstants.LAST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PASSWORD_OPTION)) {
+                if (opts.hasOption(CliConstants.PASSWORD_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Password option is passed");
                     }
-                    password = commandLine.getOptionValue(CliConstants.PASSWORD_OPTION);
+                    password = opts.getOption(CliConstants.PASSWORD_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.DOMAIN_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.DOMAIN_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Domain name option is passed");
                     }
-                    domain = commandLine.getOptionValue(CliConstants.DOMAIN_NAME_OPTION);
+                    domain = opts.getOption(CliConstants.DOMAIN_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.EMAIL_OPTION)) {
+                if (opts.hasOption(CliConstants.EMAIL_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Email option is passed");
                     }
-                    email = commandLine.getOptionValue(CliConstants.EMAIL_OPTION);
+                    email = opts.getOption(CliConstants.EMAIL_OPTION).getValue();
 
                 }
 
-                if (commandLine.hasOption(CliConstants.ID_OPTION)) {
+                if (opts.hasOption(CliConstants.ID_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Id option is passed");
                     }
-                    id = Integer.parseInt(commandLine.getOptionValue(CliConstants.ID_OPTION));
+                    id = Integer.parseInt(opts.getOption(CliConstants.ID_OPTION).getValue());
 
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateUserCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateUserCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateUserCommand.java
index 3b4667f..c33bce7 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateUserCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UpdateUserCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -90,7 +91,7 @@ public class UpdateUserCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -109,52 +110,54 @@ public class UpdateUserCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Update user");
                 }
 
-                if (commandLine.hasOption(CliConstants.USERNAME_OPTION)) {
+                if (opts.hasOption(CliConstants.USERNAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Username option is passed");
                     }
-                    userName = commandLine.getOptionValue(CliConstants.USERNAME_OPTION);
+                    userName = opts.getOption(CliConstants.USERNAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PASSWORD_OPTION)) {
+                if (opts.hasOption(CliConstants.PASSWORD_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Credential option is passed");
                     }
-                    credential = commandLine.getOptionValue(CliConstants.PASSWORD_OPTION);
+                    credential = opts.getOption(CliConstants.PASSWORD_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.ROLE_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.ROLE_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Role option is passed");
                     }
-                    role = commandLine.getOptionValue(CliConstants.ROLE_NAME_OPTION);
+                    role = opts.getOption(CliConstants.ROLE_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.FIRST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.FIRST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("First name option is passed");
                     }
-                    firstName = commandLine.getOptionValue(CliConstants.FIRST_NAME_OPTION);
+                    firstName = opts.getOption(CliConstants.FIRST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.LAST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.LAST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Last name option is passed");
                     }
-                    lastName = commandLine.getOptionValue(CliConstants.LAST_NAME_OPTION);
+                    lastName = opts.getOption(CliConstants.LAST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.EMAIL_OPTION)) {
+                if (opts.hasOption(CliConstants.EMAIL_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Email option is passed");
                     }
-                    email = commandLine.getOptionValue(CliConstants.EMAIL_OPTION);
+                    email = opts.getOption(CliConstants.EMAIL_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PROFILE_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.PROFILE_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Profile name option is passed");
                     }
-                    profileName = commandLine.getOptionValue(CliConstants.PROFILE_NAME_OPTION);
+                    profileName = opts.getOption(CliConstants.PROFILE_NAME_OPTION).getValue();
                 }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliUtils.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliUtils.java
index 1304b69..532e046 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliUtils.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliUtils.java
@@ -34,6 +34,9 @@ import java.net.SocketException;
 import java.text.MessageFormat;
 import java.util.ResourceBundle;
 
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+
 public class CliUtils {
     private static Log log = LogFactory.getLog(CliUtils.class);
 
@@ -183,4 +186,16 @@ public class CliUtils {
             System.out.println(response.getStatusLine().toString());
         }
     }
+    
+    public static Options mergeOptionArrays(Option[] a, Option[] b) {
+        Options opts = new Options();
+        for (Option o: a) {
+            opts.addOption(o);
+        }
+        for (Option o: b) {
+            opts.addOption(o);
+        }
+        return opts;
+    }
+
 }


[2/2] stratos git commit: Bugfix for CLI command options (e.g. -f) not being accepted (ported from 4.0.0): from the CLI. They only worked in interactive CLI mode. This is because theparser in the StratosApplication class parses all the options (it trips

Posted by me...@apache.org.
Bugfix for CLI command options (e.g. -f) not being accepted (ported from 4.0.0): from the CLI. They only worked in interactive CLI mode. This is because theparser in the StratosApplication class parses all the options (it trips over unrecognised options), and the remaining arguments are passed down to the Command classes. These classes then parse those, but all options are now missing from them. If a command is invoked via the CLI, options would still be present, since the CLI commands are not parsed with the same logic as the command line arguments. This bugfix extends the execute function of the Command interface such that it accepts an argument called already_parsed_opts, which will contain options parsed in StratosApplication. These options are merged with any options parsed in the command module, and the merged options are then used in the remaining Command-specific code.


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

Branch: refs/heads/master
Commit: c18226c01b6d7e75c8c6bcdf1294e5288b816e1d
Parents: 21c5baa
Author: Martin Eppel <me...@cisco..com>
Authored: Mon Mar 9 22:09:43 2015 -0700
Committer: Martin Eppel <me...@cisco..com>
Committed: Mon Mar 9 22:09:43 2015 -0700

----------------------------------------------------------------------
 .../java/org/apache/stratos/cli/Command.java    |  5 ++-
 .../apache/stratos/cli/StratosApplication.java  |  8 +++--
 .../cli/commands/ActivateTenantCommand.java     |  3 +-
 .../commands/AddApplicationSignupCommand.java   | 10 ++++--
 .../commands/AddAutoscalingPolicyCommand.java   | 10 ++++--
 .../cli/commands/AddCartridgeCommand.java       | 10 ++++--
 .../cli/commands/AddCartridgeGroupCommand.java  | 10 ++++--
 .../commands/AddDeploymentPolicyCommand.java    | 10 ++++--
 .../cli/commands/AddDomainMappingsCommand.java  |  9 ++++--
 .../commands/AddKubernetesClusterCommand.java   |  9 ++++--
 .../cli/commands/AddKubernetesHostCommand.java  | 11 ++++---
 .../commands/AddNetworkPartitionCommand.java    |  9 ++++--
 .../stratos/cli/commands/AddTenantCommand.java  | 29 +++++++++--------
 .../stratos/cli/commands/AddUserCommand.java    | 33 +++++++++++---------
 .../cli/commands/CreateApplicationCommand.java  | 10 ++++--
 .../cli/commands/DeactivateTenantCommand.java   |  3 +-
 .../cli/commands/DeleteApplicationCommand.java  |  3 +-
 .../DeleteApplicationSignupCommand.java         |  3 +-
 .../DeleteAutoScalingPolicyCommand.java         |  3 +-
 .../cli/commands/DeleteTenantCommand.java       |  3 +-
 .../stratos/cli/commands/DeleteUserCommand.java |  3 +-
 .../cli/commands/DeployApplicationCommand.java  | 14 ++++++---
 .../commands/DescribeApplicationCommand.java    |  3 +-
 .../DescribeApplicationRuntimeCommand.java      |  3 +-
 .../DescribeApplicationSignupCommand.java       |  3 +-
 .../DescribeAutoScalingPolicyCommand.java       |  2 +-
 .../cli/commands/DescribeCartridgeCommand.java  |  2 +-
 .../commands/DescribeCartridgeGroupCommand.java |  3 +-
 .../DescribeDeploymentPolicyCommand.java        |  2 +-
 .../DescribeKubernetesClusterCommand.java       |  3 +-
 .../DescribeKubernetesMasterCommand.java        |  3 +-
 .../DescribeNetworkPartitionCommand.java        |  3 +-
 .../cli/commands/DescribeTenantCommand.java     |  3 +-
 .../stratos/cli/commands/ExitCommand.java       |  5 +--
 .../stratos/cli/commands/HelpCommand.java       |  3 +-
 .../stratos/cli/commands/InfoCommand.java       |  3 +-
 .../cli/commands/ListApplicationsCommand.java   |  3 +-
 .../commands/ListAutoscalePolicyCommand.java    |  3 +-
 .../commands/ListCartridgeGroupsCommand.java    |  3 +-
 .../commands/ListCartridgesByFilterCommand.java |  9 ++++--
 .../cli/commands/ListCartridgesCommand.java     |  3 +-
 .../commands/ListDeploymentPoliciesCommand.java |  3 +-
 .../cli/commands/ListDomainMappingsCommand.java |  3 +-
 .../commands/ListKubernetesClustersCommand.java |  3 +-
 .../commands/ListKubernetesHostsCommand.java    |  3 +-
 .../commands/ListNetworkPartitionCommand.java   |  3 +-
 .../ListPartialSearchTenantsCommand.java        |  9 ++++--
 .../stratos/cli/commands/ListTenants.java       |  3 +-
 .../apache/stratos/cli/commands/ListUsers.java  |  3 +-
 .../cli/commands/RemoveCartridgeCommand.java    |  3 +-
 .../commands/RemoveCartridgeGroupCommand.java   |  3 +-
 .../commands/RemoveDeploymentPolicyCommand.java |  3 +-
 .../commands/RemoveDomainMappingsCommand.java   |  3 +-
 .../RemoveKubernetesClusterCommand.java         |  2 +-
 .../commands/RemoveKubernetesHostCommand.java   |  3 +-
 .../commands/RemoveNetworkPartitionCommand.java |  3 +-
 .../commands/SynchronizeArtifactsCommand.java   |  3 +-
 .../commands/UndeployApplicationCommand.java    |  3 +-
 .../UpdateAutoscalingPolicyCommand.java         |  9 ++++--
 .../cli/commands/UpdateCartridgeCommand.java    |  9 ++++--
 .../commands/UpdateDeploymentPolicyCommand.java |  7 +++--
 .../commands/UpdateKubernetesHostCommand.java   | 15 +++++----
 .../commands/UpdateKubernetesMasterCommand.java | 11 ++++---
 .../commands/UpdateNetworkPartitionCommand.java |  9 ++++--
 .../cli/commands/UpdateTenantCommand.java       | 33 +++++++++++---------
 .../stratos/cli/commands/UpdateUserCommand.java | 33 +++++++++++---------
 .../org/apache/stratos/cli/utils/CliUtils.java  | 15 +++++++++
 67 files changed, 301 insertions(+), 166 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
index 6516556..c3cd04f 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/Command.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.exception.CommandException;
 
@@ -58,10 +59,12 @@ public interface Command<T extends CommandContext> {
 	 *            The context assoicated with the Command Line Application
 	 * @param args
 	 *            The arguments for the command
+	 * @param already_parsed_opts
+	 *            Options parsed by any parent parsers.
 	 * @return The status code
 	 * @throws org.apache.stratos.cli.exception.CommandException
 	 *             if any errors occur when executing the command
 	 */
-	int execute(T context, String[] args) throws CommandException;
+	int execute(T context, String[] args, Option[] already_parsed_opts) throws CommandException;
 
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
index 532f043..a735914 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
@@ -312,6 +312,8 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
 
         // Command action
         String action = null;
+        // Command action options
+        Option[] actionOptions = null;
 
         String usernameInput = null;
         String passwordInput = null;
@@ -329,6 +331,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
             CommandLine commandLine;
             try {
                 // Must add all options. Otherwise actions cannot be performed directly by command line.
+            	// This is because the parser trips over unrecognised options.
                 Options allCommandOptions = new Options();
                 for (Command<StratosCommandContext> command : commands.values()) {
                     Options commandOptions = command.getOptions();
@@ -347,6 +350,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
 
                 commandLine = parser.parse(options, args, true);
                 remainingArgs = commandLine.getArgs();
+                actionOptions = commandLine.getOptions();
                 if (remainingArgs != null && remainingArgs.length > 0) {
                     // Get command action
                     action = remainingArgs[0];
@@ -412,7 +416,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
                 if (logger.isDebugEnabled()) {
                     logger.debug("Executing Action: {} {}", action, Arrays.asList(actionArgs));
                 }
-                int returnCode = command.execute(context, actionArgs);
+                int returnCode = command.execute(context, actionArgs, actionOptions);
                 if (logger.isDebugEnabled()) {
                     logger.debug("Exiting with error code {} after executing action {}", returnCode, action);
                 }
@@ -506,7 +510,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
             return CliConstants.COMMAND_FAILED;
         }
         try {
-            return command.execute(context, actionArgs);
+        	return command.execute(context, actionArgs, new Option[0]);
         } catch (CommandException e) {
             if (logger.isErrorEnabled()) {
                 logger.error("Error executing command: " + action, e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
index b9923ab..7aa0b81 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ActivateTenantCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class ActivateTenantCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
index a0ecd2e..8425fc7 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddApplicationSignupCommand.java
@@ -26,8 +26,10 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.IOException;
 
 /**
@@ -68,7 +70,7 @@ public class AddApplicationSignupCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -82,8 +84,10 @@ public class AddApplicationSignupCommand implements Command<StratosCommandContex
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " " + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
index 51c7769..f666bff 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddAutoscalingPolicyCommand.java
@@ -24,8 +24,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class AddAutoscalingPolicyCommand implements Command<StratosCommandContex
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class AddAutoscalingPolicyCommand implements Command<StratosCommandContex
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Autoscaling policy deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     autoscalingPolicyDeployment = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
index dcb8846..b32c965 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeCommand.java
@@ -24,8 +24,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class AddCartridgeCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class AddCartridgeCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+              //merge newly discovered options with previously discovered ones.
+              Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Cartridge deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     cartridgeJson = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
index cba6cf3..ce26680 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddCartridgeGroupCommand.java
@@ -26,8 +26,10 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.IOException;
 
 /**
@@ -68,7 +70,7 @@ public class AddCartridgeGroupCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -81,8 +83,10 @@ public class AddCartridgeGroupCommand implements Command<StratosCommandContext>
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " " + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
index c5a5b92..7070594 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDeploymentPolicyCommand.java
@@ -25,8 +25,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class AddDeploymentPolicyCommand implements Command<StratosCommandContext
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class AddDeploymentPolicyCommand implements Command<StratosCommandContext
 
             try {
                 commandLine = parser.parse(options, args);
+              //merge newly discovered options with previously discovered ones.
+              Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Deployment policy deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     deploymentPolicyDeployment = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
index 775d0a3..35f1ec4 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddDomainMappingsCommand.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,7 @@ public class AddDomainMappingsCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -82,8 +83,10 @@ public class AddDomainMappingsCommand implements Command<StratosCommandContext>
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " "
                             + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
index 0ca4246..b785bb5 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesClusterCommand.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,7 @@ public class AddKubernetesClusterCommand implements Command<StratosCommandContex
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -82,8 +83,10 @@ public class AddKubernetesClusterCommand implements Command<StratosCommandContex
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
-            if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
-                String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+            if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
+                String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     System.out.println("usage: " + getName() + " [-" + CliConstants.RESOURCE_PATH + " " + CliConstants.RESOURCE_PATH_LONG_OPTION + "]");
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
index 60ca1f8..d0548fd 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddKubernetesHostCommand.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
 import org.apache.stratos.cli.utils.CliUtils;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,7 +74,7 @@ public class AddKubernetesHostCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }
@@ -86,18 +87,20 @@ public class AddKubernetesHostCommand implements Command<StratosCommandContext>
         try {
             CommandLineParser parser = new GnuParser();
             CommandLine commandLine = parser.parse(options, args);
+            //merge newly discovered options with previously discovered ones.
+            Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
             
-            if((commandLine.hasOption(CliConstants.RESOURCE_PATH)) && (commandLine.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
+            if((opts.hasOption(CliConstants.RESOURCE_PATH)) && (opts.hasOption(CliConstants.CLUSTER_ID_OPTION))) {
 	               
                 // get cluster id arg value
-            	String clusterId = commandLine.getOptionValue(CliConstants.CLUSTER_ID_OPTION);
+            	String clusterId = opts.getOption(CliConstants.CLUSTER_ID_OPTION).getValue();
                 if (clusterId == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;
                 }
                 
                 // get resource path arg value
-            	String resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+            	String resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                 if (resourcePath == null) {
                     context.getStratosApplication().printUsage(getName());
                     return CliConstants.COMMAND_FAILED;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
index 299b241..d93c41e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddNetworkPartitionCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -101,7 +102,7 @@ public class AddNetworkPartitionCommand implements Command<StratosCommandContext
      * @throws org.apache.stratos.cli.exception.CommandException if any errors occur when executing the command
      */
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
             logger.debug("Get name" + getName());
@@ -116,16 +117,18 @@ public class AddNetworkPartitionCommand implements Command<StratosCommandContext
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Network Partition deployment");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    
                     partitionJson = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
index fd9bfd3..9310071 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddTenantCommand.java
@@ -28,6 +28,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.Option;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 
 public class AddTenantCommand implements Command<StratosCommandContext> {
 
@@ -87,7 +88,7 @@ public class AddTenantCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -105,46 +106,48 @@ public class AddTenantCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+              //merge newly discovered options with previously discovered ones.
+              Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Add tenant");
                 }
 
-                if (commandLine.hasOption(CliConstants.USERNAME_OPTION)) {
+                if (opts.hasOption(CliConstants.USERNAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Username option is passed");
                     }
-                    admin = commandLine.getOptionValue(CliConstants.USERNAME_OPTION);
+                    admin = opts.getOption(CliConstants.USERNAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.FIRST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.FIRST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("First name option is passed");
                     }
-                    firstName = commandLine.getOptionValue(CliConstants.FIRST_NAME_OPTION);
+                    firstName = opts.getOption(CliConstants.FIRST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.LAST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.LAST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Last name option is passed");
                     }
-                    lastaName = commandLine.getOptionValue(CliConstants.LAST_NAME_OPTION);
+                    lastaName = opts.getOption(CliConstants.LAST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PASSWORD_OPTION)) {
+                if (opts.hasOption(CliConstants.PASSWORD_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Password option is passed");
                     }
-                    password = commandLine.getOptionValue(CliConstants.PASSWORD_OPTION);
+                    password = opts.getOption(CliConstants.PASSWORD_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.DOMAIN_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.DOMAIN_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Domain name option is passed");
                     }
-                    domain = commandLine.getOptionValue(CliConstants.DOMAIN_NAME_OPTION);
+                    domain = opts.getOption(CliConstants.DOMAIN_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.EMAIL_OPTION)) {
+                if (opts.hasOption(CliConstants.EMAIL_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Email option is passed");
                     }
-                    email = commandLine.getOptionValue(CliConstants.EMAIL_OPTION);
+                    email = opts.getOption(CliConstants.EMAIL_OPTION).getValue();
 
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
index e3ebb07..9e1689e 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/AddUserCommand.java
@@ -29,6 +29,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -95,7 +96,7 @@ public class AddUserCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -114,52 +115,54 @@ public class AddUserCommand implements Command<StratosCommandContext> {
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Add user");
                 }
 
-                if (commandLine.hasOption(CliConstants.USERNAME_OPTION)) {
+                if (opts.hasOption(CliConstants.USERNAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Username option is passed");
                     }
-                    userName = commandLine.getOptionValue(CliConstants.USERNAME_OPTION);
+                    userName = opts.getOption(CliConstants.USERNAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PASSWORD_OPTION)) {
+                if (opts.hasOption(CliConstants.PASSWORD_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Credential option is passed");
                     }
-                    credential = commandLine.getOptionValue(CliConstants.PASSWORD_OPTION);
+                    credential = opts.getOption(CliConstants.PASSWORD_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.ROLE_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.ROLE_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Role option is passed");
                     }
-                    role = commandLine.getOptionValue(CliConstants.ROLE_NAME_OPTION);
+                    role = opts.getOption(CliConstants.ROLE_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.FIRST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.FIRST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("First name option is passed");
                     }
-                    firstName = commandLine.getOptionValue(CliConstants.FIRST_NAME_OPTION);
+                    firstName = opts.getOption(CliConstants.FIRST_NAME_OPTION).getValue();;
                 }
-                if (commandLine.hasOption(CliConstants.LAST_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.LAST_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Last name option is passed");
                     }
-                    lastName = commandLine.getOptionValue(CliConstants.LAST_NAME_OPTION);
+                    lastName = opts.getOption(CliConstants.LAST_NAME_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.EMAIL_OPTION)) {
+                if (opts.hasOption(CliConstants.EMAIL_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Email option is passed");
                     }
-                    email = commandLine.getOptionValue(CliConstants.EMAIL_OPTION);
+                    email = opts.getOption(CliConstants.EMAIL_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.PROFILE_NAME_OPTION)) {
+                if (opts.hasOption(CliConstants.PROFILE_NAME_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Profile name option is passed");
                     }
-                    profileName = commandLine.getOptionValue(CliConstants.PROFILE_NAME_OPTION);
+                    profileName = opts.getOption(CliConstants.PROFILE_NAME_OPTION).getValue();
                 }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
index 1cbb7fa..0a07ee2 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/CreateApplicationCommand.java
@@ -24,8 +24,10 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class CreateApplicationCommand implements Command<StratosCommandContext>
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -77,16 +79,18 @@ public class CreateApplicationCommand implements Command<StratosCommandContext>
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("Creating application...");
                 }
 
-                if (commandLine.hasOption(CliConstants.RESOURCE_PATH)) {
+                if (opts.hasOption(CliConstants.RESOURCE_PATH)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Resource path option is passed");
                     }
-                    resourcePath = commandLine.getOptionValue(CliConstants.RESOURCE_PATH);
+                    resourcePath = opts.getOption(CliConstants.RESOURCE_PATH).getValue();
                     applicationDefinition = readResource(resourcePath);
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
index ce4cf51..6ebb3ca 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeactivateTenantCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeactivateTenantCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
index 9286ed1..ee27f92 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteApplicationCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
index dfced5b..f8c1c0f 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteApplicationSignupCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteApplicationSignupCommand implements Command<StratosCommandCon
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
index 5830b46..84d96c3 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteAutoScalingPolicyCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteAutoScalingPolicyCommand implements Command<StratosCommandCon
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
index 4ff72f4..1f82fa3 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteTenantCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteTenantCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
index f884665..82f37e0 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -51,7 +52,7 @@ public class DeleteUserCommand implements Command<StratosCommandContext> {
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
index 5fa6b86..dbde8f9 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeployApplicationCommand.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -78,7 +79,7 @@ public class DeployApplicationCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -93,21 +94,24 @@ public class DeployApplicationCommand implements Command<StratosCommandContext>
             try {
                 commandLine = parser.parse(options, args);
 
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
+
                 if (logger.isDebugEnabled()) {
                     logger.debug("Deploy application");
                 }
 
-                if (commandLine.hasOption(CliConstants.APPLICATION_ID_OPTION)) {
+                if (opts.hasOption(CliConstants.APPLICATION_ID_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Application Id option is passed");
                     }
-                    applicationId = commandLine.getOptionValue(CliConstants.APPLICATION_ID_OPTION);
+                    applicationId = opts.getOption(CliConstants.APPLICATION_ID_OPTION).getValue();
                 }
-                if (commandLine.hasOption(CliConstants.APPLICATION_POLICY_ID_OPTION)) {
+                if (opts.hasOption(CliConstants.APPLICATION_POLICY_ID_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Application policy Id option is passed");
                     }
-                    applicationPolicyId = commandLine.getOptionValue(CliConstants.APPLICATION_POLICY_ID_OPTION);
+                    applicationPolicyId = opts.getOption(CliConstants.APPLICATION_POLICY_ID_OPTION).getValue();
                 }
 
                 if (applicationId == null || applicationPolicyId == null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
index dbac1e8..a6f0bec 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeApplicationCommand implements Command<StratosCommandContext
 		return "[application-id]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
index 4405518..45bc3a0 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationRuntimeCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeApplicationRuntimeCommand implements Command<StratosCommand
         return "[application-id]";
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing command: ", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
index a9e4c36..3983be2 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeApplicationSignupCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeApplicationSignupCommand implements Command<StratosCommandC
 		return "[application-id]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
index a056141..8773b33 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeAutoScalingPolicyCommand.java
@@ -51,7 +51,7 @@ public class DescribeAutoScalingPolicyCommand implements Command<StratosCommandC
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
index f3430fc..fcba2e7 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeCommand.java
@@ -51,7 +51,7 @@ public class DescribeCartridgeCommand implements Command<StratosCommandContext>
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
index 193c458..b22649c 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeCartridgeGroupCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -47,7 +48,7 @@ public class DescribeCartridgeGroupCommand implements Command<StratosCommandCont
 		return "[group-name]";
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing command: ", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
index b092d1f..eccb05a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeDeploymentPolicyCommand.java
@@ -51,7 +51,7 @@ public class DescribeDeploymentPolicyCommand implements Command<StratosCommandCo
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
index 8ac4923..70de471 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesClusterCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -52,7 +53,7 @@ public class DescribeKubernetesClusterCommand implements Command<StratosCommandC
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
index 9b423ea..eb5d878 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeKubernetesMasterCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -53,7 +54,7 @@ public class DescribeKubernetesMasterCommand implements Command<StratosCommandCo
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
index f3cec36..5e9c5af 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeNetworkPartitionCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -52,7 +53,7 @@ public class DescribeNetworkPartitionCommand implements Command<StratosCommandCo
     }
 
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
index c4a451e..8add681 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DescribeTenantCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -79,7 +80,7 @@ public class DescribeTenantCommand implements Command<StratosCommandContext> {
      * @throws org.apache.stratos.cli.exception.CommandException if any errors occur when executing the command
      */
     @Override
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
index 4605113..5f8b407 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ExitCommand.java
@@ -18,8 +18,9 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
-    import org.slf4j.Logger;
+import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.StratosCommandContext;
@@ -49,7 +50,7 @@ public class ExitCommand implements Command<StratosCommandContext> {
 	}
 
 	@Override
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		// Nothing to execute here. This is a special command.
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
index 2257f11..8c1ed13 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/HelpCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,7 +50,7 @@ public class HelpCommand implements Command<StratosCommandContext> {
 	}
 
 	@Override
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
index 804d7e0..962413f 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/InfoCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,7 +51,7 @@ public class InfoCommand implements Command<StratosCommandContext> {
 	}
 
 	@Override
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
index a59d131..a80d67a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListApplicationsCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListApplicationsCommand implements Command<StratosCommandContext> {
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
index aa5a8cb..e8a8060 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAutoscalePolicyCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListAutoscalePolicyCommand implements Command<StratosCommandContext
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
index 6a2a540..a80364a 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgeGroupsCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListCartridgeGroupsCommand implements Command<StratosCommandContext
 		return null;
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
index 1fcf70f..3a9497d 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesByFilterCommand.java
@@ -6,6 +6,7 @@ import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import static org.apache.stratos.cli.utils.CliUtils.mergeOptionArrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,7 +46,7 @@ public class ListCartridgesByFilterCommand implements Command<StratosCommandCont
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }
@@ -58,16 +59,18 @@ public class ListCartridgesByFilterCommand implements Command<StratosCommandCont
 
             try {
                 commandLine = parser.parse(options, args);
+                //merge newly discovered options with previously discovered ones.
+                Options opts = mergeOptionArrays(already_parsed_opts, commandLine.getOptions());
 
                 if (logger.isDebugEnabled()) {
                     logger.debug("List cartridges by a filter");
                 }
 
-                if (commandLine.hasOption(CliConstants.CARTRIDGE_FILTER_OPTION)) {
+                if (opts.hasOption(CliConstants.CARTRIDGE_FILTER_OPTION)) {
                     if (logger.isTraceEnabled()) {
                         logger.trace("Filter option is passed");
                     }
-                    filter = commandLine.getOptionValue(CliConstants.CARTRIDGE_FILTER_OPTION);
+                    filter = opts.getOption(CliConstants.CARTRIDGE_FILTER_OPTION).getValue();
                 }
 
                 if (filter == null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
index 1014003..f998d89 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListCartridgesCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.RestCommandLineService;
 import org.slf4j.Logger;
@@ -46,7 +47,7 @@ public class ListCartridgesCommand implements Command<StratosCommandContext> {
 		return null;
 	}
 
-	public int execute(StratosCommandContext context, String[] args) throws CommandException {
+	public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Executing {} command...", getName());
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c18226c0/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
index a9cb6fb..3f37b06 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListDeploymentPoliciesCommand.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cli.commands;
 
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.stratos.cli.Command;
 import org.apache.stratos.cli.RestCommandLineService;
@@ -46,7 +47,7 @@ public class ListDeploymentPoliciesCommand implements Command<StratosCommandCont
         return null;
     }
 
-    public int execute(StratosCommandContext context, String[] args) throws CommandException {
+    public int execute(StratosCommandContext context, String[] args, Option[] already_parsed_opts) throws CommandException {
         if (logger.isDebugEnabled()) {
             logger.debug("Executing {} command...", getName());
         }