/////////////////////////////////////////////////////////////////////// // STANFORD LOGIC GROUP // // General Game Playing Project // // // // Sample Player Implementation // // // // (c) 2007. See LICENSE and CONTRIBUTORS. // /////////////////////////////////////////////////////////////////////// package stanfordlogic.util; import java.util.Map; import java.util.HashMap; import java.lang.RuntimeException; public class CommandLineParser { private String usage = "usage: None specified."; private Map<String, Boolean> flags = new HashMap<String, Boolean>(); private Map<String, String> params = new HashMap<String, String>(); public void setUsage(String newUsage) { usage = newUsage; } public void addFlag(String flagName) { if ( flags.containsKey(flagName) || params.containsKey(flagName) ) { throw new RuntimeException("The command line arg " + flagName + " is already in use!"); } flags.put(flagName, false); } public void addParam(String paramName) { if ( flags.containsKey(paramName) || params.containsKey(paramName) ) { throw new RuntimeException("The command line arg " + paramName + " is already in use!"); } params.put(paramName, null); } public boolean argSpecified(String argName) { if ( flags.containsKey(argName) ) { return (flags.get(argName) == true); } else if ( params.containsKey(argName) ) { return (params.get(argName) != null); } else { throw new RuntimeException("The command line arg " + argName + " does not exist!"); } } public String getArgAsString(String argName) { if ( flags.containsKey(argName) ) { return (flags.get(argName) == true) ? "True" : "False"; } else if ( params.containsKey(argName) ) { return params.get(argName); } else { throw new RuntimeException("The command line arg " + argName + " does not exist!"); } } public int getArgAsInt(String argName) { return Integer.parseInt(getArgAsString(argName)); } public void parse(String[] args) { for ( String arg : args ) { int equalsIndex = arg.indexOf('='); // Case: arg is not of the form arg=val if ( equalsIndex == -1 ) { if ( flags.containsKey(arg) ) { flags.put(arg, true); } else { System.out.println(usage); System.exit(1); } } // Case: arg is of the form arg=val else { String param = arg.substring(0, equalsIndex); String value = arg.substring(equalsIndex+1); if ( params.containsKey(param) ) { params.put(param, value); } else { System.out.println(usage); System.exit(1); } } } } }