diff --git a/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java index b2ed7e30..2bc88d18 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasClientInterfaceProvider.java @@ -290,20 +290,29 @@ public abstract class AbstractHafasClientInterfaceProvider extends AbstractHafas } protected final QueryDeparturesResult jsonStationBoard(final String stationId, final @Nullable Date time, - final int maxDepartures, final boolean equivs) throws IOException { + int maxDepartures, final boolean equivs) throws IOException { + final boolean canStbFltrEquiv = apiVersion.compareToIgnoreCase("1.18") <= 0; + if (maxDepartures == 0) + maxDepartures = DEFAULT_MAX_DEPARTURES; + if (!equivs && !canStbFltrEquiv) { + final int raisedMaxDepartures = maxDepartures * 4; + log.info("stbFltrEquiv workaround in effect: querying for {} departures rather than {}", + raisedMaxDepartures, maxDepartures); + maxDepartures = raisedMaxDepartures; + } + final Calendar c = new GregorianCalendar(timeZone); c.setTime(time); final CharSequence jsonDate = jsonDate(c); final CharSequence jsonTime = jsonTime(c); final CharSequence normalizedStationId = normalizeStationId(stationId); - final CharSequence stbFltrEquiv = Boolean.toString(!equivs); - final CharSequence maxJny = Integer.toString(maxDepartures != 0 ? maxDepartures : DEFAULT_MAX_DEPARTURES); + final CharSequence maxJny = Integer.toString(maxDepartures); final String request = wrapJsonApiRequest("StationBoard", "{\"type\":\"DEP\"," // + "\"date\":\"" + jsonDate + "\"," // + "\"time\":\"" + jsonTime + "\"," // + "\"stbLoc\":{\"type\":\"S\"," + "\"state\":\"F\"," // F/M + "\"extId\":" + JSONObject.quote(normalizedStationId.toString()) + "}," // - + (apiVersion.compareToIgnoreCase("1.19") < 0 ? "\"stbFltrEquiv\":" + stbFltrEquiv + "," : "") // + + (canStbFltrEquiv ? "\"stbFltrEquiv\":" + Boolean.toString(!equivs) + "," : "") // + "\"maxJny\":" + maxJny + "}", false); final HttpUrl url = requestUrl(request); @@ -373,8 +382,10 @@ public abstract class AbstractHafasClientInterfaceProvider extends AbstractHafas final int dProdX = stbStop.optInt("dProdX", -1); final Line line = dProdX != -1 ? lines.get(dProdX) : null; - final Location location = equivs ? parseLoc(locList, stbStop.getInt("locX"), null, crdSysList) - : new Location(LocationType.STATION, stationId); + final Location location = parseLoc(locList, stbStop.getInt("locX"), null, crdSysList); + checkState(location.type == LocationType.STATION); + if (!equivs && !location.id.equals(stationId)) + continue; final String jnyDirTxt = jny.getString("dirTxt"); Location destination = null; diff --git a/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java index 9c092670..e9ff9057 100644 --- a/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/BvgProviderLiveTest.java @@ -20,6 +20,7 @@ package de.schildbach.pte.live; import static org.hamcrest.CoreMatchers.hasItem; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import java.util.Date; @@ -62,14 +63,45 @@ public class BvgProviderLiveTest extends AbstractProviderLiveTest { } @Test - public void queryDepartures() throws Exception { - final QueryDeparturesResult result1 = queryDepartures("900016254", false); - assertEquals(QueryDeparturesResult.Status.OK, result1.status); - print(result1); + public void queryDeparturesWilmsstrasse() throws Exception { + final QueryDeparturesResult result = queryDepartures("900016254", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } - final QueryDeparturesResult result2 = queryDepartures("900100003", false); - assertEquals(QueryDeparturesResult.Status.OK, result2.status); - print(result2); + @Test + public void queryDeparturesAlexanderplatzBhf() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100003", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesAlexanderplatzU2() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100703", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesAlexanderplatzU5() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100704", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesAlexanderplatzU8() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100705", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesEquivs() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100003", true); + print(result); + assertTrue(result.stationDepartures.size() > 1); } @Test diff --git a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java index 4d944786..73e38110 100644 --- a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java @@ -58,6 +58,41 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest { print(result); } + @Test + public void queryDeparturesAlexanderplatzBhf() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100003", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesAlexanderplatzU2() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100703", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesAlexanderplatzU5() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100704", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesAlexanderplatzU8() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100705", false); + print(result); + assertEquals(QueryDeparturesResult.Status.OK, result.status); + } + + @Test + public void queryDeparturesEquivs() throws Exception { + final QueryDeparturesResult result = queryDepartures("900100003", true); + print(result); + assertTrue(result.stationDepartures.size() > 1); + } + @Test public void queryDeparturesInvalidStation() throws Exception { final QueryDeparturesResult resultLive = queryDepartures("111111", false); diff --git a/enabler/test/de/schildbach/pte/live/VbnProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/VbnProviderLiveTest.java index ad37e589..25e38998 100644 --- a/enabler/test/de/schildbach/pte/live/VbnProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/VbnProviderLiveTest.java @@ -57,15 +57,28 @@ public class VbnProviderLiveTest extends AbstractProviderLiveTest { } @Test - public void queryDepartures() throws Exception { - final QueryDeparturesResult result1 = queryDepartures("8000110", false); - print(result1); + public void queryDeparturesFreudenstadt() throws Exception { + final QueryDeparturesResult result = queryDepartures("8000110", false); + print(result); + } - final QueryDeparturesResult result2 = queryDepartures("8000128", false); - print(result2); + @Test + public void queryDeparturesGoettingen() throws Exception { + final QueryDeparturesResult result = queryDepartures("8000128", false); + print(result); + } - final QueryDeparturesResult result3 = queryDepartures("8010304", false); - print(result3); + @Test + public void queryDeparturesRostockHbf() throws Exception { + final QueryDeparturesResult result = queryDepartures("8010304", false); + print(result); + } + + @Test + public void queryDeparturesEquivs() throws Exception { + final QueryDeparturesResult result = queryDepartures("8010304", true); + print(result); + assertTrue(result.stationDepartures.size() > 1); } @Test @@ -75,15 +88,21 @@ public class VbnProviderLiveTest extends AbstractProviderLiveTest { } @Test - public void suggestLocations() throws Exception { - final SuggestLocationsResult result1 = suggestLocations("Bremen"); - print(result1); + public void suggestLocationsBremen() throws Exception { + final SuggestLocationsResult result = suggestLocations("Bremen"); + print(result); + } - final SuggestLocationsResult result2 = suggestLocations("Hannover"); - print(result2); + @Test + public void suggestLocationsHannover() throws Exception { + final SuggestLocationsResult result = suggestLocations("Hannover"); + print(result); + } - final SuggestLocationsResult result3 = suggestLocations("Rostock"); - print(result3); + @Test + public void suggestLocationsRostock() throws Exception { + final SuggestLocationsResult result = suggestLocations("Rostock"); + print(result); } @Test