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:
andreas.schildbach@gmail.com 2011-05-07 13:35:26 +00:00
parent 3097a52493
commit 7dfdd26481
17 changed files with 67 additions and 49 deletions

View file

@ -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 };

View file

@ -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");

View file

@ -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;
}

View file

@ -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");

View file

@ -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

View file

@ -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");

View file

@ -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

View file

@ -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();

View file

@ -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");

View file

@ -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");

View file

@ -53,7 +53,7 @@ public class RmvProvider extends AbstractHafasProvider
public RmvProvider()
{
super(null, null);
super(null, 17, null);
}
public NetworkId id()

View file

@ -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();

View file

@ -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

View file

@ -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

View file

@ -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();

View file

@ -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

View file

@ -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");