package pl.edu.agh.simulator;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class FileParser {
public static final String VEHICLE_ELEM = "vehicle";
public static final String TIMESTEP_ELEM = "timestep";
public static final String ID_ATTR = "id";
public static final String LAT_ATTR = "lat";
public static final String LON_ATTR = "lon";
public static final String TIME_ATTR = "time";
private final LocationDataSender sender;
private final File file;
public FileParser(File file, LocationDataSender sender) {
this.file = file;
this.sender = sender;
}
public void start() {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(file, new DefaultHandler() {
private int currTimestep = 0;
public void startElement(String namespaceURI, String localName,
String qName, Attributes attrs) throws SAXException {
if(qName.equals(VEHICLE_ELEM)) {
String id = attrs.getValue(ID_ATTR);
double lon = Double.parseDouble(attrs.getValue(LON_ATTR));
double lat = Double.parseDouble(attrs.getValue(LAT_ATTR));
sender.put(id, lon, lat, currTimestep);
} else if(qName.equals(TIMESTEP_ELEM)) {
int time = Double.valueOf(attrs.getValue(TIME_ATTR)).intValue();
currTimestep = time;
}
}
public void endElement(String namespaceURI, String localName, String qName) {
if(qName.equals(TIMESTEP_ELEM)) {
sender.tick();
}
}
});
} catch (Throwable err) {
err.printStackTrace ();
}
}
}