AbstractHafasClientInterfaceProvider: Implement our own equivs filter in jsonStationBoard() as we cannot rely on the deprecated stbFltrEquiv parameter any more.

This commit is contained in:
Andreas Schildbach 2019-01-21 11:38:05 +01:00
parent 9ae8081f96
commit 7e34908faf
4 changed files with 124 additions and 27 deletions

View file

@ -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;

View file

@ -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

View file

@ -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);

View file

@ -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