From 6e2aa29eca6b50123f82a4bc5591f9f2723d7c38 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 28 Aug 2014 10:22:05 +0200 Subject: [PATCH] Allow specifying time when querying for departures. --- .../schildbach/pte/AbstractEfaProvider.java | 50 ++++++++++--------- .../schildbach/pte/AbstractHafasProvider.java | 42 ++++++++++------ .../schildbach/pte/AbstractTsiProvider.java | 3 +- .../src/de/schildbach/pte/BayernProvider.java | 5 +- .../src/de/schildbach/pte/BvgProvider.java | 12 +++-- .../src/de/schildbach/pte/InvgProvider.java | 25 ++++------ .../de/schildbach/pte/NetworkProvider.java | 4 +- .../src/de/schildbach/pte/SeptaProvider.java | 43 ++++++++-------- enabler/src/de/schildbach/pte/ShProvider.java | 27 ++++------ .../pte/live/AbstractProviderLiveTest.java | 5 ++ .../pte/live/AtcProviderLiveTest.java | 2 +- .../pte/live/AvvProviderLiveTest.java | 2 +- .../pte/live/BahnProviderLiveTest.java | 4 +- .../pte/live/BayernProviderLiveTest.java | 6 +-- .../pte/live/BsvagProviderLiveTest.java | 2 +- .../pte/live/BvbProviderLiveTest.java | 2 +- .../pte/live/BvgProviderLiveTest.java | 8 +-- .../pte/live/DingProviderLiveTest.java | 2 +- .../pte/live/DsbProviderLiveTest.java | 4 +- .../pte/live/EireannProviderLiveTest.java | 4 +- .../pte/live/GvhProviderLiveTest.java | 2 +- .../pte/live/InvgProviderLiveTest.java | 4 +- .../pte/live/IvbProviderLiveTest.java | 2 +- .../pte/live/JetProviderLiveTest.java | 8 +-- .../pte/live/KvvProviderLiveTest.java | 2 +- .../pte/live/LinzProviderLiveTest.java | 2 +- .../pte/live/LuProviderLiveTest.java | 4 +- .../pte/live/MetProviderLiveTest.java | 2 +- .../pte/live/MvgProviderLiveTest.java | 2 +- .../pte/live/MvvProviderLiveTest.java | 4 +- .../pte/live/NaldoProviderLiveTest.java | 2 +- .../pte/live/NasaProviderLiveTest.java | 4 +- .../pte/live/NriProviderLiveTest.java | 4 +- .../pte/live/NsProviderLiveTest.java | 4 +- .../pte/live/NvbwProviderLiveTest.java | 2 +- .../pte/live/NvvProviderLiveTest.java | 10 ++-- .../pte/live/OebbProviderLiveTest.java | 4 +- .../pte/live/PlProviderLiveTest.java | 4 +- .../pte/live/RsagProviderLiveTest.java | 4 +- .../pte/live/RtProviderLiveTest.java | 4 +- .../pte/live/SbbProviderLiveTest.java | 4 +- .../pte/live/SeProviderLiveTest.java | 4 +- .../pte/live/SeptaProviderLiveTest.java | 4 +- .../pte/live/SfProviderLiveTest.java | 2 +- .../pte/live/ShProviderLiveTest.java | 4 +- .../pte/live/SncbProviderLiveTest.java | 4 +- .../pte/live/StockholmProviderLiveTest.java | 4 +- .../pte/live/StvProviderLiveTest.java | 2 +- .../pte/live/SvvProviderLiveTest.java | 2 +- .../pte/live/SydneyProviderLiveTest.java | 2 +- .../pte/live/TfiProviderLiveTest.java | 2 +- .../pte/live/TflProviderLiveTest.java | 2 +- .../pte/live/TlemProviderLiveTest.java | 2 +- .../pte/live/TlswProviderLiveTest.java | 2 +- .../pte/live/TlwmProviderLiveTest.java | 2 +- .../pte/live/VagfrProviderLiveTest.java | 2 +- .../pte/live/VbbProviderLiveTest.java | 6 +-- .../pte/live/VblProviderLiveTest.java | 2 +- .../pte/live/VbnProviderLiveTest.java | 4 +- .../pte/live/VgnProviderLiveTest.java | 2 +- .../pte/live/VgsProviderLiveTest.java | 4 +- .../pte/live/VmobilProviderLiveTest.java | 2 +- .../pte/live/VmsProviderLiveTest.java | 2 +- .../pte/live/VmvProviderLiveTest.java | 2 +- .../pte/live/VorProviderLiveTest.java | 2 +- .../pte/live/VrnProviderLiveTest.java | 2 +- .../pte/live/VrrProviderLiveTest.java | 10 ++-- .../pte/live/VrtProviderLiveTest.java | 2 +- .../pte/live/VsnProviderLiveTest.java | 4 +- .../pte/live/VvmProviderLiveTest.java | 2 +- .../pte/live/VvoProviderLiveTest.java | 2 +- .../pte/live/VvsProviderLiveTest.java | 2 +- .../pte/live/VvtProviderLiveTest.java | 2 +- .../pte/live/VvvProviderLiveTest.java | 2 +- .../pte/live/WienProviderLiveTest.java | 2 +- .../pte/live/ZvvProviderLiveTest.java | 4 +- 76 files changed, 224 insertions(+), 206 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index 147ceee5..f81fdb92 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -1416,23 +1416,21 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider + "' trainType='" + trainType + "' trainNum='" + trainNum + "' trainName='" + trainName + "'"); } - public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures, final boolean equivs) throws IOException + public QueryDeparturesResult queryDepartures(final String stationId, final Date time, final int maxDepartures, final boolean equivs) + throws IOException { - final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, maxDepartures, equivs); - - final StringBuilder uri = new StringBuilder(departureMonitorEndpoint); - if (!httpPost) - uri.append(parameters); - - return xsltDepartureMonitorRequest(stationId, maxDepartures, equivs); + return xsltDepartureMonitorRequest(stationId, time, maxDepartures, equivs); } - protected StringBuilder xsltDepartureMonitorRequestParameters(final String stationId, final int maxDepartures, final boolean equivs) + protected StringBuilder xsltDepartureMonitorRequestParameters(final String stationId, final Date time, final int maxDepartures, + final boolean equivs) { final StringBuilder parameters = new StringBuilder(); appendCommonRequestParams(parameters, "XML"); parameters.append("&type_dm=stop"); parameters.append("&name_dm=").append(normalizeStationId(stationId)); + if (time != null) + appendItdDateTimeParameters(parameters, time); if (useRealtime) parameters.append("&useRealtime=1"); parameters.append("&mode=direct"); @@ -1447,10 +1445,23 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider return parameters; } - private QueryDeparturesResult xsltDepartureMonitorRequest(final String stationId, final int maxDepartures, final boolean equivs) + private final void appendItdDateTimeParameters(final StringBuilder uri, final Date time) + { + final Calendar c = new GregorianCalendar(timeZone); + c.setTime(time); + final int year = c.get(Calendar.YEAR); + final int month = c.get(Calendar.MONTH) + 1; + final int day = c.get(Calendar.DAY_OF_MONTH); + final int hour = c.get(Calendar.HOUR_OF_DAY); + final int minute = c.get(Calendar.MINUTE); + uri.append("&itdDate=").append(ParserUtils.urlEncode(String.format(Locale.ENGLISH, "%04d%02d%02d", year, month, day))); + uri.append("&itdTime=").append(ParserUtils.urlEncode(String.format(Locale.ENGLISH, "%02d%02d", hour, minute))); + } + + private QueryDeparturesResult xsltDepartureMonitorRequest(final String stationId, final Date time, final int maxDepartures, final boolean equivs) throws IOException { - final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, maxDepartures, equivs); + final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, time, maxDepartures, equivs); final StringBuilder uri = new StringBuilder(departureMonitorEndpoint); if (!httpPost) @@ -1662,9 +1673,10 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider } } - protected QueryDeparturesResult queryDeparturesMobile(final String stationId, final int maxDepartures, final boolean equivs) throws IOException + protected QueryDeparturesResult queryDeparturesMobile(final String stationId, final Date time, final int maxDepartures, final boolean equivs) + throws IOException { - final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, maxDepartures, equivs); + final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, time, maxDepartures, equivs); final StringBuilder uri = new StringBuilder(departureMonitorEndpoint); if (!httpPost) @@ -2022,7 +2034,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider return (double) value / 1000000; } - protected String xsltTripRequestParameters(final Location from, final Location via, final Location to, final Date date, final boolean dep, + protected String xsltTripRequestParameters(final Location from, final Location via, final Location to, final Date time, final boolean dep, final Collection products, final WalkSpeed walkSpeed, final Accessibility accessibility, final Set