diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index 10180128..5d6e19ad 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -1497,52 +1497,59 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider { XmlPullUtil.optSkip(pp, "itdMessage"); - final Calendar plannedDepartureTime = new GregorianCalendar(timeZone); - final Calendar predictedDepartureTime = new GregorianCalendar(timeZone); + if (XmlPullUtil.test(pp, "itdServingLines")) { + if (!pp.isEmptyElementTag()) { + XmlPullUtil.enter(pp, "itdServingLines"); + while (XmlPullUtil.test(pp, "itdServingLine")) { + final String assignedStopId = XmlPullUtil.optAttr(pp, "assignedStopID", null); + final String destinationName = normalizeLocationName( + XmlPullUtil.optAttr(pp, "direction", null)); + final String destinationIdStr = XmlPullUtil.optAttr(pp, "destID", null); + final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null; + final Location destination; + if (destinationId != null) + destination = new Location(LocationType.STATION, destinationId, null, + destinationName); + else if (destinationId == null && destinationName != null) + destination = new Location(LocationType.ANY, null, null, destinationName); + else + destination = null; - XmlPullUtil.require(pp, "itdServingLines"); - if (!pp.isEmptyElementTag()) { - XmlPullUtil.enter(pp, "itdServingLines"); - while (XmlPullUtil.test(pp, "itdServingLine")) { - final String assignedStopId = XmlPullUtil.optAttr(pp, "assignedStopID", null); - final String destinationName = normalizeLocationName( - XmlPullUtil.optAttr(pp, "direction", null)); - final String destinationIdStr = XmlPullUtil.optAttr(pp, "destID", null); - final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null; - final Location destination; - if (destinationId != null) - destination = new Location(LocationType.STATION, destinationId, null, destinationName); - else if (destinationId == null && destinationName != null) - destination = new Location(LocationType.ANY, null, null, destinationName); - else - destination = null; + final LineDestination line = new LineDestination(processItdServingLine(pp), + destination); - final LineDestination line = new LineDestination(processItdServingLine(pp), destination); + StationDepartures assignedStationDepartures; + if (assignedStopId == null) + assignedStationDepartures = r.stationDepartures.get(0); + else + assignedStationDepartures = findStationDepartures(r.stationDepartures, + assignedStopId); - StationDepartures assignedStationDepartures; - if (assignedStopId == null) - assignedStationDepartures = r.stationDepartures.get(0); - else - assignedStationDepartures = findStationDepartures(r.stationDepartures, assignedStopId); + if (assignedStationDepartures == null) + assignedStationDepartures = new StationDepartures( + new Location(LocationType.STATION, assignedStopId), + new LinkedList(), new LinkedList()); - if (assignedStationDepartures == null) - assignedStationDepartures = new StationDepartures( - new Location(LocationType.STATION, assignedStopId), new LinkedList(), - new LinkedList()); - - final List assignedStationDeparturesLines = checkNotNull( - assignedStationDepartures.lines); - if (!assignedStationDeparturesLines.contains(line)) - assignedStationDeparturesLines.add(line); + final List assignedStationDeparturesLines = checkNotNull( + assignedStationDepartures.lines); + if (!assignedStationDeparturesLines.contains(line)) + assignedStationDeparturesLines.add(line); + } + XmlPullUtil.skipExit(pp, "itdServingLines"); + } else { + XmlPullUtil.next(pp); } - XmlPullUtil.skipExit(pp, "itdServingLines"); } else { - XmlPullUtil.next(pp); + result.set(new QueryDeparturesResult(header, QueryDeparturesResult.Status.INVALID_STATION)); + return; } XmlPullUtil.require(pp, "itdDepartureList"); if (!pp.isEmptyElementTag()) { XmlPullUtil.enter(pp, "itdDepartureList"); + final Calendar plannedDepartureTime = new GregorianCalendar(timeZone); + final Calendar predictedDepartureTime = new GregorianCalendar(timeZone); + while (XmlPullUtil.test(pp, "itdDeparture")) { final String assignedStopId = XmlPullUtil.attr(pp, "stopID");