diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index 3dbb2822..f9be1802 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -934,7 +934,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider { final StringBuilder parameters = new StringBuilder(); appendCommonRequestParams(parameters, "XML"); - parameters.append("&type_dm=stop&name_dm=").append(stationId); + parameters.append("&type_dm=stop&name_dm=").append(normalizeStationId(stationId)); parameters.append("&itOptionsActive=1"); parameters.append("&ptOptionsActive=1"); parameters.append("&useProxFootSearch=1"); @@ -1449,7 +1449,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final StringBuilder parameters = new StringBuilder(); appendCommonRequestParams(parameters, "XML"); parameters.append("&type_dm=stop"); - parameters.append("&name_dm=").append(stationId); + parameters.append("&name_dm=").append(normalizeStationId(stationId)); if (useRealtime) parameters.append("&useRealtime=1"); parameters.append("&mode=direct"); @@ -3275,7 +3275,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider if (canAcceptPoiId && location.type == LocationType.POI && location.hasId()) { uri.append("&type_").append(paramSuffix).append("=poiID"); - uri.append("&name_").append(paramSuffix).append("=").append(location.id); + uri.append("&name_").append(paramSuffix).append("=").append(normalizeStationId(location.id)); } else if ((location.type == LocationType.POI || location.type == LocationType.ADDRESS) && location.hasLocation()) { diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 081b2d99..502bc31f 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -579,7 +579,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider parameters.append("&maxJourneys=50"); // ignore maxDepartures because result contains other stations parameters.append("&start=yes"); parameters.append("&L=vs_java3"); - parameters.append("&input=").append(stationId); + parameters.append("&input=").append(normalizeStationId(stationId)); if (clientType != null) parameters.append("&clientType=").append(ParserUtils.urlEncode(clientType)); @@ -590,6 +590,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider protected QueryDeparturesResult xmlQueryDepartures(final String uri, final String stationId) throws IOException { + final String normalizedStationId = normalizeStationId(stationId); + StringReplaceReader reader = null; try @@ -628,7 +630,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider return new QueryDeparturesResult(header, QueryDeparturesResult.Status.INVALID_STATION); if (code.equals("H890")) { - result.stationDepartures.add(new StationDepartures(new Location(LocationType.STATION, stationId), Collections + result.stationDepartures.add(new StationDepartures(new Location(LocationType.STATION, normalizedStationId), Collections . emptyList(), null)); return result; } @@ -646,8 +648,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final String evaId = XmlPullUtil.attr(pp, "evaId"); if (evaId != null) { - if (!evaId.equals(stationId)) - throw new IllegalStateException("stationId: " + stationId + ", evaId: " + evaId); + if (!evaId.equals(normalizedStationId)) + throw new IllegalStateException("stationId: " + normalizedStationId + ", evaId: " + evaId); final String name = XmlPullUtil.attr(pp, "name"); if (name != null) @@ -793,7 +795,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider XmlPullUtil.requireSkip(pp, "Journey"); } - result.stationDepartures.add(new StationDepartures(new Location(LocationType.STATION, stationId, + result.stationDepartures.add(new StationDepartures(new Location(LocationType.STATION, normalizedStationId, stationPlaceAndName != null ? stationPlaceAndName[0] : null, stationPlaceAndName != null ? stationPlaceAndName[1] : null), departures, null)); return result; @@ -1457,7 +1459,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider private static final String locationXml(final Location location) { if (location.type == LocationType.STATION && location.hasId()) - return ""; + return ""; else if (location.type == LocationType.POI && location.hasLocation()) return ""; else if (location.type == LocationType.ADDRESS && location.hasLocation()) @@ -1475,7 +1477,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider if (location.type == LocationType.STATION && location.hasId() && isValidStationId(location.id)) { - id.append("@L=").append(location.id); + id.append("@L=").append(normalizeStationId(location.id)); } else if (location.hasLocation()) { @@ -2260,7 +2262,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final StringBuilder parameters = new StringBuilder(); parameters.append("?productsFilter=").append(allProductsString()); parameters.append("&boardType=dep"); - parameters.append("&input=").append(stationId); + parameters.append("&input=").append(normalizeStationId(stationId)); parameters.append("&sTI=1&start=yes&hcount=0&L=vs_java3"); if (clientType != null) parameters.append("&clientType=").append(ParserUtils.urlEncode(clientType)); diff --git a/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java b/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java index f1f9eece..383881e4 100644 --- a/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java @@ -118,4 +118,19 @@ public abstract class AbstractNetworkProvider implements NetworkProvider { return null; } + + protected static String normalizeStationId(final String stationId) + { + if (stationId == null || stationId.isEmpty()) + return null; + + if (stationId.charAt(0) != '0') + return stationId; + + final StringBuilder normalized = new StringBuilder(stationId); + while (normalized.length() > 0 && normalized.charAt(0) == '0') + normalized.deleteCharAt(0); + + return normalized.toString(); + } } diff --git a/enabler/src/de/schildbach/pte/BvgProvider.java b/enabler/src/de/schildbach/pte/BvgProvider.java index fa79c376..6d667c1f 100644 --- a/enabler/src/de/schildbach/pte/BvgProvider.java +++ b/enabler/src/de/schildbach/pte/BvgProvider.java @@ -194,7 +194,7 @@ public final class BvgProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); final CharSequence page = ParserUtils.scrape(uri.toString()); @@ -262,7 +262,7 @@ public final class BvgProvider extends AbstractHafasProvider { final StringBuilder uri = new StringBuilder(); uri.append(DEPARTURE_URL_LIVE); - uri.append("input=").append(stationId); + uri.append("input=").append(normalizeStationId(stationId)); if (additionalQueryParameter != null) uri.append('&').append(additionalQueryParameter); return uri.toString(); @@ -274,7 +274,7 @@ public final class BvgProvider extends AbstractHafasProvider { final StringBuilder uri = new StringBuilder(); uri.append(DEPARTURE_URL_PLAN); - uri.append("&input=").append(stationId); + uri.append("&input=").append(normalizeStationId(stationId)); uri.append("&maxJourneys=").append(maxDepartures != 0 ? maxDepartures : 50); if (additionalQueryParameter != null) uri.append('&').append(additionalQueryParameter); diff --git a/enabler/src/de/schildbach/pte/InvgProvider.java b/enabler/src/de/schildbach/pte/InvgProvider.java index 5a567362..ccb8e424 100644 --- a/enabler/src/de/schildbach/pte/InvgProvider.java +++ b/enabler/src/de/schildbach/pte/InvgProvider.java @@ -103,7 +103,7 @@ public class InvgProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } @@ -116,7 +116,7 @@ public class InvgProvider extends AbstractHafasProvider private String departuresQueryUri(final String stationId, final int maxDepartures) { final StringBuilder uri = new StringBuilder(stationBoardEndpoint); - uri.append("?input=").append(stationId); + uri.append("?input=").append(normalizeStationId(stationId)); uri.append("&boardType=dep"); uri.append("&productsFilter=").append(allProductsString()); if (maxDepartures != 0) diff --git a/enabler/src/de/schildbach/pte/JetProvider.java b/enabler/src/de/schildbach/pte/JetProvider.java index 629d10b7..f7414db7 100644 --- a/enabler/src/de/schildbach/pte/JetProvider.java +++ b/enabler/src/de/schildbach/pte/JetProvider.java @@ -126,7 +126,7 @@ public class JetProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } diff --git a/enabler/src/de/schildbach/pte/NasaProvider.java b/enabler/src/de/schildbach/pte/NasaProvider.java index a9b64a3a..fb4daccc 100644 --- a/enabler/src/de/schildbach/pte/NasaProvider.java +++ b/enabler/src/de/schildbach/pte/NasaProvider.java @@ -148,7 +148,7 @@ public class NasaProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } diff --git a/enabler/src/de/schildbach/pte/NsProvider.java b/enabler/src/de/schildbach/pte/NsProvider.java index 4f06a0e0..5a300ef5 100644 --- a/enabler/src/de/schildbach/pte/NsProvider.java +++ b/enabler/src/de/schildbach/pte/NsProvider.java @@ -126,7 +126,7 @@ public class NsProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } diff --git a/enabler/src/de/schildbach/pte/NvvProvider.java b/enabler/src/de/schildbach/pte/NvvProvider.java index 27b3f162..e0310251 100644 --- a/enabler/src/de/schildbach/pte/NvvProvider.java +++ b/enabler/src/de/schildbach/pte/NvvProvider.java @@ -169,7 +169,7 @@ public class NvvProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?L=vs_rmv&near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } diff --git a/enabler/src/de/schildbach/pte/OebbProvider.java b/enabler/src/de/schildbach/pte/OebbProvider.java index e619a0f4..37e95a11 100644 --- a/enabler/src/de/schildbach/pte/OebbProvider.java +++ b/enabler/src/de/schildbach/pte/OebbProvider.java @@ -158,7 +158,7 @@ public class OebbProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Suchen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } diff --git a/enabler/src/de/schildbach/pte/SeptaProvider.java b/enabler/src/de/schildbach/pte/SeptaProvider.java index a498f2b2..3285fcac 100644 --- a/enabler/src/de/schildbach/pte/SeptaProvider.java +++ b/enabler/src/de/schildbach/pte/SeptaProvider.java @@ -126,7 +126,7 @@ public class SeptaProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } @@ -141,7 +141,7 @@ public class SeptaProvider extends AbstractHafasProvider final Calendar now = new GregorianCalendar(timeZone()); final StringBuilder uri = new StringBuilder(stationBoardEndpoint); - uri.append("?input=").append(stationId); + uri.append("?input=").append(normalizeStationId(stationId)); uri.append("&boardType=dep"); uri.append("&time="); uri.append(ParserUtils.urlEncode(String.format(Locale.ENGLISH, "%02d:%02d %s", now.get(Calendar.HOUR), now.get(Calendar.MINUTE), diff --git a/enabler/src/de/schildbach/pte/ShProvider.java b/enabler/src/de/schildbach/pte/ShProvider.java index d940ae8c..9591e250 100644 --- a/enabler/src/de/schildbach/pte/ShProvider.java +++ b/enabler/src/de/schildbach/pte/ShProvider.java @@ -121,7 +121,7 @@ public class ShProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } @@ -134,7 +134,7 @@ public class ShProvider extends AbstractHafasProvider private String departuresQueryUri(final String stationId, final int maxDepartures) { final StringBuilder uri = new StringBuilder(stationBoardEndpoint); - uri.append("?input=").append(stationId); + uri.append("?input=").append(normalizeStationId(stationId)); uri.append("&boardType=dep"); uri.append("&productsFilter=").append(allProductsString()); if (maxDepartures != 0) diff --git a/enabler/src/de/schildbach/pte/SncbProvider.java b/enabler/src/de/schildbach/pte/SncbProvider.java index 4eb6c686..88877bbd 100644 --- a/enabler/src/de/schildbach/pte/SncbProvider.java +++ b/enabler/src/de/schildbach/pte/SncbProvider.java @@ -138,7 +138,7 @@ public class SncbProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Zoek"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); } diff --git a/enabler/src/de/schildbach/pte/VgsProvider.java b/enabler/src/de/schildbach/pte/VgsProvider.java index f477c889..df037b62 100644 --- a/enabler/src/de/schildbach/pte/VgsProvider.java +++ b/enabler/src/de/schildbach/pte/VgsProvider.java @@ -134,7 +134,7 @@ public class VgsProvider extends AbstractHafasProvider final StringBuilder uri = new StringBuilder(stationBoardEndpoint); uri.append("?near=Anzeigen"); uri.append("&distance=").append(maxDistance != 0 ? maxDistance / 1000 : 50); - uri.append("&input=").append(location.id); + uri.append("&input=").append(normalizeStationId(location.id)); return htmlNearbyStations(uri.toString()); }