com.thaiopensource.util.OptionParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wicketstuff-jing Show documentation
Show all versions of wicketstuff-jing Show documentation
Jing is a validator for RELAX NG and other schema languages. This
project was taken from http://code.google.com/p/jing-trang and
mavenized for inclusion in the Wicket Stuff HTML Validator.
The code was taken from the 20091111 release.
package com.thaiopensource.util;
public class OptionParser {
private final String optionSpec;
private char optionChar = 0;
private String optionArg = null;
private int argIndex = 0;
private int currentOptionIndex = 0;
private final String[] args;
private static final char OPTION_CHAR = '-';
public static class MissingArgumentException extends Exception { }
public static class InvalidOptionException extends Exception { }
public OptionParser(String optionSpec, String[] args) {
this.optionSpec = optionSpec;
this.args = new String[args.length];
System.arraycopy(args, 0, this.args, 0, args.length);
}
public char getOptionChar() {
return optionChar;
}
public String getOptionCharString() {
return new String(new char[]{optionChar});
}
public String getOptionArg() {
return optionArg;
}
public boolean moveToNextOption()
throws InvalidOptionException, MissingArgumentException {
if (currentOptionIndex > 0
&& currentOptionIndex == args[argIndex].length()) {
currentOptionIndex = 0;
argIndex++;
}
if (currentOptionIndex == 0) {
if (argIndex >= args.length)
return false;
String arg = args[argIndex];
if (arg.length() < 2 || arg.charAt(0) != OPTION_CHAR)
return false;
if (arg.length() == 2 && arg.charAt(1) == OPTION_CHAR) {
argIndex++;
return false;
}
currentOptionIndex = 1;
}
optionChar = args[argIndex].charAt(currentOptionIndex++);
optionArg = null;
int i = optionSpec.indexOf(optionChar);
if (i < 0 || (optionChar == ':' && i > 0))
throw new InvalidOptionException();
if (i + 1 < optionSpec.length() && optionSpec.charAt(i + 1) == ':') {
if (currentOptionIndex < args[argIndex].length()) {
optionArg = args[argIndex].substring(currentOptionIndex);
currentOptionIndex = 0;
argIndex++;
}
else if (argIndex + 1 < args.length) {
optionArg = args[++argIndex];
++argIndex;
currentOptionIndex = 0;
}
else
throw new MissingArgumentException();
}
return true;
}
public String[] getRemainingArgs() {
String[] tem = new String[args.length - argIndex];
System.arraycopy(args, argIndex, tem, 0, tem.length);
return tem;
}
public static void main(String[] args) {
String optSpec = args[0];
String[] tem = new String[args.length - 1];
System.arraycopy(args, 1, tem, 0, tem.length);
args = tem;
OptionParser opts = new OptionParser(optSpec, args);
try {
while (opts.moveToNextOption()) {
System.err.print("option " + opts.getOptionChar());
String arg = opts.getOptionArg();
if (arg == null)
System.err.println(" (no argument)");
else
System.err.println(" arg=" + arg);
}
args = opts.getRemainingArgs();
for (int i = 0; i < args.length; i++)
System.err.println("arg=" + args[i]);
}
catch (OptionParser.MissingArgumentException e) {
System.err.println("missing argument for option " + opts.getOptionChar());
}
catch (OptionParser.InvalidOptionException e) {
System.err.println("invalid option " + opts.getOptionChar());
}
}
}