operands.add(argv[si++]);
break;
}
// at this point it's got to be an option of some sort
ParamModel opt = null;
String name = null;
String value = null;
if (arg.charAt(1) == '-') { // long option
int ns = 2;
boolean sawno = false;
if (arg.startsWith("--no-")) {
sawno = true;
value = "false";
ns = 5; // skip prefix
}
// if of the form "--option=value", extract value
int ne = arg.indexOf('=');
if (ne < 0)
name = arg.substring(ns);
else {
if (value != null)
throw new CommandValidationException(
strings.get("parser.noValueAllowed", arg));
name = arg.substring(ns, ne);
value = arg.substring(ne + 1);
}
opt = lookupLongOption(name);
if (sawno && optionRequiresOperand(opt))
throw new CommandValidationException(
strings.get("parser.illegalNo", opt.getName()));
} else { // short option
/*
* possibilities are:
* -f
* -f value
* -f=value
* -fxyz (multiple single letter boolean options
* with no arguments)
*/
if (arg.length() <= 2) { // one of the first two cases
opt = lookupShortOption(arg.charAt(1));
name = arg.substring(1);
} else { // one of the last two cases
if (arg.charAt(2) == '=') { // -f=value case
opt = lookupShortOption(arg.charAt(1));
value = arg.substring(3);
} else { // -fxyz case
for (int i = 1; i < arg.length(); i++) {
opt = lookupShortOption(arg.charAt(i));
if (opt == null) {
if (!ignoreUnknown)
throw new CommandValidationException(
strings.get("parser.invalidOption",
Character.toString(arg.charAt(i))));
// unknown option, skip all the rest
operands.add(arg);
break;
}
if (opt.getType() == Boolean.class ||
opt.getType() == boolean.class)
setOption(opt, "true");
else {
if (!ignoreUnknown)
throw new CommandValidationException(
strings.get("parser.nonbooleanNotAllowed",
Character.toString(arg.charAt(i)), arg));
// unknown option, skip all the rest
operands.add(arg);
break;
}
}
continue;
}
}
}
// is it a known option?
if (opt == null) {
if (!ignoreUnknown)
throw new CommandValidationException(
strings.get("parser.invalidOption", arg));
// unknown option, skip it
operands.add(arg);
continue;
}
// find option value, if needed
if (value == null) {
// if no valid options were specified, we use the next argument
// as an option as long as it doesn't look like an option
if (options == null) {
if (si + 1 < argv.length && !argv[si + 1].startsWith("-"))
value = argv[++si];
else
((ParamModelData)opt).type = Boolean.class; // fake it
} else if (optionRequiresOperand(opt)) {
if (++si >= argv.length)
throw new CommandValidationException(
strings.get("parser.missingValue", name));
value = argv[si];
} else if (opt.getType() == Boolean.class ||
opt.getType() == boolean.class) {
/*
* If it's a boolean option, the following parameter
* might be the value for the option; peek ahead to
* see if it looks like a boolean value.
*/