EFA: If there is no <itdServingLine>, we assume the station ID is invalid.

This commit is contained in:
Andreas Schildbach 2016-10-28 14:36:07 +02:00
parent 63be2aeb10
commit 40763ef6f6

View file

@ -1497,10 +1497,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
XmlPullUtil.optSkip(pp, "itdMessage"); XmlPullUtil.optSkip(pp, "itdMessage");
final Calendar plannedDepartureTime = new GregorianCalendar(timeZone); if (XmlPullUtil.test(pp, "itdServingLines")) {
final Calendar predictedDepartureTime = new GregorianCalendar(timeZone);
XmlPullUtil.require(pp, "itdServingLines");
if (!pp.isEmptyElementTag()) { if (!pp.isEmptyElementTag()) {
XmlPullUtil.enter(pp, "itdServingLines"); XmlPullUtil.enter(pp, "itdServingLines");
while (XmlPullUtil.test(pp, "itdServingLine")) { while (XmlPullUtil.test(pp, "itdServingLine")) {
@ -1511,24 +1508,27 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null; final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null;
final Location destination; final Location destination;
if (destinationId != null) if (destinationId != null)
destination = new Location(LocationType.STATION, destinationId, null, destinationName); destination = new Location(LocationType.STATION, destinationId, null,
destinationName);
else if (destinationId == null && destinationName != null) else if (destinationId == null && destinationName != null)
destination = new Location(LocationType.ANY, null, null, destinationName); destination = new Location(LocationType.ANY, null, null, destinationName);
else else
destination = null; destination = null;
final LineDestination line = new LineDestination(processItdServingLine(pp), destination); final LineDestination line = new LineDestination(processItdServingLine(pp),
destination);
StationDepartures assignedStationDepartures; StationDepartures assignedStationDepartures;
if (assignedStopId == null) if (assignedStopId == null)
assignedStationDepartures = r.stationDepartures.get(0); assignedStationDepartures = r.stationDepartures.get(0);
else else
assignedStationDepartures = findStationDepartures(r.stationDepartures, assignedStopId); assignedStationDepartures = findStationDepartures(r.stationDepartures,
assignedStopId);
if (assignedStationDepartures == null) if (assignedStationDepartures == null)
assignedStationDepartures = new StationDepartures( assignedStationDepartures = new StationDepartures(
new Location(LocationType.STATION, assignedStopId), new LinkedList<Departure>(), new Location(LocationType.STATION, assignedStopId),
new LinkedList<LineDestination>()); new LinkedList<Departure>(), new LinkedList<LineDestination>());
final List<LineDestination> assignedStationDeparturesLines = checkNotNull( final List<LineDestination> assignedStationDeparturesLines = checkNotNull(
assignedStationDepartures.lines); assignedStationDepartures.lines);
@ -1539,10 +1539,17 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
} else { } else {
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
} }
} else {
result.set(new QueryDeparturesResult(header, QueryDeparturesResult.Status.INVALID_STATION));
return;
}
XmlPullUtil.require(pp, "itdDepartureList"); XmlPullUtil.require(pp, "itdDepartureList");
if (!pp.isEmptyElementTag()) { if (!pp.isEmptyElementTag()) {
XmlPullUtil.enter(pp, "itdDepartureList"); XmlPullUtil.enter(pp, "itdDepartureList");
final Calendar plannedDepartureTime = new GregorianCalendar(timeZone);
final Calendar predictedDepartureTime = new GregorianCalendar(timeZone);
while (XmlPullUtil.test(pp, "itdDeparture")) { while (XmlPullUtil.test(pp, "itdDeparture")) {
final String assignedStopId = XmlPullUtil.attr(pp, "stopID"); final String assignedStopId = XmlPullUtil.attr(pp, "stopID");