package ns2;
/**
* class for parsing command line arguments
* @author Thimor Bohn <bohn@itm.uni-luebeck.de>
*
*/
public class Parser {
/**
* method for parsing command line arguments
* @param args command line arguments
* @return parsed arguments
* @throws IllegalArgumentException
*/
public static Parameter parse(String[] args) throws IllegalArgumentException {
String net = "";
String trace = "";
String activity = "";
String mobility = "";
String config = "";
double begin = 0;
double end = 0;
double penetration = 0;
long seed = 0;
boolean hasNet = false;
boolean hasTrace = false;
boolean hasActivity = false;
boolean hasMobility = false;
boolean hasConfig = false;
boolean hasBegin = false;
boolean hasEnd = false;
boolean hasPenetration = false;
for (int i=0; i<args.length; i++) {
if ("ns2".equals(args[i].toLowerCase())) {
}
if ("-n".equals(args[i])) {
// net file
if (++i<args.length) {
if (!args[i].startsWith("-")) {
net = args[i];
hasNet = true;
}
}
}
if ("-t".equals(args[i])) {
// trace file
if (++i<args.length) {
if (!args[i].startsWith("-")) {
trace = args[i];
hasTrace = true;
}
}
}
if ("-a".equals(args[i])) {
// activity file
if (++i<args.length) {
if (!args[i].startsWith("-")) {
activity = args[i];
hasActivity = true;
}
}
}
if ("-m".equals(args[i])) {
// mobility file
if (++i<args.length) {
if (!args[i].startsWith("-")) {
mobility = args[i];
hasMobility = true;
}
}
}
if ("-c".equals(args[i])) {
// config file
if (++i<args.length) {
if (!args[i].startsWith("-")) {
config = args[i];
hasConfig = true;
}
}
}
if ("-b".equals(args[i])) {
// begin time
if (++i<args.length) {
begin = Double.parseDouble(args[i]);
if (begin >= 0) {
hasBegin = true;
}
}
}
if ("-e".equals(args[i])) {
// begin time
if (++i<args.length) {
end = Double.parseDouble(args[i]);
if (begin < end) {
hasEnd = true;
}
}
}
if ("-p".equals(args[i])) {
// penetration factor
if (++i<args.length) {
if (!args[i].startsWith("-")) {
penetration = Double.parseDouble(args[i]);
if (penetration>=0 && penetration<=1) {
hasPenetration = true;
} else {
penetration = 0;
}
}
}
}
if ("-s".equals(args[i])) {
// seed value
if (++i<args.length) {
seed = Long.parseLong(args[i]);
//hasSeed = true;
}
}
}
// must have net file argument
if (!hasNet) {
throw new IllegalArgumentException("no netfile specified!");
}
// must have trace file argument
if (!hasTrace) {
throw new IllegalArgumentException("no tracefile specified!");
}
// must have activity file argument
if (!hasActivity) {
throw new IllegalArgumentException("no activity specified!");
}
// must have mobility file argument
if (!hasMobility) {
throw new IllegalArgumentException("no mobility specified!");
}
// must have config file argument
if (!hasConfig) {
throw new IllegalArgumentException("no config specified!");
}
// defaults to begin of sumo simulation
if (!hasBegin) {
begin = 0;
}
// defaults to end of sumo simulation
if (!hasEnd) {
// end not known yet
end = begin;
}
// penetration argument: optional
// seed argument: optional
return new Parameter(net, trace, activity, mobility, config, begin, end, penetration, seed, hasPenetration);
}
}