From f8e4a27225cdd7945eeb1de6dcdb64ead2012dde Mon Sep 17 00:00:00 2001 From: "andreas.schildbach@gmail.com" Date: Sat, 12 Feb 2011 16:43:57 +0000 Subject: [PATCH] also query nearby stations when querying equivs git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@495 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- .../schildbach/pte/AbstractEfaProvider.java | 51 ++++++++++++++----- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/src/de/schildbach/pte/AbstractEfaProvider.java b/src/de/schildbach/pte/AbstractEfaProvider.java index bd3cbbfd..2f7b4024 100644 --- a/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/src/de/schildbach/pte/AbstractEfaProvider.java @@ -840,8 +840,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures, final boolean equivs) throws IOException { - final String uri = departuresQueryUri(stationId, maxDepartures) + "&outputFormat=XML&coordOutputFormat=WGS84&deleteAssignedStops_dm=" - + (equivs ? '0' : '1') + "&mode=direct"; + final String uri = departuresQueryUri(stationId, maxDepartures) + "&outputFormat=XML&coordOutputFormat=WGS84&mode=direct" + + (equivs ? "&useProxFootSearch=1&ptOptionsActive=1" : "&deleteAssignedStops_dm=1"); InputStream is = null; try @@ -854,12 +854,18 @@ public abstract class AbstractEfaProvider implements NetworkProvider XmlPullUtil.enter(pp, "itdRequest"); + if (XmlPullUtil.test(pp, "clientHeaderLines")) + XmlPullUtil.next(pp); + if (XmlPullUtil.test(pp, "serverMetaInfo")) XmlPullUtil.next(pp); if (XmlPullUtil.test(pp, "itdVersionInfo")) XmlPullUtil.next(pp); + if (XmlPullUtil.test(pp, "itdInfoLinkList")) + XmlPullUtil.next(pp); + XmlPullUtil.enter(pp, "itdDepartureMonitorRequest"); if (!XmlPullUtil.test(pp, "itdOdv") || !"dm".equals(XmlPullUtil.attr(pp, "usage"))) @@ -918,7 +924,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider XmlPullUtil.enter(pp, "itdServingLines"); while (XmlPullUtil.test(pp, "itdServingLine")) { - final String assignedStopId = pp.getAttributeValue(null, "assignedStopID"); + final String assignedStopIdStr = pp.getAttributeValue(null, "assignedStopID"); + final int assignedStopId = assignedStopIdStr != null ? Integer.parseInt(assignedStopIdStr) : 0; final String destination = normalizeLocationName(pp.getAttributeValue(null, "direction")); final String destinationIdStr = pp.getAttributeValue(null, "destID"); final int destinationId = destinationIdStr.length() > 0 ? Integer.parseInt(destinationIdStr) : 0; @@ -926,14 +933,18 @@ public abstract class AbstractEfaProvider implements NetworkProvider final String lineStr = processItdServingLine(pp); final Line line = new Line(lineStr, lineColors(lineStr), destinationId, destination); - final List lines; - if (assignedStopId == null) - lines = result.stationDepartures.get(0).lines; + StationDepartures assignedStationDepartures; + if (assignedStopId == 0) + assignedStationDepartures = result.stationDepartures.get(0); else - lines = findStationDepartures(result.stationDepartures, Integer.parseInt(assignedStopId)).lines; + assignedStationDepartures = findStationDepartures(result.stationDepartures, assignedStopId); - if (!lines.contains(line)) - lines.add(line); + if (assignedStationDepartures == null) + assignedStationDepartures = new StationDepartures(new Location(LocationType.STATION, assignedStopId), + new LinkedList(), new LinkedList()); + + if (!assignedStationDepartures.lines.contains(line)) + assignedStationDepartures.lines.add(line); } XmlPullUtil.exit(pp, "itdServingLines"); } @@ -948,7 +959,21 @@ public abstract class AbstractEfaProvider implements NetworkProvider XmlPullUtil.enter(pp, "itdDepartureList"); while (XmlPullUtil.test(pp, "itdDeparture")) { - final int stopId = XmlPullUtil.intAttr(pp, "stopID"); + final int assignedStopId = XmlPullUtil.intAttr(pp, "stopID"); + + StationDepartures assignedStationDepartures = findStationDepartures(result.stationDepartures, assignedStopId); + if (assignedStationDepartures == null) + { + final String mapName = pp.getAttributeValue(null, "mapName"); + if (mapName == null || !"WGS84".equals(mapName)) + throw new IllegalStateException("unknown mapName: " + mapName); + final int lon = XmlPullUtil.intAttr(pp, "x"); + final int lat = XmlPullUtil.intAttr(pp, "y"); + // final String name = normalizeLocationName(XmlPullUtil.attr(pp, "nameWO")); + + assignedStationDepartures = new StationDepartures(new Location(LocationType.STATION, assignedStopId, lat, lon), + new LinkedList(), new LinkedList()); + } final String position = normalizePlatform(pp.getAttributeValue(null, "platform"), pp.getAttributeValue(null, "platformName")); @@ -975,10 +1000,10 @@ public abstract class AbstractEfaProvider implements NetworkProvider if (isRealtime && !predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY)) predictedDepartureTime.setTimeInMillis(plannedDepartureTime.getTimeInMillis()); - final List departures = findStationDepartures(result.stationDepartures, stopId).departures; - departures.add(new Departure(plannedDepartureTime.getTime(), + final Departure departure = new Departure(plannedDepartureTime.getTime(), predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY) ? predictedDepartureTime.getTime() : null, line, lineColors(line), - null, position, destinationId, destination, null)); + null, position, destinationId, destination, null); + assignedStationDepartures.departures.add(departure); XmlPullUtil.exit(pp, "itdDeparture"); }