From 2e8edc117ddec0d2edc6cdae28a451fc3e67ca4c Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Fri, 16 Nov 2018 12:27:33 +0100 Subject: [PATCH] SNCB: Migrate to Hafas client interface. --- .../src/de/schildbach/pte/SncbProvider.java | 45 ++++-------------- .../pte/live/SncbProviderLiveTest.java | 46 +++++++++---------- 2 files changed, 31 insertions(+), 60 deletions(-) diff --git a/enabler/src/de/schildbach/pte/SncbProvider.java b/enabler/src/de/schildbach/pte/SncbProvider.java index dbbb0e0f..8b76e559 100644 --- a/enabler/src/de/schildbach/pte/SncbProvider.java +++ b/enabler/src/de/schildbach/pte/SncbProvider.java @@ -17,32 +17,31 @@ package de.schildbach.pte; -import java.util.Calendar; import java.util.Set; import java.util.regex.Matcher; -import com.google.common.base.Charsets; - import de.schildbach.pte.dto.Product; -import de.schildbach.pte.util.ParserUtils; import okhttp3.HttpUrl; /** * @author Andreas Schildbach */ -public class SncbProvider extends AbstractHafasLegacyProvider { +public class SncbProvider extends AbstractHafasClientInterfaceProvider { private static final HttpUrl API_BASE = HttpUrl.parse("http://www.belgianrail.be/jp/sncb-nmbs-routeplanner/"); - // http://hari.b-rail.be/hafas/bin/ private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, null, Product.HIGH_SPEED_TRAIN, null, null, Product.BUS, Product.REGIONAL_TRAIN, null, Product.SUBWAY, Product.BUS, Product.TRAM, null, null, null, null, null }; public SncbProvider() { - super(NetworkId.SNCB, API_BASE, "nn", PRODUCTS_MAP); - setRequestUrlEncoding(Charsets.UTF_8); - setJsonNearbyLocationsEncoding(Charsets.UTF_8); - setStationBoardHasLocation(true); + this("{\"type\":\"AID\",\"aid\":\"sncb-mobi\"}"); + } + + public SncbProvider(final String jsonApiAuthorization) { + super(NetworkId.SNCB, API_BASE, PRODUCTS_MAP); + setApiVersion("1.14"); + setApiClient("{\"id\":\"SNCB\",\"type\":\"AND\"}"); + setApiAuthorization(jsonApiAuthorization); } private static final String[] PLACES = { "Antwerpen", "Gent", "Charleroi", "Liege", "Liège", "Brussel" }; @@ -52,7 +51,6 @@ public class SncbProvider extends AbstractHafasLegacyProvider { for (final String place : PLACES) if (name.startsWith(place + " ") || name.startsWith(place + "-")) return new String[] { place, name.substring(place.length() + 1) }; - return super.splitStationName(name); } @@ -61,7 +59,6 @@ public class SncbProvider extends AbstractHafasLegacyProvider { final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address); if (m.matches()) return new String[] { m.group(1), m.group(2) }; - return super.splitStationName(address); } @@ -69,28 +66,4 @@ public class SncbProvider extends AbstractHafasLegacyProvider { public Set defaultProducts() { return Product.ALL; } - - @Override - protected Product normalizeType(final String type) { - final String ucType = type.toUpperCase(); - - if ("THALYS".equals(ucType)) - return Product.HIGH_SPEED_TRAIN; - - if ("L".equals(ucType)) - return Product.REGIONAL_TRAIN; - - if ("MÉTRO".equals(ucType)) - return Product.SUBWAY; - - if ("TRAMWAY".equals(ucType)) - return Product.TRAM; - - return super.normalizeType(type); - } - - @Override - protected void parseXmlStationBoardDate(final Calendar calendar, final String dateStr) { - ParserUtils.parseGermanDate(calendar, dateStr); - } } diff --git a/enabler/test/de/schildbach/pte/live/SncbProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/SncbProviderLiveTest.java index 84c42b5e..ac48c35d 100644 --- a/enabler/test/de/schildbach/pte/live/SncbProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/SncbProviderLiveTest.java @@ -27,6 +27,7 @@ import de.schildbach.pte.SncbProvider; import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyLocationsResult; +import de.schildbach.pte.dto.Point; import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryTripsResult; import de.schildbach.pte.dto.SuggestLocationsResult; @@ -53,8 +54,11 @@ public class SncbProviderLiveTest extends AbstractProviderLiveTest { @Test public void queryDepartures() throws Exception { - final QueryDeparturesResult result = queryDepartures("8813003", false); - print(result); + final QueryDeparturesResult result1 = queryDepartures("240229", false); + print(result1); + + final QueryDeparturesResult result2 = queryDepartures("8813003", false); + print(result2); } @Test @@ -83,43 +87,37 @@ public class SncbProviderLiveTest extends AbstractProviderLiveTest { @Test public void shortTrip() throws Exception { - final QueryTripsResult result = queryTrips( - new Location(LocationType.STATION, "8821006", "Antwerpen", "Centraal"), null, - new Location(LocationType.STATION, "8813003", "Brussel", "Centraal"), new Date(), true, null); + final Location from = new Location(LocationType.STATION, "8821006", "Antwerpen", "Centraal"); + final Location to = new Location(LocationType.STATION, "8813003", "Brussel", "Centraal"); + final QueryTripsResult result = queryTrips(from, null, to, new Date(), true, null); print(result); - - if (result.context == null) - return; - final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); } @Test public void longTrip() throws Exception { - final QueryTripsResult result = queryTrips( - new Location(LocationType.STATION, "207280", "Brussel", "Wannecouter"), null, - new Location(LocationType.STATION, "207272", "Brussel", "Stadion"), new Date(), true, null); + final Location from = new Location(LocationType.STATION, "207280", "Brussel", "Wannecouter"); + final Location to = new Location(LocationType.STATION, "207272", "Brussel", "Stadion"); + final QueryTripsResult result = queryTrips(from, null, to, new Date(), true, null); print(result); - - if (result.context == null) - return; - final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); } @Test public void tripFromAddress() throws Exception { - final QueryTripsResult result = queryTrips( - new Location(LocationType.ADDRESS, null, null, "Bruxelles - Haren, Rue Paul Janson 9"), null, - new Location(LocationType.STATION, "8500010", null, "Basel"), new Date(), true, null); + final Location from = new Location(LocationType.ADDRESS, null, null, "Bruxelles - Haren, Rue Paul Janson 9"); + final Location to = new Location(LocationType.STATION, "8500010", null, "Basel"); + final QueryTripsResult result = queryTrips(from, null, to, new Date(), true, null); print(result); + } - if (result.context == null) - return; - - final QueryTripsResult laterResult = queryMoreTrips(result.context, true); - print(laterResult); + @Test + public void tripBetweenCoordinates() throws Exception { + final Location from = Location.coord(Point.fromDouble(50.8356748, 4.3362419)); // Brussels-Midi + final Location to = Location.coord(Point.fromDouble(50.8605993, 4.3612788)); // Brussel-Noord + final QueryTripsResult result = queryTrips(from, null, to, new Date(), true, null); + print(result); } }