package voldemort.utils; import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Set; import joptsimple.OptionParser; import joptsimple.OptionSet; import joptsimple.OptionSpec; import com.google.common.base.Joiner; /** * Helper functions for command line parsing. Because jopt-simple is a little * too simple. * * */ public class CmdUtils { public static Set<String> missing(OptionSet options, String... required) { Set<String> missing = new HashSet<String>(); for(String arg: required) if(!options.has(arg)) missing.add(arg); return missing; } public static Set<OptionSpec<?>> missing(OptionSet options, OptionSpec<?>... required) { Set<OptionSpec<?>> missing = new HashSet<OptionSpec<?>>(); for(OptionSpec<?> opt: required) if(!options.has(opt)) missing.add(opt); return missing; } @SuppressWarnings("unchecked") public static <T> T valueOf(OptionSet options, String opt, T defaultValue) { if(options.has(opt) && options.valueOf(opt) != null) return (T) options.valueOf(opt); else return defaultValue; } public static <T> T valueOf(OptionSet options, OptionSpec<T> opt, T defaultValue) { if(options.has(opt) && options.valueOf(opt) != null) return options.valueOf(opt); else return defaultValue; } @SuppressWarnings("unchecked") public static <T> List<T> valuesOf(OptionSet options, String opt, List<T> defaultList) { if (options.has(opt) && options.valuesOf(opt) != null) return (List<T>) options.valuesOf(opt); else return defaultList; } public static void croakIfMissing(OptionParser parser, OptionSet options, String... required) { Set<String> missing = CmdUtils.missing(options, required); if(missing.size() > 0) { System.err.println("Missing required arguments: " + Joiner.on(", ").join(missing)); try { parser.printHelpOn(System.err); } catch(IOException e) { e.printStackTrace(); } System.exit(1); } } }