Repository: airavata Updated Branches: refs/heads/master 24babee47 -> 1a86ed907
https://issues.apache.org/jira/browse/AIRAVATA-1046 Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/71249304 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/71249304 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/71249304 Branch: refs/heads/master Commit: 71249304768b4d68ae98492363e9d5155881558c Parents: 4ee0852 Author: Saminda Wijeratne <[email protected]> Authored: Mon Mar 10 15:14:44 2014 -0400 Committer: Saminda Wijeratne <[email protected]> Committed: Mon Mar 10 15:14:44 2014 -0400 ---------------------------------------------------------------------- .../airavata/common/utils/StringUtil.java | 64 +++++++++++++++++--- .../org/apache/airavata/server/ServerMain.java | 10 +-- 2 files changed, 61 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/71249304/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java ---------------------------------------------------------------------- diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java index 044401f..f319218 100644 --- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java +++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java @@ -24,6 +24,7 @@ package org.apache.airavata.common.utils; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.ListIterator; @@ -374,9 +375,10 @@ public class StringUtil { return byteArrayOutputStream.toString(); } - public static Options deriveCommandLineOptions(String[] args){ + private static Options deriveCommandLineOptions(String[] args){ Options options = new Options(); - for (String arg : args) { + String[] argCopy = getChangedList(args); + for (String arg : argCopy) { if (arg.startsWith("--")){ arg=arg.substring(2); int pos = arg.indexOf('='); @@ -390,9 +392,9 @@ public class StringUtil { public static Map<String, String> parseCommandLineOptions(String[] args) { Map<String,String> commandLineOptions=new HashMap<String,String>(); try { - CommandLine cmdLine = getCommandLineParser(args); - for (Option s : cmdLine.getOptions()) { - commandLineOptions.put(s.getOpt(), s.getValue()); + CommandLineParameters cmdParameters = getCommandLineParser(args); + for (String s : cmdParameters.getParameters().keySet()) { + commandLineOptions.put(s, cmdParameters.getParameters().get(s)); } } catch (ParseException e1) { e1.printStackTrace(); @@ -400,11 +402,32 @@ public class StringUtil { return commandLineOptions; } - public static CommandLine getCommandLineParser(String[] args) + public static CommandLineParameters getCommandLineParser(String[] args) throws ParseException { + String[] argCopy = getChangedList(args); CommandLineParser parser = new DynamicOptionPosixParser(); - CommandLine cmdLine = parser.parse(deriveCommandLineOptions(args), args); - return cmdLine; + CommandLine cmdLine = parser.parse(deriveCommandLineOptions(argCopy), argCopy); + return new CommandLineParameters(cmdLine); + } + + + //commons-cli does not support arg names having the period (".") + private static final String ARG_DOT_REPLACE="dot_replacement_value"; + + private static String[] getChangedList(String[] args) { + String[] argCopy = Arrays.asList(args).toArray(new String []{}); + for (int i=0;i<argCopy.length; i++) { + argCopy[i]=changeOption(argCopy[i]); + } + return argCopy; + } + + private static String revertOption(String option){ + return option.replaceAll(Pattern.quote(ARG_DOT_REPLACE), "."); + } + + private static String changeOption(String option){ + return option.replaceAll(Pattern.quote("."), ARG_DOT_REPLACE); } private static class DynamicOptionPosixParser extends PosixParser{ @@ -416,5 +439,30 @@ public class StringUtil { } } } + + public static class CommandLineParameters{ + private Map<String,String> parameters=new HashMap<String, String>(); + private List<String> arguments=new ArrayList<String>(); + protected CommandLineParameters(CommandLine cmd){ + for(Option opt:cmd.getOptions()){ + parameters.put(revertOption(opt.getOpt()), revertOption(opt.getValue())); + } + for(String arg:cmd.getArgs()){ + arguments.add(revertOption(arg)); + } + } + public List<String> getArguments() { + return arguments; + } + public void setArguments(List<String> arguments) { + this.arguments = arguments; + } + public Map<String,String> getParameters() { + return parameters; + } + public void setParameters(Map<String,String> parameters) { + this.parameters = parameters; + } + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/71249304/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java ---------------------------------------------------------------------- diff --git a/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java b/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java index 5a51995..1123e54 100644 --- a/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java +++ b/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java @@ -31,7 +31,7 @@ import org.apache.airavata.common.exception.ApplicationSettingsException; import org.apache.airavata.common.utils.IServer; import org.apache.airavata.common.utils.ServerSettings; import org.apache.airavata.common.utils.StringUtil; -import org.apache.commons.cli.CommandLine; +import org.apache.airavata.common.utils.StringUtil.CommandLineParameters; import org.apache.commons.cli.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,12 +84,12 @@ public class ServerMain { } public static void main(String args[]) throws ParseException, IOException { - CommandLine commandLineParser = StringUtil.getCommandLineParser(args); + CommandLineParameters commandLineParameters = StringUtil.getCommandLineParser(args); - if (commandLineParser.getArgList().contains("stop")){ + if (commandLineParameters.getArguments().contains("stop")){ String serverIndexOption = "serverIndex"; - if (commandLineParser.hasOption(serverIndexOption)){ - serverIndex=Integer.parseInt(commandLineParser.getOptionValue(serverIndexOption)); + if (commandLineParameters.getParameters().containsKey(serverIndexOption)){ + serverIndex=Integer.parseInt(commandLineParameters.getParameters().get(serverIndexOption)); } if (isServerRunning()) { logger.info("Requesting airavata server"+(serverIndex==-1? "(s)":" instance "+serverIndex)+" to stop...");
