package org.nocket.util;
import java.util.Hashtable;
/**
* This class emulates the good old UNIX command line argument reader functions.
*
* @author <a href="mailto:jlessner@gmx.de">Jan Lessner</a>
*/
public class ArgReader {
public static final char ARGEND = 0;
public static final char ARGERROR = '$';
public static final char COLON = ':';
public static final String COLON_STRING = COLON + "";
public static final String DASH_STRING = "-";
private Hashtable<String, String> supportedArgs;
private String[] args;
private String argValue = null;
private int argNo = 0;
public ArgReader(String[] args, String argpattern) {
this.args = args;
this.supportedArgs = new Hashtable<String, String>();
for (int i = 0; i < argpattern.length() - 1; i++) {
if (argpattern.charAt(i) != COLON) {
supportedArgs.put(String.valueOf(argpattern.charAt(i)), (argpattern.charAt(i + 1) == COLON) ? COLON_STRING : " ");
}
}
}
public char getArg() {
try {
char result = ARGEND;
boolean flag = false;
if (argNo < args.length) {
if (args[argNo].startsWith(DASH_STRING)) {
if (supportedArgs.get(String.valueOf(args[argNo].charAt(1))) != null) {
if (supportedArgs.get(String.valueOf(args[argNo].charAt(1))).equals(COLON_STRING)) {
if (args[argNo].length() > 2) {
argValue = args[argNo].substring(2);
args[argNo] = DASH_STRING + args[argNo].charAt(1);
flag = false;
} else {
argValue = args[argNo + 1];
flag = true;
}
} else {
argValue = null;
}
result = args[argNo].charAt(1);
if (args[argNo].length() > 2) {
args[argNo] = DASH_STRING + args[argNo].substring(2);
} else {
if (flag == true) {
argNo++;
}
argNo++;
}
} else {
throw new IllegalArgumentException("No valid Argument: " + args[argNo].charAt(1));
}
} else {
result = ARGEND;
}
} else {
result = ARGEND;
}
return result;
} catch (Exception ex) {
throw new IllegalArgumentException("Parameter is missing");
}
}
public String getArgValue() {
return argValue;
}
public String[] getPendingArgs() {
String[] pendingargs = new String[args.length - argNo];
int l = 0;
for (int i = argNo; i < args.length; i++) {
pendingargs[l++] = args[i];
}
return pendingargs;
}
}