
nl.pvanassen.ns.model.storingen.StoringenHandle Maven / Gradle / Ivy
package nl.pvanassen.ns.model.storingen;
import nl.pvanassen.ns.NsApi;
import nl.pvanassen.ns.error.NsApiException;
import nl.pvanassen.ns.handle.Handle;
import nl.pvanassen.ns.xml.Xml;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
/**
* Handle for parsing disruption xml messages. For more information see documentatie storinge en
* werkzaamheden.
*
* @author Paul van Assen
*
*/
public class StoringenHandle implements Handle {
private final Logger logger = LoggerFactory.getLogger(getClass());
/**
* {@inheritDoc}
*
* @see nl.pvanassen.ns.handle.Handle#getModel(java.io.InputStream)
*/
@Override
public Storingen getModel(InputStream stream) {
SimpleDateFormat format = new SimpleDateFormat(NsApi.DATETIME_FORMAT);
try {
List geplandeStoringen = new LinkedList<>();
List ongeplandeStoringen = new LinkedList<>();
Xml xml = Xml.getXml(stream, "Storingen");
if (xml.isPresent("Ongepland")) {
Xml ongeplandeStoringenXml = xml.child("Ongepland");
for (Xml storingXml : ongeplandeStoringenXml.children("Storing")) {
ongeplandeStoringen.add(getStoring(storingXml, format));
}
}
if (xml.isPresent("Gepland")) {
Xml geplandeStoringenXml = xml.child("Gepland");
for (Xml storingXml : geplandeStoringenXml.children("Storing")) {
geplandeStoringen.add(getStoring(storingXml, format));
}
}
return new Storingen(ongeplandeStoringen, geplandeStoringen);
}
catch (ParseException e) {
logger.error("Error parsing stream to actuele vertrektijden", e);
throw new NsApiException("Error parsing stream to actuele vertrektijden", e);
}
}
private Storing getStoring(Xml storingXml, SimpleDateFormat format) throws ParseException {
String id = storingXml.child("id").content();
String traject = storingXml.child("Traject").content();
String periode = storingXml.child("Periode").content();
String reden = storingXml.child("Reden").content();
String advies = storingXml.child("Advies").content();
String bericht = storingXml.child("Bericht").content();
Date datum = null;
if (storingXml.isPresent("Datum")) {
datum = format.parse(storingXml.child("Datum").content());
}
return new Storing(id, traject, periode, reden, advies, bericht, datum);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy