From 693d84e340f1525366e6b29a32c0a81401f326ff Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 16 Apr 2023 16:33:15 +0200 Subject: [PATCH] PL: re-add provider for Poland --- src/de/schildbach/pte/NetworkId.java | 2 +- src/de/schildbach/pte/PlProvider.java | 72 ++++++++++++++++ .../pte/live/PlProviderLiveTest.java | 86 +++++++++++++++++++ .../pte/live/secrets.properties.template | 1 + 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/de/schildbach/pte/PlProvider.java create mode 100644 test/de/schildbach/pte/live/PlProviderLiveTest.java diff --git a/src/de/schildbach/pte/NetworkId.java b/src/de/schildbach/pte/NetworkId.java index 0e4d45d4..5a7004f9 100644 --- a/src/de/schildbach/pte/NetworkId.java +++ b/src/de/schildbach/pte/NetworkId.java @@ -67,7 +67,7 @@ public enum NetworkId { TFI, EIREANN, // Poland - PLNAVITIA, + PL, PLNAVITIA, // Italy IT, diff --git a/src/de/schildbach/pte/PlProvider.java b/src/de/schildbach/pte/PlProvider.java new file mode 100644 index 00000000..1708d813 --- /dev/null +++ b/src/de/schildbach/pte/PlProvider.java @@ -0,0 +1,72 @@ +/* + * Copyright the original author or authors. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.schildbach.pte; + +import java.util.Set; + +import com.google.common.base.Charsets; + +import de.schildbach.pte.dto.Product; +import de.schildbach.pte.util.StringReplaceReader; + +import okhttp3.HttpUrl; + +/** + * @author Andreas Schildbach + */ +public class PlProvider extends AbstractHafasClientInterfaceProvider { + private static final HttpUrl API_BASE = HttpUrl.parse("https://mobil.rozklad-pkp.pl:8019/bin/"); + private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, // High speed trains from other + // countries + Product.HIGH_SPEED_TRAIN, // EIP, EIC, EC and international equivalents + Product.HIGH_SPEED_TRAIN, // IC, TLK, IR and international equivalents + Product.REGIONAL_TRAIN, // R (Regio), Os (Osobowy) and other regional and suburban trains + Product.BUS, Product.BUS, Product.FERRY }; + private static final String DEFAULT_API_CLIENT = "{\"id\":\"HAFAS\",\"type\":\"AND\"}"; + + public PlProvider(final String apiAuthorization) { + this(DEFAULT_API_CLIENT, apiAuthorization); + } + + public PlProvider(final String apiClient, final String apiAuthorization) { + super(NetworkId.PL, API_BASE, PRODUCTS_MAP); + setApiVersion("1.21"); + setApiClient(apiClient); + setApiAuthorization(apiAuthorization); + setSessionCookieName("SERVERID"); + } + + private static final String[] PLACES = { "Warszawa", "Kraków" }; + + @Override + protected String[] splitStationName(final String name) { + for (final String place : PLACES) { + if (name.endsWith(", " + place)) + return new String[] { place, name.substring(0, name.length() - place.length() - 2) }; + if (name.startsWith(place + " ") || name.startsWith(place + "-")) + return new String[] { place, name.substring(place.length() + 1) }; + } + + return super.splitStationName(name); + } + + @Override + public Set defaultProducts() { + return Product.ALL; + } +} diff --git a/test/de/schildbach/pte/live/PlProviderLiveTest.java b/test/de/schildbach/pte/live/PlProviderLiveTest.java new file mode 100644 index 00000000..f3191654 --- /dev/null +++ b/test/de/schildbach/pte/live/PlProviderLiveTest.java @@ -0,0 +1,86 @@ +/* + * Copyright the original author or authors. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.schildbach.pte.live; + +import static org.junit.Assert.assertEquals; + +import java.util.Date; + +import org.junit.Test; + +import de.schildbach.pte.PlProvider; +import de.schildbach.pte.dto.Location; +import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.NearbyLocationsResult; +import de.schildbach.pte.dto.QueryDeparturesResult; +import de.schildbach.pte.dto.QueryTripsResult; +import de.schildbach.pte.dto.SuggestLocationsResult; + +/** + * @author Andreas Schildbach + */ +public class PlProviderLiveTest extends AbstractProviderLiveTest { + public PlProviderLiveTest() { + super(new PlProvider(secretProperty("pl.api_authorization"))); + } + + @Test + public void nearbyStations() throws Exception { + final NearbyLocationsResult result = queryNearbyStations(new Location(LocationType.STATION, "5100065")); + print(result); + } + + @Test + public void nearbyStationsByCoordinate() throws Exception { + final NearbyLocationsResult result = queryNearbyStations(Location.coord(52227027, 20989795)); + print(result); + } + + @Test + public void queryDepartures() throws Exception { + final QueryDeparturesResult result = queryDepartures("5100065", false); + print(result); + } + + @Test + public void queryDeparturesInvalidStation() throws Exception { + final QueryDeparturesResult result = queryDepartures("999999", false); + assertEquals(QueryDeparturesResult.Status.INVALID_STATION, result.status); + } + + @Test + public void suggestLocations() throws Exception { + final SuggestLocationsResult result = suggestLocations("Warszawa"); + print(result); + } + + @Test + public void suggestLocationsUmlaut() throws Exception { + final SuggestLocationsResult result = suggestLocations("Służewiec"); + print(result); + } + + @Test + public void shortTrip() throws Exception { + final QueryTripsResult result = queryTrips(new Location(LocationType.STATION, "5196001", null, "KRAKÓW"), null, + new Location(LocationType.STATION, "5196003", null, "WARSZAWA"), new Date(), true, null); + print(result); + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); + print(laterResult); + } +} diff --git a/test/de/schildbach/pte/live/secrets.properties.template b/test/de/schildbach/pte/live/secrets.properties.template index ee89c204..e51e8320 100644 --- a/test/de/schildbach/pte/live/secrets.properties.template +++ b/test/de/schildbach/pte/live/secrets.properties.template @@ -30,6 +30,7 @@ sncb.api_authorization = dsb.api_authorization = se.api_authorization = lu.api_authorization = +pl.api_authorization = bart.api_authorization = cmta.api_authorization = vrs.client_certificate =