List of usage examples for org.apache.commons.cli OptionGroup setRequired
public void setRequired(boolean required)
From source file:org.apache.sentry.binding.hive.authz.SentryConfigTool.java
/** * parse arguments/* w ww . j a v a 2 s. c o m*/ * * <pre> * -d,--debug Enable debug output * -e,--query <arg> Query privilege verification, requires -u * -h,--help Print usage * -i,--policyIni <arg> Policy file path * -j,--jdbcURL <arg> JDBC URL * -l,--listPrivs,--listPerms List privilges for given user, requires -u * -p,--password <arg> Password * -s,--sentry-site <arg> sentry-site file path * -u,--user <arg> user name * -v,--validate Validate policy file * -I,--import Import policy file * -E,--export Export policy file * -o,--overwrite Overwrite the exist role data when do the import * </pre> * * @param args */ private void parseArgs(String[] args) { boolean enableDebug = false; Options sentryOptions = new Options(); Option helpOpt = new Option("h", "help", false, "Print usage"); helpOpt.setRequired(false); Option validateOpt = new Option("v", "validate", false, "Validate policy file"); validateOpt.setRequired(false); Option queryOpt = new Option("e", "query", true, "Query privilege verification, requires -u"); queryOpt.setRequired(false); Option listPermsOpt = new Option("l", "listPerms", false, "list permissions for given user, requires -u"); listPermsOpt.setRequired(false); Option listPrivsOpt = new Option("listPrivs", false, "list privileges for given user, requires -u"); listPrivsOpt.setRequired(false); Option importOpt = new Option("I", "import", true, "Import policy file"); importOpt.setRequired(false); Option exportOpt = new Option("E", "export", true, "Export policy file"); exportOpt.setRequired(false); // required args OptionGroup sentryOptGroup = new OptionGroup(); sentryOptGroup.addOption(helpOpt); sentryOptGroup.addOption(validateOpt); sentryOptGroup.addOption(queryOpt); sentryOptGroup.addOption(listPermsOpt); sentryOptGroup.addOption(listPrivsOpt); sentryOptGroup.addOption(importOpt); sentryOptGroup.addOption(exportOpt); sentryOptGroup.setRequired(true); sentryOptions.addOptionGroup(sentryOptGroup); // optional args Option jdbcArg = new Option("j", "jdbcURL", true, "JDBC URL"); jdbcArg.setRequired(false); sentryOptions.addOption(jdbcArg); Option sentrySitePath = new Option("s", "sentry-site", true, "sentry-site file path"); sentrySitePath.setRequired(false); sentryOptions.addOption(sentrySitePath); Option globalPolicyPath = new Option("i", "policyIni", true, "Policy file path"); globalPolicyPath.setRequired(false); sentryOptions.addOption(globalPolicyPath); Option userOpt = new Option("u", "user", true, "user name"); userOpt.setRequired(false); sentryOptions.addOption(userOpt); Option passWordOpt = new Option("p", "password", true, "Password"); userOpt.setRequired(false); sentryOptions.addOption(passWordOpt); Option debugOpt = new Option("d", "debug", false, "enable debug output"); debugOpt.setRequired(false); sentryOptions.addOption(debugOpt); Option overwriteOpt = new Option("o", "overwrite", false, "enable import overwrite"); overwriteOpt.setRequired(false); sentryOptions.addOption(overwriteOpt); try { Parser parser = new GnuParser(); CommandLine cmd = parser.parse(sentryOptions, args); for (Option opt : cmd.getOptions()) { if (opt.getOpt().equals("s")) { setSentrySiteFile(opt.getValue()); } else if (opt.getOpt().equals("i")) { setPolicyFile(opt.getValue()); } else if (opt.getOpt().equals("e")) { setQuery(opt.getValue()); } else if (opt.getOpt().equals("j")) { setJdbcURL(opt.getValue()); } else if (opt.getOpt().equals("u")) { setUser(opt.getValue()); } else if (opt.getOpt().equals("p")) { setPassWord(opt.getValue()); } else if (opt.getOpt().equals("l") || opt.getOpt().equals("listPrivs")) { setListPrivs(true); } else if (opt.getOpt().equals("v")) { setValidate(true); } else if (opt.getOpt().equals("I")) { setImportPolicyFilePath(opt.getValue()); } else if (opt.getOpt().equals("E")) { setExportPolicyFilePath(opt.getValue()); } else if (opt.getOpt().equals("h")) { usage(sentryOptions); } else if (opt.getOpt().equals("d")) { enableDebug = true; } else if (opt.getOpt().equals("o")) { setImportOverwriteRole(true); } } if (isListPrivs() && (getUser() == null)) { throw new ParseException("Can't use -l without -u "); } if ((getQuery() != null) && (getUser() == null)) { throw new ParseException("Must use -u with -e "); } } catch (ParseException e1) { usage(sentryOptions); } if (!enableDebug) { // turn off log LogManager.getRootLogger().setLevel(Level.OFF); } }
From source file:org.apache.sentry.cli.tools.SentrySchemaTool.java
@SuppressWarnings("static-access") private static void initOptions(Options cmdLineOptions) { Option help = new Option("help", "print this message"); Option upgradeOpt = new Option("upgradeSchema", "Schema upgrade"); Option upgradeFromOpt = OptionBuilder.withArgName("upgradeFrom").hasArg() .withDescription("Schema upgrade from a version").create("upgradeSchemaFrom"); Option initOpt = new Option("initSchema", "Schema initialization"); Option initToOpt = OptionBuilder.withArgName("initTo").hasArg() .withDescription("Schema initialization to a version").create("initSchemaTo"); Option infoOpt = new Option("info", "Show config and schema details"); OptionGroup optGroup = new OptionGroup(); optGroup.addOption(upgradeOpt).addOption(initOpt).addOption(help).addOption(upgradeFromOpt) .addOption(initToOpt).addOption(infoOpt); optGroup.setRequired(true); Option userNameOpt = OptionBuilder.withArgName("user").hasArg() .withDescription("Override config file user name").create("userName"); Option passwdOpt = OptionBuilder.withArgName("password").hasArg() .withDescription("Override config file password").create("passWord"); Option dbTypeOpt = OptionBuilder.withArgName("databaseType").hasArg() .withDescription("Sentry store database type [" + SentrySchemaHelper.DB_DERBY + "," + SentrySchemaHelper.DB_MYSQL + "," + SentrySchemaHelper.DB_ORACLE + "," + SentrySchemaHelper.DB_POSTGRACE + "," + SentrySchemaHelper.DB_DB2 + "]") .create("dbType"); Option dbOpts = OptionBuilder.withArgName("databaseOpts").hasArgs() .withDescription("Backend DB specific options").create("dbOpts"); Option dryRunOpt = new Option("dryRun", "list SQL scripts (no execute)"); Option verboseOpt = new Option("verbose", "only print SQL statements"); Option configOpt = OptionBuilder.withArgName("confName").hasArgs() .withDescription("Sentry Service configuration file").isRequired(true) .create(ServiceConstants.ServiceArgs.CONFIG_FILE_LONG); cmdLineOptions.addOption(help);// ww w . j a v a 2 s . co m cmdLineOptions.addOption(dryRunOpt); cmdLineOptions.addOption(userNameOpt); cmdLineOptions.addOption(passwdOpt); cmdLineOptions.addOption(dbTypeOpt); cmdLineOptions.addOption(verboseOpt); cmdLineOptions.addOption(dbOpts); cmdLineOptions.addOption(configOpt); cmdLineOptions.addOptionGroup(optGroup); }
From source file:org.apache.sentry.cli.tools.SentryShellCommon.java
protected OptionGroup getMainOptions() { OptionGroup simpleShellOptGroup = new OptionGroup(); Option crOpt = new Option("cr", "create_role", false, "Create role"); crOpt.setRequired(false);/*from w w w .j av a 2s.c o m*/ Option drOpt = new Option("dr", "drop_role", false, "Drop role"); drOpt.setRequired(false); Option argOpt = new Option("arg", "add_role_group", false, "Add role to group"); argOpt.setRequired(false); Option drgOpt = new Option("drg", "delete_role_group", false, "Delete role from group"); drgOpt.setRequired(false); Option gprOpt = new Option("gpr", "grant_privilege_role", false, "Grant privilege to role"); gprOpt.setRequired(false); Option rprOpt = new Option("rpr", "revoke_privilege_role", false, "Revoke privilege from role"); rprOpt.setRequired(false); Option lrOpt = new Option("lr", "list_role", false, "List role"); lrOpt.setRequired(false); Option lpOpt = new Option("lp", "list_privilege", false, "List privilege"); lpOpt.setRequired(false); Option lgOpt = new Option("lg", "list_group", false, "List groups"); lgOpt.setRequired(false); // required args group simpleShellOptGroup.addOption(crOpt); simpleShellOptGroup.addOption(drOpt); simpleShellOptGroup.addOption(argOpt); simpleShellOptGroup.addOption(drgOpt); simpleShellOptGroup.addOption(gprOpt); simpleShellOptGroup.addOption(rprOpt); simpleShellOptGroup.addOption(lrOpt); simpleShellOptGroup.addOption(lpOpt); simpleShellOptGroup.addOption(lgOpt); simpleShellOptGroup.setRequired(true); return simpleShellOptGroup; }
From source file:org.apache.sentry.provider.db.tools.SentrySchemaTool.java
@SuppressWarnings("static-access") private static void initOptions(Options cmdLineOptions) { Option help = new Option("help", "print this message"); Option upgradeOpt = new Option("upgradeSchema", "Schema upgrade"); Option upgradeFromOpt = OptionBuilder.withArgName("upgradeFrom").hasArg() .withDescription("Schema upgrade from a version").create("upgradeSchemaFrom"); Option initOpt = new Option("initSchema", "Schema initialization"); Option initToOpt = OptionBuilder.withArgName("initTo").hasArg() .withDescription("Schema initialization to a version").create("initSchemaTo"); Option infoOpt = new Option("info", "Show config and schema details"); OptionGroup optGroup = new OptionGroup(); optGroup.addOption(upgradeOpt).addOption(initOpt).addOption(help).addOption(upgradeFromOpt) .addOption(initToOpt).addOption(infoOpt); optGroup.setRequired(true); Option userNameOpt = OptionBuilder.withArgName("user").hasArg() .withDescription("Override config file user name").create("userName"); Option passwdOpt = OptionBuilder.withArgName("password").hasArg() .withDescription("Override config file password").create("passWord"); Option dbTypeOpt = OptionBuilder.withArgName("databaseType").hasArg() .withDescription("Metastore database type [" + SentrySchemaHelper.DB_DERBY + "," + SentrySchemaHelper.DB_MYSQL + "," + SentrySchemaHelper.DB_ORACLE + "," + SentrySchemaHelper.DB_POSTGRACE + "," + SentrySchemaHelper.DB_DB2 + "]") .create("dbType"); Option dbOpts = OptionBuilder.withArgName("databaseOpts").hasArgs() .withDescription("Backend DB specific options").create("dbOpts"); Option dryRunOpt = new Option("dryRun", "list SQL scripts (no execute)"); Option verboseOpt = new Option("verbose", "only print SQL statements"); Option configOpt = OptionBuilder.withArgName("confName").hasArgs() .withDescription("Sentry Service configuration file").isRequired(true) .create(ServiceConstants.ServiceArgs.CONFIG_FILE_LONG); cmdLineOptions.addOption(help);/*w w w . j a v a2s .co m*/ cmdLineOptions.addOption(dryRunOpt); cmdLineOptions.addOption(userNameOpt); cmdLineOptions.addOption(passwdOpt); cmdLineOptions.addOption(dbTypeOpt); cmdLineOptions.addOption(verboseOpt); cmdLineOptions.addOption(dbOpts); cmdLineOptions.addOption(configOpt); cmdLineOptions.addOptionGroup(optGroup); }
From source file:org.apache.sentry.provider.db.tools.SentryShellCommon.java
/** * parse arguments//from w w w . j ava 2 s. c om * * <pre> * -conf,--sentry_conf <filepath> sentry config file path * -cr,--create_role -r <rolename> create role * -dr,--drop_role -r <rolename> drop role * -arg,--add_role_group -r <rolename> -g <groupname> add role to group * -drg,--delete_role_group -r <rolename> -g <groupname> delete role from group * -gpr,--grant_privilege_role -r <rolename> -p <privilege> grant privilege to role * -rpr,--revoke_privilege_role -r <rolename> -p <privilege> revoke privilege from role * -lr,--list_role -g <groupname> list roles for group * -lp,--list_privilege -r <rolename> list privilege for role * -t,--type <typeame> the shell for hive model or generic model * </pre> * * @param args */ protected boolean parseArgs(String[] args) { Options simpleShellOptions = new Options(); Option crOpt = new Option("cr", "create_role", false, "Create role"); crOpt.setRequired(false); Option drOpt = new Option("dr", "drop_role", false, "Drop role"); drOpt.setRequired(false); Option argOpt = new Option("arg", "add_role_group", false, "Add role to group"); argOpt.setRequired(false); Option drgOpt = new Option("drg", "delete_role_group", false, "Delete role from group"); drgOpt.setRequired(false); Option gprOpt = new Option("gpr", "grant_privilege_role", false, "Grant privilege to role"); gprOpt.setRequired(false); Option rprOpt = new Option("rpr", "revoke_privilege_role", false, "Revoke privilege from role"); rprOpt.setRequired(false); Option lrOpt = new Option("lr", "list_role", false, "List role"); lrOpt.setRequired(false); Option lpOpt = new Option("lp", "list_privilege", false, "List privilege"); lpOpt.setRequired(false); // required args group OptionGroup simpleShellOptGroup = new OptionGroup(); simpleShellOptGroup.addOption(crOpt); simpleShellOptGroup.addOption(drOpt); simpleShellOptGroup.addOption(argOpt); simpleShellOptGroup.addOption(drgOpt); simpleShellOptGroup.addOption(gprOpt); simpleShellOptGroup.addOption(rprOpt); simpleShellOptGroup.addOption(lrOpt); simpleShellOptGroup.addOption(lpOpt); simpleShellOptGroup.setRequired(true); simpleShellOptions.addOptionGroup(simpleShellOptGroup); // optional args Option pOpt = new Option("p", "privilege", true, OPTION_DESC_PRIVILEGE); pOpt.setRequired(false); simpleShellOptions.addOption(pOpt); Option gOpt = new Option("g", "groupname", true, OPTION_DESC_GROUP_NAME); gOpt.setRequired(false); simpleShellOptions.addOption(gOpt); Option rOpt = new Option("r", "rolename", true, OPTION_DESC_ROLE_NAME); rOpt.setRequired(false); simpleShellOptions.addOption(rOpt); // this argument should be parsed in the bin/sentryShell Option tOpt = new Option("t", "type", true, "[hive|solr|sqoop|.....]"); tOpt.setRequired(false); simpleShellOptions.addOption(tOpt); // file path of sentry-site Option sentrySitePathOpt = new Option("conf", "sentry_conf", true, OPTION_DESC_CONF); sentrySitePathOpt.setRequired(true); simpleShellOptions.addOption(sentrySitePathOpt); // help option Option helpOpt = new Option("h", "help", false, OPTION_DESC_HELP); helpOpt.setRequired(false); simpleShellOptions.addOption(helpOpt); // this Options is parsed first for help option Options helpOptions = new Options(); helpOptions.addOption(helpOpt); try { Parser parser = new GnuParser(); // parse help option first CommandLine cmd = parser.parse(helpOptions, args, true); for (Option opt : cmd.getOptions()) { if (opt.getOpt().equals("h")) { // get the help option, print the usage and exit usage(simpleShellOptions); return false; } } // without help option cmd = parser.parse(simpleShellOptions, args); for (Option opt : cmd.getOptions()) { if (opt.getOpt().equals("p")) { privilegeStr = opt.getValue(); } else if (opt.getOpt().equals("g")) { groupName = opt.getValue(); } else if (opt.getOpt().equals("r")) { roleName = opt.getValue(); } else if (opt.getOpt().equals("cr")) { isCreateRole = true; roleNameRequired = true; } else if (opt.getOpt().equals("dr")) { isDropRole = true; roleNameRequired = true; } else if (opt.getOpt().equals("arg")) { isAddRoleGroup = true; roleNameRequired = true; groupNameRequired = true; } else if (opt.getOpt().equals("drg")) { isDeleteRoleGroup = true; roleNameRequired = true; groupNameRequired = true; } else if (opt.getOpt().equals("gpr")) { isGrantPrivilegeRole = true; roleNameRequired = true; privilegeStrRequired = true; } else if (opt.getOpt().equals("rpr")) { isRevokePrivilegeRole = true; roleNameRequired = true; privilegeStrRequired = true; } else if (opt.getOpt().equals("lr")) { isListRole = true; } else if (opt.getOpt().equals("lp")) { isListPrivilege = true; roleNameRequired = true; } else if (opt.getOpt().equals("conf")) { confPath = opt.getValue(); } } checkRequiredParameter(roleNameRequired, roleName, OPTION_DESC_ROLE_NAME); checkRequiredParameter(groupNameRequired, groupName, OPTION_DESC_GROUP_NAME); checkRequiredParameter(privilegeStrRequired, privilegeStr, OPTION_DESC_PRIVILEGE); } catch (ParseException pe) { System.out.println(pe.getMessage()); usage(simpleShellOptions); return false; } return true; }
From source file:org.apache.sysml.conf.DMLOptions.java
@SuppressWarnings("static-access") private static Options createCLIOptions() { Options options = new Options(); Option nvargsOpt = OptionBuilder.withArgName("key=value").withDescription( "parameterizes DML script with named parameters of the form <key=value>; <key> should be a valid identifier in DML/PyDML") .hasArgs().create("nvargs"); Option argsOpt = OptionBuilder.withArgName("argN").withDescription( "specifies positional parameters; first value will replace $1 in DML program; $2 will replace 2nd and so on") .hasArgs().create("args"); Option configOpt = OptionBuilder.withArgName("filename").withDescription( "uses a given configuration file (can be on local/hdfs/gpfs; default values in SystemML-config.xml") .hasArg().create("config"); Option cleanOpt = OptionBuilder.withDescription( "cleans up all SystemML working directories (FS, DFS); all other flags are ignored in this mode. \n") .create("clean"); Option statsOpt = OptionBuilder.withArgName("count").withDescription( "monitors and reports summary execution statistics; heavy hitter <count> is 10 unless overridden; default off") .hasOptionalArg().create("stats"); Option memOpt = OptionBuilder .withDescription("monitors and reports max memory consumption in CP; default off").create("mem"); Option explainOpt = OptionBuilder.withArgName("level").withDescription( "explains plan levels; can be 'hops' / 'runtime'[default] / 'recompile_hops' / 'recompile_runtime'") .hasOptionalArg().create("explain"); Option execOpt = OptionBuilder.withArgName("mode").withDescription( "sets execution mode; can be 'hadoop' / 'singlenode' / 'hybrid'[default] / 'hybrid_spark' / 'spark'") .hasArg().create("exec"); Option gpuOpt = OptionBuilder.withArgName("force").withDescription( "uses CUDA instructions when reasonable; set <force> option to skip conservative memory estimates and use GPU wherever possible; default off") .hasOptionalArg().create("gpu"); Option debugOpt = OptionBuilder.withDescription("runs in debug mode; default off").create("debug"); Option pythonOpt = OptionBuilder.withDescription("parses Python-like DML").create("python"); Option fileOpt = OptionBuilder.withArgName("filename").withDescription( "specifies dml/pydml file to execute; path can be local/hdfs/gpfs (prefixed with appropriate URI)") .isRequired().hasArg().create("f"); Option scriptOpt = OptionBuilder.withArgName("script_contents") .withDescription("specified script string to execute directly").isRequired().hasArg().create("s"); Option helpOpt = OptionBuilder.withDescription("shows usage message").create("help"); options.addOption(configOpt);/* www . jav a 2s .co m*/ options.addOption(cleanOpt); options.addOption(statsOpt); options.addOption(memOpt); options.addOption(explainOpt); options.addOption(execOpt); options.addOption(gpuOpt); options.addOption(debugOpt); options.addOption(pythonOpt); // Either a clean(-clean), a file(-f), a script(-s) or help(-help) needs to be specified OptionGroup fileOrScriptOpt = new OptionGroup().addOption(scriptOpt).addOption(fileOpt).addOption(cleanOpt) .addOption(helpOpt); fileOrScriptOpt.setRequired(true); options.addOptionGroup(fileOrScriptOpt); // Either -args or -nvargs options.addOptionGroup(new OptionGroup().addOption(nvargsOpt).addOption(argsOpt)); options.addOption(helpOpt); return options; }
From source file:org.apache.tomcat.vault.VaultTool.java
/** * Build options for non-interactive VaultTool usage scenario. * * @return//from w ww . j a va2s . com */ private void initOptions() { options = new Options(); options.addOption("k", KEYSTORE_PARAM, true, "Keystore URL"); options.addOption("p", KEYSTORE_PASSWORD_PARAM, true, "Keystore password"); options.addOption("e", ENC_DIR_PARAM, true, "Directory containing encrypted files"); options.addOption("s", SALT_PARAM, true, "8 character salt"); options.addOption("i", ITERATION_PARAM, true, "Iteration count"); options.addOption("A", ALIAS_PARAM, true, "Vault keystore alias"); options.addOption("b", VAULT_BLOCK_PARAM, true, "Vault block"); options.addOption("a", ATTRIBUTE_PARAM, true, "Attribute name"); OptionGroup og = new OptionGroup(); Option x = new Option("x", SEC_ATTR_VALUE_PARAM, true, "Secured attribute value (such as password) to store"); Option c = new Option("c", CHECK_SEC_ATTR_EXISTS_PARAM, false, "Check whether the secured attribute already exists in the vault"); Option r = new Option("r", REMOVE_SEC_ATTR, false, "Remove the secured attribute from the vault"); Option g = new Option("g", GENERATE_CONFIG_FILE, true, "Path for generated config file"); Option h = new Option("h", HELP_PARAM, false, "Help"); Option E = new Option("E", CRYPT, false, "Encrypt value using CRYPT feature"); og.addOption(x); og.addOption(c); og.addOption(r); og.addOption(g); og.addOption(h); og.addOption(E); og.setRequired(true); options.addOptionGroup(og); }
From source file:org.apache.wink.example.googledocs.CLIHelper.java
@SuppressWarnings("static-access") public CLIHelper() { Option userOption = OptionBuilder.withArgName("user").hasArg() .withDescription("Full username. Example: user@gmail.com").isRequired(true).withLongOpt("user") .create(USER_OPT);//w w w .j a v a2 s. c o m Option passwordOption = OptionBuilder.withArgName("password").isRequired(true).hasArg() .withDescription("Password").withLongOpt("password").create(PASSWORD_OPT); Option uploadFileOption = OptionBuilder.withArgName("file").isRequired(false).hasArg() .withDescription("Path to a file to upload").withLongOpt("upload").create(UPLOAD_FILE_OPT); Option listFilesOption = OptionBuilder.hasArg(false).withDescription("List files").withLongOpt("list") .create(LIST_OPT); Option deleteOption = OptionBuilder.withArgName("document id").hasArg(true) .withDescription("Delete document. Use --list to get a document id.").withLongOpt("delete") .create(DELETE_OPT); Option proxyHostOption = OptionBuilder.isRequired(false).withArgName("host").hasArg(true) .withDescription("Proxy host").withLongOpt("proxy").create(PROXY_HOST_ORT); Option proxyPortOption = OptionBuilder.isRequired(false).withArgName("port").hasArg(true) .withDescription("Proxy port").withLongOpt("port").create(PROXY_PORT_OPT); OptionGroup group = new OptionGroup(); group.setRequired(true); group.addOption(uploadFileOption); group.addOption(listFilesOption); group.addOption(deleteOption); options.addOptionGroup(group); options.addOption(proxyHostOption); options.addOption(proxyPortOption); options.addOption(passwordOption); options.addOption(userOption); }
From source file:org.apache.zookeeper.cli.SetQuotaCommand.java
public SetQuotaCommand() { super("setquota", "-n|-b val path"); OptionGroup og1 = new OptionGroup(); og1.addOption(new Option("b", true, "bytes quota")); og1.addOption(new Option("n", true, "num quota")); og1.setRequired(true); options.addOptionGroup(og1);/*from w ww .jav a 2 s . c o m*/ }
From source file:org.dspace.eperson.Groomer.java
/** * Command line tool for "grooming" the EPerson collection. */// www. j a v a 2s. c o m static public void main(String[] argv) throws SQLException { final String USAGE = "EPerson -verb [option...]"; OptionGroup verbs = new OptionGroup(); verbs.setRequired(true); verbs.addOption(new Option("h", "help", false, "explain this tool")); verbs.addOption(new Option("u", "unsalted", false, "list accounts with unsalted password hashes")); Options options = new Options(); options.addOptionGroup(verbs); PosixParser parser = new PosixParser(); CommandLine command = null; try { command = parser.parse(options, argv); } catch (ParseException ex) { System.err.println(ex.getMessage()); if (!(ex instanceof MissingOptionException)) new HelpFormatter().printHelp(USAGE, options); System.exit(1); } // Help the user if (command.hasOption('h') || command.hasOption('?')) { new HelpFormatter().printHelp(USAGE, options); } // Scan for unsalted hashes else if (command.hasOption('u')) { Context myContext = new Context(); final TableRowIterator tri = DatabaseManager.query(myContext, "SELECT email FROM EPerson WHERE password IS NOT NULL AND digest_algorithm IS NULL"); for (TableRow row = tri.next(); tri.hasNext(); row = tri.next()) System.out.println(row.getStringColumn("email")); myContext.abort(); // No changes to commit } // Should not happen: verb option defined but no code! else System.err.println("Unimplemented verb: " + verbs.getSelected()); }