mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-20 01:10:02 +00:00
Normalize station ids when passing them to Hafas or EFA APIs.
This commit is contained in:
parent
c4ebd7fbc7
commit
751338cbe1
14 changed files with 44 additions and 27 deletions
|
@ -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())
|
||||
{
|
||||
|
|
|
@ -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
|
||||
.<Departure> 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 "<Station externalId=\"" + location.id + "\" />";
|
||||
return "<Station externalId=\"" + normalizeStationId(location.id) + "\" />";
|
||||
else if (location.type == LocationType.POI && location.hasLocation())
|
||||
return "<Poi type=\"WGS84\" x=\"" + location.lon + "\" y=\"" + location.lat + "\" />";
|
||||
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));
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue