mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-16 01:19:49 +00:00
calculate representations of 'all products' in superclass
git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@615 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
parent
3097a52493
commit
7dfdd26481
17 changed files with 67 additions and 49 deletions
|
@ -59,24 +59,28 @@ import de.schildbach.pte.util.XmlPullUtil;
|
|||
public abstract class AbstractHafasProvider implements NetworkProvider
|
||||
{
|
||||
private static final String DEFAULT_ENCODING = "ISO-8859-1";
|
||||
private static final String prod = "hafas";
|
||||
|
||||
private final String apiUri;
|
||||
private static final String prod = "hafas";
|
||||
private final int numProductBits;
|
||||
private final String accessId;
|
||||
private final String jsonGetStopsEncoding;
|
||||
private final String xmlMlcResEncoding;
|
||||
|
||||
public AbstractHafasProvider(final String apiUri, final String accessId, final String jsonGetStopsEncoding, final String xmlMlcResEncoding)
|
||||
public AbstractHafasProvider(final String apiUri, final int numProductBits, final String accessId, final String jsonGetStopsEncoding,
|
||||
final String xmlMlcResEncoding)
|
||||
{
|
||||
this.apiUri = apiUri;
|
||||
this.numProductBits = numProductBits;
|
||||
this.accessId = accessId;
|
||||
this.jsonGetStopsEncoding = jsonGetStopsEncoding;
|
||||
this.xmlMlcResEncoding = xmlMlcResEncoding;
|
||||
}
|
||||
|
||||
public AbstractHafasProvider(final String apiUri, final String accessId)
|
||||
public AbstractHafasProvider(final String apiUri, final int numProductBits, final String accessId)
|
||||
{
|
||||
this.apiUri = apiUri;
|
||||
this.numProductBits = numProductBits;
|
||||
this.accessId = accessId;
|
||||
this.jsonGetStopsEncoding = DEFAULT_ENCODING;
|
||||
this.xmlMlcResEncoding = DEFAULT_ENCODING;
|
||||
|
@ -87,6 +91,19 @@ public abstract class AbstractHafasProvider implements NetworkProvider
|
|||
return TimeZone.getTimeZone("CET");
|
||||
}
|
||||
|
||||
protected final String allProductsString()
|
||||
{
|
||||
final StringBuilder allProducts = new StringBuilder(numProductBits);
|
||||
for (int i = 0; i < numProductBits; i++)
|
||||
allProducts.append('1');
|
||||
return allProducts.toString();
|
||||
}
|
||||
|
||||
protected final int allProductsInt()
|
||||
{
|
||||
return (1 << numProductBits) - 1;
|
||||
}
|
||||
|
||||
protected String[] splitNameAndPlace(final String name)
|
||||
{
|
||||
return new String[] { null, name };
|
||||
|
|
|
@ -50,7 +50,7 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
|
||||
public BahnProvider()
|
||||
{
|
||||
super("http://reiseauskunft.bahn.de/bin/extxml.exe", null);
|
||||
super("http://reiseauskunft.bahn.de/bin/extxml.exe", 14, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -108,7 +108,8 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
else
|
||||
{
|
||||
final String uri = API_BASE + "query.exe/dox" + "?performLocating=2&tpl=stopsnear&look_maxdist=" + (maxDistance > 0 ? maxDistance : 5000)
|
||||
+ "&look_stopclass=1023" + "&look_x=" + lon + "&look_y=" + lat;
|
||||
+ "&look_stopclass=" + allProductsInt() + "&look_x=" + lon + "&look_y=" + lat;
|
||||
System.out.println(uri);
|
||||
final CharSequence page = ParserUtils.scrape(uri);
|
||||
|
||||
final Matcher m = P_NEARBY_STATIONS_BY_COORDINATE.matcher(page);
|
||||
|
@ -496,7 +497,7 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
{
|
||||
final StringBuilder uri = new StringBuilder();
|
||||
uri.append(API_BASE).append("bhftafel.exe/dn");
|
||||
uri.append("?productsFilter=11111111111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&maxJourneys=50"); // ignore maxDepartures because result contains other stations
|
||||
uri.append("&start=yes");
|
||||
|
|
|
@ -64,7 +64,7 @@ public final class BvgProvider extends AbstractHafasProvider
|
|||
|
||||
public BvgProvider(final String additionalQueryParameter)
|
||||
{
|
||||
super(API_BASE + "query.bin/dn", null);
|
||||
super(API_BASE + "query.bin/dn", 8, null);
|
||||
|
||||
this.additionalQueryParameter = additionalQueryParameter;
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ public class DsbProvider extends AbstractHafasProvider
|
|||
|
||||
public DsbProvider()
|
||||
{
|
||||
super(null, null);
|
||||
super(null, 11, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -82,7 +82,7 @@ public class DsbProvider extends AbstractHafasProvider
|
|||
uri.append("?performLocating=2&tpl=stop2json");
|
||||
uri.append("&look_maxno=").append(maxStations != 0 ? maxStations : 200);
|
||||
uri.append("&look_maxdist=").append(maxDistance != 0 ? maxDistance : 5000);
|
||||
uri.append("&look_stopclass=2047");
|
||||
uri.append("&look_stopclass=").append(allProductsInt());
|
||||
uri.append("&look_x=").append(lon);
|
||||
uri.append("&look_y=").append(lat);
|
||||
|
||||
|
@ -91,7 +91,7 @@ public class DsbProvider extends AbstractHafasProvider
|
|||
else
|
||||
{
|
||||
uri.append("stboard.exe/mn");
|
||||
uri.append("?productsFilter=11111111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&input=").append(ParserUtils.urlEncode(stationId));
|
||||
uri.append("&sTI=1&start=yes&hcount=0");
|
||||
|
@ -173,7 +173,7 @@ public class DsbProvider extends AbstractHafasProvider
|
|||
{
|
||||
final StringBuilder uri = new StringBuilder();
|
||||
uri.append(API_BASE).append("stboard.exe/mn");
|
||||
uri.append("?productsFilter=11111111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&maxJourneys=50"); // ignore maxDepartures because result contains other stations
|
||||
uri.append("&start=yes");
|
||||
|
|
|
@ -50,7 +50,7 @@ public class InvgProvider extends AbstractHafasProvider
|
|||
|
||||
public InvgProvider()
|
||||
{
|
||||
super(API_URI, null);
|
||||
super(API_URI, 10, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -143,7 +143,7 @@ public class InvgProvider extends AbstractHafasProvider
|
|||
uri.append(API_BASE).append("stboard.exe/dn");
|
||||
uri.append("?input=").append(stationId);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&productsFilter=1111111111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
if (maxDepartures != 0)
|
||||
uri.append("&maxJourneys=").append(maxDepartures);
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
|
|
|
@ -37,7 +37,7 @@ public class LuProvider extends AbstractHafasProvider
|
|||
|
||||
public LuProvider()
|
||||
{
|
||||
super(API_BASE + "query.exe/dn", null);
|
||||
super(API_BASE + "query.exe/dn", 10, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -71,7 +71,7 @@ public class LuProvider extends AbstractHafasProvider
|
|||
{
|
||||
final StringBuilder uri = new StringBuilder(API_BASE);
|
||||
uri.append("stboard.exe/dn");
|
||||
uri.append("?productsFilter=11111111111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&input=").append(ParserUtils.urlEncode(stationId));
|
||||
uri.append("&sTI=1&start=yes&hcount=0&L=vs_java3");
|
||||
|
@ -119,7 +119,7 @@ public class LuProvider extends AbstractHafasProvider
|
|||
{
|
||||
final StringBuilder uri = new StringBuilder();
|
||||
uri.append(API_BASE).append("stboard.exe/dn");
|
||||
uri.append("?productsFilter=11111111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&maxJourneys=50"); // ignore maxDepartures because result contains other stations
|
||||
uri.append("&start=yes");
|
||||
|
|
|
@ -47,7 +47,7 @@ public class NasaProvider extends AbstractHafasProvider
|
|||
|
||||
public NasaProvider()
|
||||
{
|
||||
super(API_BASE + "query.exe/dn", null);
|
||||
super(API_BASE + "query.exe/dn", 8, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -69,8 +69,8 @@ public class NasaProvider extends AbstractHafasProvider
|
|||
return xmlMLcReq(constraint);
|
||||
}
|
||||
|
||||
private final String NEARBY_URI = API_BASE
|
||||
+ "stboard.exe/dn?input=%s&selectDate=today&boardType=dep&productsFilter=11111111&distance=50&near=Anzeigen";
|
||||
private final String NEARBY_URI = API_BASE + "stboard.exe/dn?input=%s&selectDate=today&boardType=dep&productsFilter=" + allProductsString()
|
||||
+ "&distance=50&near=Anzeigen";
|
||||
|
||||
@Override
|
||||
protected String nearbyStationUri(final String stationId)
|
||||
|
@ -85,7 +85,7 @@ public class NasaProvider extends AbstractHafasProvider
|
|||
uri.append(API_BASE).append("stboard.exe/dn");
|
||||
uri.append("?input=").append(stationId);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&productsFilter=11111111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
if (maxDepartures != 0)
|
||||
uri.append("&maxJourneys=").append(maxDepartures);
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
|
|
|
@ -46,7 +46,7 @@ public class NsProvider extends AbstractHafasProvider
|
|||
|
||||
public NsProvider()
|
||||
{
|
||||
super(API_URI, null);
|
||||
super(API_URI, 6, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -83,7 +83,7 @@ public class NsProvider extends AbstractHafasProvider
|
|||
uri.append("?input=").append(stationId);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&maxJourneys=").append(maxDepartures != 0 ? maxDepartures : 50); // maximum taken from SNCB site
|
||||
uri.append("&productsFilter=1:1111111111111111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
uri.append("&start=yes");
|
||||
return uri.toString();
|
||||
|
|
|
@ -57,7 +57,7 @@ public class OebbProvider extends AbstractHafasProvider
|
|||
|
||||
public OebbProvider()
|
||||
{
|
||||
super(null, null);
|
||||
super(null, 12, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -105,7 +105,7 @@ public class OebbProvider extends AbstractHafasProvider
|
|||
uri.append("?performLocating=2&tpl=stop2json");
|
||||
uri.append("&look_maxno=").append(maxStations != 0 ? maxStations : 200);
|
||||
uri.append("&look_maxdist=").append(maxDistance != 0 ? maxDistance : 5000);
|
||||
uri.append("&look_stopclass=2047");
|
||||
uri.append("&look_stopclass=").append(allProductsInt());
|
||||
uri.append("&look_x=").append(lon);
|
||||
uri.append("&look_y=").append(lat);
|
||||
|
||||
|
@ -490,7 +490,7 @@ public class OebbProvider extends AbstractHafasProvider
|
|||
uri.append("stboard.exe/dn?L=vs_scotty.vs_stb");
|
||||
uri.append("&input=").append(stationId);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&productsFilter=111111111111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
uri.append("&additionalTime=0");
|
||||
uri.append("&maxJourneys=").append(maxDepartures != 0 ? maxDepartures : 20);
|
||||
uri.append("&start=yes");
|
||||
|
|
|
@ -37,7 +37,7 @@ public class PlProvider extends AbstractHafasProvider
|
|||
|
||||
public PlProvider()
|
||||
{
|
||||
super(API_BASE + "query.exe/pn", null, null, "UTF-8");
|
||||
super(API_BASE + "query.exe/pn", 7, null, null, "UTF-8");
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -87,7 +87,7 @@ public class PlProvider extends AbstractHafasProvider
|
|||
{
|
||||
final StringBuilder uri = new StringBuilder(API_BASE);
|
||||
uri.append("stboard.exe/pn");
|
||||
uri.append("?productsFilter=1111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&input=").append(ParserUtils.urlEncode(stationId));
|
||||
uri.append("&sTI=1&start=yes&hcount=0");
|
||||
|
@ -316,7 +316,7 @@ public class PlProvider extends AbstractHafasProvider
|
|||
{
|
||||
final StringBuilder uri = new StringBuilder();
|
||||
uri.append(API_BASE).append("stboard.exe/pn");
|
||||
uri.append("?productsFilter=1111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&maxJourneys=50"); // ignore maxDepartures because result contains other stations
|
||||
uri.append("&start=yes");
|
||||
|
|
|
@ -53,7 +53,7 @@ public class RmvProvider extends AbstractHafasProvider
|
|||
|
||||
public RmvProvider()
|
||||
{
|
||||
super(null, null);
|
||||
super(null, 17, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
|
|
@ -48,7 +48,7 @@ public class SbbProvider extends AbstractHafasProvider
|
|||
|
||||
public SbbProvider(final String accessId)
|
||||
{
|
||||
super(API_URI, accessId);
|
||||
super(API_URI, 10, accessId);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -86,7 +86,7 @@ public class SbbProvider extends AbstractHafasProvider
|
|||
if (maxDepartures != 0)
|
||||
uri.append("&maxJourneys=").append(maxDepartures);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&productsFilter=1111111111000000");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
uri.append("&input=").append(stationId);
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
return uri.toString();
|
||||
|
|
|
@ -47,7 +47,7 @@ public class SeptaProvider extends AbstractHafasProvider
|
|||
|
||||
public SeptaProvider()
|
||||
{
|
||||
super(API_BASE + "query.exe/en", null);
|
||||
super(API_BASE + "query.exe/en", 4, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -126,8 +126,8 @@ public class SeptaProvider extends AbstractHafasProvider
|
|||
return 0;
|
||||
}
|
||||
|
||||
private final String NEARBY_URI = API_BASE
|
||||
+ "stboard.exe/en?input=%s&selectDate=today&boardType=dep&productsFilter=1111&distance=50&near=Anzeigen";
|
||||
private final String NEARBY_URI = API_BASE + "stboard.exe/en?input=%s&selectDate=today&boardType=dep&productsFilter=" + allProductsString()
|
||||
+ "&distance=50&near=Anzeigen";
|
||||
|
||||
@Override
|
||||
protected String nearbyStationUri(final String stationId)
|
||||
|
@ -148,7 +148,7 @@ public class SeptaProvider extends AbstractHafasProvider
|
|||
now.get(Calendar.AM_PM) == Calendar.AM ? "am" : "pm")));
|
||||
uri.append("&date=").append(
|
||||
String.format("%02d%02d%04d", now.get(Calendar.MONTH) + 1, now.get(Calendar.DAY_OF_MONTH), now.get(Calendar.YEAR)));
|
||||
uri.append("&productsFilter=1111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
if (maxDepartures != 0)
|
||||
uri.append("&maxJourneys=").append(maxDepartures);
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
|
|
|
@ -46,7 +46,7 @@ public class ShProvider extends AbstractHafasProvider
|
|||
|
||||
public ShProvider()
|
||||
{
|
||||
super(API_BASE + "query.exe/dn", null);
|
||||
super(API_BASE + "query.exe/dn", 16, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -68,8 +68,8 @@ public class ShProvider extends AbstractHafasProvider
|
|||
return xmlMLcReq(constraint);
|
||||
}
|
||||
|
||||
private final String NEARBY_URI = API_BASE
|
||||
+ "stboard.exe/dn?input=%s&selectDate=today&boardType=dep&productsFilter=1111111111111111&distance=50&near=Anzeigen";
|
||||
private final String NEARBY_URI = API_BASE + "stboard.exe/dn?input=%s&selectDate=today&boardType=dep&productsFilter=" + allProductsString()
|
||||
+ "&distance=50&near=Anzeigen";
|
||||
|
||||
@Override
|
||||
protected String nearbyStationUri(final String stationId)
|
||||
|
@ -118,7 +118,7 @@ public class ShProvider extends AbstractHafasProvider
|
|||
uri.append(API_BASE).append("stboard.exe/dn");
|
||||
uri.append("?input=").append(stationId);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&productsFilter=11111111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
if (maxDepartures != 0)
|
||||
uri.append("&maxJourneys=").append(maxDepartures);
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
|
|
|
@ -47,7 +47,7 @@ public class SncbProvider extends AbstractHafasProvider
|
|||
|
||||
public SncbProvider()
|
||||
{
|
||||
super(API_URI, null);
|
||||
super(API_URI, 16, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -90,7 +90,7 @@ public class SncbProvider extends AbstractHafasProvider
|
|||
uri.append("?input=").append(stationId);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&maxJourneys=").append(maxDepartures != 0 ? maxDepartures : 50); // maximum taken from SNCB site
|
||||
uri.append("&productsFilter=1:1111111111111111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
uri.append("&start=yes");
|
||||
return uri.toString();
|
||||
|
|
|
@ -49,7 +49,7 @@ public class VgsProvider extends AbstractHafasProvider
|
|||
|
||||
public VgsProvider()
|
||||
{
|
||||
super(null, null);
|
||||
super(null, 11, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -77,8 +77,8 @@ public class VgsProvider extends AbstractHafasProvider
|
|||
return jsonGetStops(uri);
|
||||
}
|
||||
|
||||
private final String NEARBY_URI = API_BASE
|
||||
+ "stboard.exe/dn?input=%s&selectDate=today&boardType=dep&productsFilter=11111111&distance=50&near=Anzeigen";
|
||||
private final String NEARBY_URI = API_BASE + "stboard.exe/dn?input=%s&selectDate=today&boardType=dep&productsFilter=" + allProductsString()
|
||||
+ "&distance=50&near=Anzeigen";
|
||||
|
||||
@Override
|
||||
protected String nearbyStationUri(final String stationId)
|
||||
|
@ -93,7 +93,7 @@ public class VgsProvider extends AbstractHafasProvider
|
|||
uri.append(API_BASE).append("stboard.exe/dn");
|
||||
uri.append("?input=").append(stationId);
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&productsFilter=11111111111");
|
||||
uri.append("&productsFilter=").append(allProductsString());
|
||||
if (maxDepartures != 0)
|
||||
uri.append("&maxJourneys=").append(maxDepartures);
|
||||
uri.append("&disableEquivs=yes"); // don't use nearby stations
|
||||
|
|
|
@ -37,7 +37,7 @@ public class ZvvProvider extends AbstractHafasProvider
|
|||
|
||||
public ZvvProvider()
|
||||
{
|
||||
super(API_BASE + "query.exe/dn", null);
|
||||
super(API_BASE + "query.exe/dn", 10, null);
|
||||
}
|
||||
|
||||
public NetworkId id()
|
||||
|
@ -91,7 +91,7 @@ public class ZvvProvider extends AbstractHafasProvider
|
|||
uri.append("?performLocating=2&tpl=stop2json");
|
||||
uri.append("&look_maxno=").append(maxStations != 0 ? maxStations : 150);
|
||||
uri.append("&look_maxdist=").append(maxDistance != 0 ? maxDistance : 5000);
|
||||
uri.append("&look_stopclass=1023");
|
||||
uri.append("&look_stopclass=").append(allProductsInt());
|
||||
uri.append("&look_x=").append(lon);
|
||||
uri.append("&look_y=").append(lat);
|
||||
|
||||
|
@ -100,7 +100,7 @@ public class ZvvProvider extends AbstractHafasProvider
|
|||
else
|
||||
{
|
||||
uri.append("stboard.exe/dn");
|
||||
uri.append("?productsFilter=1111111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&input=").append(ParserUtils.urlEncode(stationId));
|
||||
uri.append("&sTI=1&start=yes&hcount=0");
|
||||
|
@ -197,7 +197,7 @@ public class ZvvProvider extends AbstractHafasProvider
|
|||
{
|
||||
final StringBuilder uri = new StringBuilder();
|
||||
uri.append(API_BASE).append("stboard.exe/dn");
|
||||
uri.append("?productsFilter=1111111111");
|
||||
uri.append("?productsFilter=").append(allProductsString());
|
||||
uri.append("&boardType=dep");
|
||||
uri.append("&maxJourneys=50"); // ignore maxDepartures because result contains other stations
|
||||
uri.append("&start=yes");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue