Update the argument parser so that it will always treat "-?" as as request to
see the usage information. Also, allow short identifiers to be requested using
a forward slash in addition to a single dash (e.g., "/?" will be treated the
same as "-?").
OpenDS Issue Number: 1345
| | |
| | | // exit code of 0. Otherwise, it will have an exit code that is |
| | | // something other than 0, 98, or 99 to indicate that a problem |
| | | // occurred. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | // We're just trying to display usage, and that's already been done so |
| | | // exit with a code of zero. |
| | |
| | | } |
| | | } |
| | | } |
| | | else if (displayUsage.isPresent()) |
| | | else if (argParser.usageDisplayed()) |
| | | { |
| | | System.exit(0); |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | System.exit(0); |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // If we should just display usage information, then we've already done it |
| | | // so just return without doing anything else. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // If either the showUsage or testOnly arguments were provided, then we're |
| | | // done. |
| | | if (showUsage.isPresent() || testOnly.isPresent()) |
| | | if (argParser.usageDisplayed() || testOnly.isPresent()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | } |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // If we should just display usage information, then it has already been |
| | | // done so just exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | } |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // If the usage argument was provided, then we don't need to do anything |
| | | // else. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | } |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // If we should just display usage information, then it's already been done |
| | | // so just return. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // If we should just display usage information, then exit because it will |
| | | // have already been done. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return LDAPResultCode.SUCCESS; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (displayUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | System.exit(0); |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return EXIT_CODE_SUCCESS; |
| | | } |
| | |
| | | |
| | | |
| | | // If we should just display usage information, then print it and exit. |
| | | if (showUsage.isPresent()) |
| | | if (argParser.usageDisplayed()) |
| | | { |
| | | return 0; |
| | | } |
| | |
| | | // manner. |
| | | private boolean longArgumentsCaseSensitive; |
| | | |
| | | // Indicates whether the usage information has been displayed. |
| | | private boolean usageDisplayed; |
| | | |
| | | // The set of arguments defined for this parser, referenced by short ID. |
| | | private HashMap<Character,Argument> shortIDMap; |
| | | |
| | |
| | | shortIDMap = new HashMap<Character,Argument>(); |
| | | longIDMap = new HashMap<String,Argument>(); |
| | | allowsTrailingArguments = false; |
| | | usageDisplayed = false; |
| | | trailingArgsDisplayName = null; |
| | | maxTrailingArguments = 0; |
| | | minTrailingArguments = 0; |
| | |
| | | shortIDMap = new HashMap<Character,Argument>(); |
| | | longIDMap = new HashMap<String,Argument>(); |
| | | trailingArguments = new ArrayList<String>(); |
| | | usageDisplayed = false; |
| | | rawArguments = null; |
| | | usageArgument = null; |
| | | usageOutputStream = System.out; |
| | |
| | | Argument a = longIDMap.get(argName); |
| | | if (a == null) |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID; |
| | | String message = getMessage(msgID, argName); |
| | | throw new ArgumentException(msgID, message); |
| | | if (argName.equals("help")) |
| | | { |
| | | // "--help" will always be interpreted as requesting usage |
| | | // information. |
| | | try |
| | | { |
| | | getUsage(usageOutputStream); |
| | | } catch (Exception e) {} |
| | | |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID; |
| | | String message = getMessage(msgID, argName); |
| | | throw new ArgumentException(msgID, message); |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | else if (arg.startsWith("-")) |
| | | else if (arg.startsWith("-") || arg.startsWith("/")) |
| | | { |
| | | // This indicates that we are using the 1-character name to reference |
| | | // the argument. It may be in any of the following forms: |
| | | // -n |
| | | // -nvalue |
| | | // -n value |
| | | if (arg.equals("-")) |
| | | if (arg.equals("-") || arg.equals("/")) |
| | | { |
| | | int msgID = MSGID_ARGPARSER_INVALID_DASH_AS_ARGUMENT; |
| | | String message = getMessage(msgID); |
| | |
| | | Argument a = shortIDMap.get(argCharacter); |
| | | if (a == null) |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID; |
| | | String message = getMessage(msgID, String.valueOf(argCharacter)); |
| | | throw new ArgumentException(msgID, message); |
| | | if (argCharacter == '?') |
| | | { |
| | | // "-?" will always be interpreted as requesting usage information. |
| | | try |
| | | { |
| | | getUsage(usageOutputStream); |
| | | } catch (Exception e) {} |
| | | |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID; |
| | | String message = getMessage(msgID, String.valueOf(argCharacter)); |
| | | throw new ArgumentException(msgID, message); |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | */ |
| | | public void getUsage(StringBuilder buffer) |
| | | { |
| | | usageDisplayed = true; |
| | | if ((toolDescription != null) && (toolDescription.length() > 0)) |
| | | { |
| | | buffer.append(wrapText(toolDescription, 79)); |
| | |
| | | |
| | | outputStream.write(getBytes(buffer.toString())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Indicates whether the usage information has been displayed to the end user |
| | | * either by an explicit argument like "-H" or "--help", or by a built-in |
| | | * argument like "-?". |
| | | * |
| | | * @return {@code true} if the usage information has been displayed, or |
| | | * {@code false} if not. |
| | | */ |
| | | public boolean usageDisplayed() |
| | | { |
| | | return usageDisplayed; |
| | | } |
| | | } |
| | | |
| | |
| | | // case-sensitive manner. |
| | | private boolean longArgumentsCaseSensitive; |
| | | |
| | | // Indicates whether the usage information has been displayed. |
| | | private boolean usageDisplayed; |
| | | |
| | | // The set of global arguments defined for this parser, referenced by short |
| | | // ID. |
| | | private HashMap<Character,Argument> globalShortIDMap; |
| | |
| | | globalShortIDMap = new HashMap<Character,Argument>(); |
| | | globalLongIDMap = new HashMap<String,Argument>(); |
| | | subCommands = new HashMap<String,SubCommand>(); |
| | | usageDisplayed = false; |
| | | rawArguments = null; |
| | | subCommand = null; |
| | | usageArgument = null; |
| | |
| | | { |
| | | if (subCommand == null) |
| | | { |
| | | // There is no such global argument. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID; |
| | | String message = getMessage(msgID, argName); |
| | | throw new ArgumentException(msgID, message); |
| | | if (argName.equals("help")) |
| | | { |
| | | // "--help" will always be interpreted as requesting usage |
| | | // information. |
| | | try |
| | | { |
| | | getUsage(usageOutputStream); |
| | | } catch (Exception e) {} |
| | | |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | // There is no such global argument. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID; |
| | | String message = getMessage(msgID, argName); |
| | | throw new ArgumentException(msgID, message); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | a = subCommand.getArgument(argName); |
| | | if (a == null) |
| | | { |
| | | // There is no such global or subcommand argument. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID; |
| | | String message = getMessage(msgID, argName); |
| | | throw new ArgumentException(msgID, message); |
| | | if (argName.equals("help")) |
| | | { |
| | | // "--help" will always be interpreted as requesting usage |
| | | // information. |
| | | try |
| | | { |
| | | getUsage(usageOutputStream); |
| | | } catch (Exception e) {} |
| | | |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | // There is no such global or subcommand argument. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID; |
| | | String message = getMessage(msgID, argName); |
| | | throw new ArgumentException(msgID, message); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | else if (arg.startsWith("-")) |
| | | else if (arg.startsWith("-") || arg.startsWith("/")) |
| | | { |
| | | // This indicates that we are using the 1-character name to reference |
| | | // the argument. It may be in any of the following forms: |
| | | // -n |
| | | // -nvalue |
| | | // -n value |
| | | if (arg.equals("-")) |
| | | if (arg.equals("-") || arg.equals("/")) |
| | | { |
| | | int msgID = MSGID_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT; |
| | | String message = getMessage(msgID); |
| | |
| | | { |
| | | if (subCommand == null) |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID; |
| | | String message = getMessage(msgID, String.valueOf(argCharacter)); |
| | | throw new ArgumentException(msgID, message); |
| | | if (argCharacter == '?') |
| | | { |
| | | // "-?" will always be interpreted as requesting usage. |
| | | try |
| | | { |
| | | getUsage(usageOutputStream); |
| | | } catch (Exception e) {} |
| | | |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID; |
| | | String message = getMessage(msgID, String.valueOf(argCharacter)); |
| | | throw new ArgumentException(msgID, message); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | a = subCommand.getArgument(argCharacter); |
| | | if (a == null) |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID; |
| | | String message = getMessage(msgID, String.valueOf(argCharacter)); |
| | | throw new ArgumentException(msgID, message); |
| | | if (argCharacter == '?') |
| | | { |
| | | // "-?" will always be interpreted as requesting usage. |
| | | try |
| | | { |
| | | getUsage(usageOutputStream); |
| | | } catch (Exception e) {} |
| | | |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | // There is no such argument registered. |
| | | int msgID = MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID; |
| | | String message = getMessage(msgID, |
| | | String.valueOf(argCharacter)); |
| | | throw new ArgumentException(msgID, message); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | */ |
| | | public void getFullUsage(StringBuilder buffer) |
| | | { |
| | | usageDisplayed = true; |
| | | if ((toolDescription != null) && (toolDescription.length() > 0)) |
| | | { |
| | | buffer.append(wrapText(toolDescription, 79)); |
| | |
| | | */ |
| | | public void getSubCommandUsage(StringBuilder buffer, SubCommand subCommand) |
| | | { |
| | | usageDisplayed = true; |
| | | String scriptName = System.getProperty(PROPERTY_SCRIPT_NAME); |
| | | if ((scriptName == null) || (scriptName.length() == 0)) |
| | | { |
| | |
| | | |
| | | outputStream.write(getBytes(buffer.toString())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Indicates whether the usage information has been displayed to the end user |
| | | * either by an explicit argument like "-H" or "--help", or by a built-in |
| | | * argument like "-?". |
| | | * |
| | | * @return {@code true} if the usage information has been displayed, or |
| | | * {@code false} if not. |
| | | */ |
| | | public boolean usageDisplayed() |
| | | { |
| | | return usageDisplayed; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * Tests the EncodePassword tool with the "--help" option. |
| | | * Tests the EncodePassword tool with the help options. |
| | | */ |
| | | @Test() |
| | | public void testHelp() |
| | | { |
| | | String[] args = |
| | | { |
| | | "--help" |
| | | }; |
| | | String[] args = { "--help" }; |
| | | assertEquals(EncodePassword.encodePassword(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(EncodePassword.encodePassword(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(EncodePassword.encodePassword(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(EncodePassword.encodePassword(args, false, null, null), 0); |
| | | } |
| | | } |
| | |
| | | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(LDAPCompare.mainCompare(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(LDAPCompare.mainCompare(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(LDAPCompare.mainCompare(args, false, null, null), 0); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(LDAPDelete.mainDelete(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(LDAPDelete.mainDelete(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(LDAPDelete.mainDelete(args, false, null, null), 0); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(LDAPModify.mainModify(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(LDAPModify.mainModify(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(LDAPModify.mainModify(args, false, null, null), 0); |
| | | } |
| | | } |
| | | |
| | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(LDAPPasswordModify.mainPasswordModify(args, false, null, null), |
| | | 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(LDAPPasswordModify.mainPasswordModify(args, false, null, null), |
| | | 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(LDAPPasswordModify.mainPasswordModify(args, false, null, null), |
| | | 0); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0); |
| | | } |
| | | } |
| | | |
| | |
| | | @Test() |
| | | public void testUsage() |
| | | { |
| | | String[] args = |
| | | { |
| | | "--help" |
| | | }; |
| | | String[] args = { "--help" }; |
| | | assertEquals(LDIFDiff.mainDiff(args, true), 0); |
| | | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(LDIFDiff.mainDiff(args, true), 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(LDIFDiff.mainDiff(args, true), 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(LDIFDiff.mainDiff(args, true), 0); |
| | | } |
| | | |
| | |
| | | @Test() |
| | | public void testHelp() |
| | | { |
| | | String[] args = |
| | | { |
| | | "--help" |
| | | }; |
| | | String[] args = { "--help" }; |
| | | assertEquals(ListBackends.listBackends(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-H" }; |
| | | assertEquals(ListBackends.listBackends(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "-?" }; |
| | | assertEquals(ListBackends.listBackends(args, false, null, null), 0); |
| | | |
| | | args = new String[] { "/?" }; |
| | | assertEquals(ListBackends.listBackends(args, false, null, null), 0); |
| | | } |
| | | } |