1
0

108 lines
2.6 KiB
Java
Raw Normal View History

2020-09-14 08:59:16 +02:00
package cs451;
import java.util.List;
public class Parser {
private String[] args;
private long pid;
private IdParser idParser;
private HostsParser hostsParser;
private BarrierParser barrierParser;
2020-09-21 12:47:54 +02:00
private SignalParser signalParser;
2020-09-14 08:59:16 +02:00
private OutputParser outputParser;
private ConfigParser configParser;
public Parser(String[] args) {
this.args = args;
}
public void parse() {
pid = ProcessHandle.current().pid();
idParser = new IdParser();
hostsParser = new HostsParser();
barrierParser = new BarrierParser();
2020-09-21 12:47:54 +02:00
signalParser = new SignalParser();
2020-09-14 08:59:16 +02:00
outputParser = new OutputParser();
configParser = null;
int argsNum = args.length;
if (argsNum != Constants.ARG_LIMIT_NO_CONFIG && argsNum != Constants.ARG_LIMIT_CONFIG) {
help();
}
if (!idParser.populate(args[Constants.ID_KEY], args[Constants.ID_VALUE])) {
help();
}
if (!hostsParser.populate(args[Constants.HOSTS_KEY], args[Constants.HOSTS_VALUE])) {
help();
}
if (!hostsParser.inRange(idParser.getId())) {
help();
}
if (!barrierParser.populate(args[Constants.BARRIER_KEY], args[Constants.BARRIER_VALUE])) {
help();
}
2020-09-21 12:47:54 +02:00
if (!signalParser.populate(args[Constants.SIGNAL_KEY], args[Constants.SIGNAL_VALUE])) {
help();
}
2020-09-14 08:59:16 +02:00
if (!outputParser.populate(args[Constants.OUTPUT_KEY], args[Constants.OUTPUT_VALUE])) {
help();
}
if (argsNum == Constants.ARG_LIMIT_CONFIG) {
configParser = new ConfigParser();
if (!configParser.populate(args[Constants.CONFIG_VALUE])) {
}
}
}
private void help() {
2020-09-21 12:47:54 +02:00
System.err.println("Usage: ./run.sh --id ID --hosts HOSTS --barrier NAME:PORT --signal NAME:PORT --output OUTPUT [config]");
2020-09-14 08:59:16 +02:00
System.exit(1);
}
public int myId() {
return idParser.getId();
}
public List<Host> hosts() {
return hostsParser.getHosts();
}
public String barrierIp() {
return barrierParser.getIp();
}
public int barrierPort() {
return barrierParser.getPort();
}
2020-09-21 12:47:54 +02:00
public String signalIp() {
return signalParser.getIp();
}
public int signalPort() {
return signalParser.getPort();
}
2020-09-14 08:59:16 +02:00
public String output() {
return outputParser.getPath();
}
public boolean hasConfig() {
return configParser != null;
}
public String config() {
return configParser.getPath();
}
}