jkeyes 2003/06/06 12:29:30 Modified: cli/src/java/org/apache/commons/cli Tag: cli_1_x OptionImpl.java cli/src/test/org/apache/commons/cli Tag: cli_1_x ParseRequiredTest.java Log: o added option validation o put the validation test back in Revision Changes Path No revision No revision 1.1.2.3 +77 -4 jakarta-commons/cli/src/java/org/apache/commons/cli/Attic/OptionImpl.java Index: OptionImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli/Attic/OptionImpl.java,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -r1.1.2.2 -r1.1.2.3 --- OptionImpl.java 24 May 2003 22:20:53 -0000 1.1.2.2 +++ OptionImpl.java 6 Jun 2003 19:29:30 -0000 1.1.2.3 @@ -109,8 +109,24 @@ final String description, final boolean required, final Set children) { - this.name = name; - this.longName = longName; + + // if the name and longName are null throw an exception + if (name == null && longName == null) { + throw new IllegalArgumentException("null names"); + } + + // short name processing + if (name != null) { + this.name = name; + validateOption(this.name); + } + + // long name processing + if (longName != null) { + this.longName = longName; + validateOption(this.longName); + } + this.description = description; this.required = required; this.children = (children != null) ? children : new HashSet(0); @@ -172,4 +188,61 @@ return (children != null && this.children.size() > 0); } + /** + * <p> + * Validates whether <code>opt</code> is a permissable Option + * shortOpt. The rules that specify if the <code>opt</code> + * is valid are: + * </p> + * + * <ul> + * <li> + * <code>opt</code> is not NULL + * </li> + * <li> + * a single character <code>opt</code> that is either + * ' '(special case), '?', '@' or a letter + * </li> + * <li> + * a multi character <code>opt</code> that only contains + * letters. + * </li> + * </ul> + * + * @param opt + * the option string to validate + * + * @throws IllegalArgumentException + * if the Option is not valid. + */ + private void validateOption(String opt) throws IllegalArgumentException { + + char[] chars = opt.toCharArray(); + + for (int i = 0; i < chars.length; i++) { + if (!isValidChar(chars[i])) { + throw new IllegalArgumentException( + "opt contains illegal character value '" + + chars[i] + + "'"); + } + } + } + + /** + * <p> + * Returns whether the specified character is a valid + * character for. + * </p> + * + * @param c + * the character to validate + * + * @return boolean + * true if <code>c</code> is a letter, ' ', '?' or '@', + * otherwise false. + */ + private boolean isValidChar(char c) { + return (Character.isJavaIdentifierPart(c) || c == ' ' || c == '?' || c == '@' || c == '-'); + } } No revision No revision 1.5.2.4 +6 -8 jakarta-commons/cli/src/test/org/apache/commons/cli/ParseRequiredTest.java Index: ParseRequiredTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/test/org/apache/commons/cli/ParseRequiredTest.java,v retrieving revision 1.5.2.3 retrieving revision 1.5.2.4 diff -u -r1.5.2.3 -r1.5.2.4 --- ParseRequiredTest.java 4 Jun 2003 01:21:54 -0000 1.5.2.3 +++ ParseRequiredTest.java 6 Jun 2003 19:29:30 -0000 1.5.2.4 @@ -141,14 +141,12 @@ public void testMissingRequiredOption() throws Exception { String[] args = new String[] { "-a" }; - //try - //{ - CommandLine cl = parser.parse(_options, args); - // fail( "exception should have been thrown" ); - //} - //catch (MissingOptionException e) - //{ - //} + try { + CommandLine cl = parser.parse(_options, args); + fail( "exception should have been thrown" ); + } + catch (MissingOptionException e) { + } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]