support product selection for XML API based connection queries

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@706 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach@gmail.com 2011-06-18 14:26:03 +00:00
parent f442cd5ead
commit e10e60cb41
22 changed files with 630 additions and 5 deletions

View file

@ -115,6 +115,8 @@ public abstract class AbstractHafasProvider implements NetworkProvider
return 0; return 0;
} }
protected abstract void setProductBits(StringBuilder productBits, char product);
private static final Pattern P_SPLIT_ADDRESS = Pattern.compile("(\\d{4,5}\\s+[^,]+),\\s+(.*)"); private static final Pattern P_SPLIT_ADDRESS = Pattern.compile("(\\d{4,5}\\s+[^,]+),\\s+(.*)");
protected String[] splitPlaceAndName(final String name) protected String[] splitPlaceAndName(final String name)
@ -636,10 +638,19 @@ public abstract class AbstractHafasProvider implements NetworkProvider
final Calendar c = new GregorianCalendar(timeZone()); final Calendar c = new GregorianCalendar(timeZone());
c.setTime(date); c.setTime(date);
final StringBuilder productsStr = new StringBuilder(numProductBits);
for (int i = 0; i < numProductBits; i++)
productsStr.append('0');
for (final char p : products.toCharArray())
setProductBits(productsStr, p);
final String request = "<ConReq>" // final String request = "<ConReq>" //
+ "<Start>" + "<Start>"
+ location(from) + location(from)
+ "<Prod bike=\"0\" couchette=\"0\" direct=\"0\" sleeper=\"0\"/></Start>" // + "<Prod prod=\""
+ productsStr
+ "\" bike=\"0\" couchette=\"0\" direct=\"0\" sleeper=\"0\"/>" //
+ "</Start>" //
+ (via != null ? "<Via>" + location(via) + "</Via>" : "") // + (via != null ? "<Via>" + location(via) + "</Via>" : "") //
+ "<Dest>" + "<Dest>"
+ location(to) + location(to)
@ -667,7 +678,7 @@ public abstract class AbstractHafasProvider implements NetworkProvider
private QueryConnectionsResult queryConnections(final String request, final Location from, final Location via, final Location to) private QueryConnectionsResult queryConnections(final String request, final Location from, final Location via, final Location to)
throws IOException throws IOException
{ {
// System.out.println(request); System.out.println(request);
// ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), null, null)); // ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), null, null));
InputStream is = null; InputStream is = null;

View file

@ -68,6 +68,12 @@ public final class BahnProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
throw new UnsupportedOperationException();
}
private final static Pattern P_NEARBY_STATIONS_BY_STATION = Pattern private final static Pattern P_NEARBY_STATIONS_BY_STATION = Pattern
.compile("<a href=\"http://mobile\\.bahn\\.de/bin/mobil/bhftafel.exe/dn[^\"]*?evaId=(\\d*)&[^\"]*?\">([^<]*)</a>"); .compile("<a href=\"http://mobile\\.bahn\\.de/bin/mobil/bhftafel.exe/dn[^\"]*?evaId=(\\d*)&[^\"]*?\">([^<]*)</a>");

View file

@ -26,7 +26,6 @@ import java.util.GregorianCalendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -83,6 +82,12 @@ public final class BvgProvider extends AbstractHafasProvider
return true; return true;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
throw new UnsupportedOperationException();
}
@Override @Override
protected String[] splitPlaceAndName(final String name) protected String[] splitPlaceAndName(final String name)
{ {

View file

@ -55,6 +55,12 @@ public class DsbProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
throw new UnsupportedOperationException();
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -69,6 +69,12 @@ public class InvgProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
throw new UnsupportedOperationException();
}
private static final String[] PLACES = { "Ingolstadt", "München" }; private static final String[] PLACES = { "Ingolstadt", "München" };
@Override @Override

View file

@ -54,6 +54,52 @@ public class LuProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == 'R')
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == 'S')
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == 'U')
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == 'T')
{
productBits.setCharAt(8, '1'); // Straßenbahn
}
else if (product == 'B')
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == 'P')
{
productBits.setCharAt(9, '1'); // AST/Rufbus
}
else if (product == 'F')
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
if (location.type == LocationType.STATION && location.hasId()) if (location.type == LocationType.STATION && location.hasId())

View file

@ -66,6 +66,41 @@ public class NasaProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // ICE
productBits.setCharAt(1, '1'); // IC/EC
}
else if (product == 'R')
{
productBits.setCharAt(3, '1'); // RE/RB
productBits.setCharAt(7, '1'); // Tourismus-Züge
productBits.setCharAt(2, '1'); // undokumentiert
}
else if (product == 'S' || product == 'U')
{
productBits.setCharAt(4, '1'); // S/U
}
else if (product == 'T')
{
productBits.setCharAt(5, '1'); // Straßenbahn
}
else if (product == 'B' || product == 'P')
{
productBits.setCharAt(6, '1'); // Bus
}
else if (product == 'F' || product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -53,6 +53,46 @@ public class NriProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Flugzeug
}
else if (product == 'R')
{
productBits.setCharAt(1, '1'); // Regionalverkehrszug
productBits.setCharAt(7, '1'); // Tourismus-Züge
productBits.setCharAt(2, '1'); // undokumentiert
}
else if (product == 'S' || product == 'T')
{
productBits.setCharAt(3, '1'); // Stadtbahn
}
else if (product == 'U')
{
productBits.setCharAt(4, '1'); // U-Bahn
}
else if (product == 'B' || product == 'P')
{
productBits.setCharAt(2, '1'); // Bus
}
else if (product == 'F')
{
productBits.setCharAt(5, '1'); // Express-Boot
productBits.setCharAt(6, '1'); // Schiff
productBits.setCharAt(7, '1'); // Fähre
}
else if (product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] PLACES = { "Oslo", "Bergen" }; private static final String[] PLACES = { "Oslo", "Bergen" };
@Override @Override

View file

@ -66,6 +66,12 @@ public class NsProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
throw new UnsupportedOperationException();
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
if (location.type == LocationType.STATION && location.hasId()) if (location.type == LocationType.STATION && location.hasId())

View file

@ -69,6 +69,12 @@ public class OebbProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
throw new UnsupportedOperationException();
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -54,6 +54,40 @@ public class PlProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // EC/IC/EIC/Ex
}
else if (product == 'R')
{
productBits.setCharAt(2, '1'); // TLK/IR/D
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == 'S' || product == 'T')
{
productBits.setCharAt(5, '1'); // Stadtbahn
}
else if (product == 'U')
{
productBits.setCharAt(6, '1'); // U-Bahn
}
else if (product == 'B' || product == 'P')
{
productBits.setCharAt(4, '1'); // Bus
}
else if (product == 'F' || product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] PLACES = { "Warszawa", "Kraków" }; private static final String[] PLACES = { "Warszawa", "Kraków" };
@Override @Override

View file

@ -65,6 +65,53 @@ public class RmvProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // ICE
}
else if (product == 'R')
{
productBits.setCharAt(1, '1'); // Zug
productBits.setCharAt(2, '1'); // Zug
productBits.setCharAt(10, '1'); // Zug
}
else if (product == 'S')
{
productBits.setCharAt(3, '1'); // S-Bahn
}
else if (product == 'U')
{
productBits.setCharAt(4, '1'); // U-Bahn
}
else if (product == 'T')
{
productBits.setCharAt(5, '1'); // Straßenbahn
}
else if (product == 'B')
{
productBits.setCharAt(6, '1'); // Niederflurbus
productBits.setCharAt(7, '1'); // Bus
}
else if (product == 'P')
{
productBits.setCharAt(9, '1'); // AST/Rufbus
}
else if (product == 'F')
{
productBits.setCharAt(8, '1'); // Fähre/Schiff
}
else if (product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] PLACES = { "Frankfurt (Main)", "Offenbach (Main)", "Mainz", "Wiesbaden", "Marburg", "Kassel", "Hanau", "Göttingen", private static final String[] PLACES = { "Frankfurt (Main)", "Offenbach (Main)", "Mainz", "Wiesbaden", "Marburg", "Kassel", "Hanau", "Göttingen",
"Darmstadt", "Aschaffenburg", "Berlin", "Fulda" }; "Darmstadt", "Aschaffenburg", "Berlin", "Fulda" };

View file

@ -55,6 +55,52 @@ public class RtProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == 'R')
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == 'S')
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == 'U')
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == 'T')
{
productBits.setCharAt(8, '1'); // Stadtbahn
}
else if (product == 'B')
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == 'P')
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == 'F')
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -57,6 +57,46 @@ public class SbbProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // ICE/TGV/IRJ
productBits.setCharAt(1, '1'); // EC/IC
}
else if (product == 'R')
{
productBits.setCharAt(2, '1'); // IR
productBits.setCharAt(3, '1'); // RE/D
productBits.setCharAt(8, '1'); // ARZ/EXT
}
else if (product == 'S')
{
productBits.setCharAt(5, '1'); // S/SN/R
}
else if (product == 'U' || product == 'T')
{
productBits.setCharAt(7, '1'); // Tram/Metro
}
else if (product == 'B' || product == 'P')
{
productBits.setCharAt(6, '1'); // Bus
}
else if (product == 'F')
{
productBits.setCharAt(4, '1'); // Schiff
}
else if (product == 'C')
{
productBits.setCharAt(7, '1'); // Seilbahn
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -84,6 +84,12 @@ public class SeProvider extends AbstractHafasProvider
throw new IllegalArgumentException("cannot handle: " + value); throw new IllegalArgumentException("cannot handle: " + value);
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
throw new UnsupportedOperationException();
}
private static final Pattern P_SPLIT_NAME_KN = Pattern.compile("(.*?) \\((.*?) kn\\)"); private static final Pattern P_SPLIT_NAME_KN = Pattern.compile("(.*?) \\((.*?) kn\\)");
@Override @Override

View file

@ -72,6 +72,37 @@ public class SeptaProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
}
else if (product == 'R' || product == 'S')
{
productBits.setCharAt(3, '1'); // Regional Rail
}
else if (product == 'U')
{
productBits.setCharAt(0, '1'); // Subway
}
else if (product == 'T')
{
productBits.setCharAt(1, '1'); // Trolley
}
else if (product == 'B')
{
productBits.setCharAt(2, '1'); // Bus
}
else if (product == 'P' || product == 'F' || product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final Pattern P_SPLIT_ADDRESS = Pattern.compile("(.*),\\s+([^,]+\\s+\\d{4,5})"); private static final Pattern P_SPLIT_ADDRESS = Pattern.compile("(.*),\\s+([^,]+\\s+\\d{4,5})");
@Override @Override

View file

@ -48,7 +48,7 @@ public class ShProvider extends AbstractHafasProvider
public ShProvider() public ShProvider()
{ {
super(API_BASE + "query.exe/dn", 16, null); super(API_BASE + "query.exe/dn", 10, null);
} }
public NetworkId id() public NetworkId id()
@ -65,6 +65,52 @@ public class ShProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == 'R')
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == 'S')
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == 'U')
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == 'T')
{
productBits.setCharAt(8, '1'); // Stadtbahn
}
else if (product == 'B')
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == 'P')
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == 'F')
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -66,6 +66,39 @@ public class SncbProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(2, '1'); // IC/IR/P/ICT
}
else if (product == 'R'||product == 'S')
{
productBits.setCharAt(6, '1'); // Zug
}
else if (product == 'U')
{
productBits.setCharAt(8, '1'); // Metro
}
else if (product == 'T')
{
productBits.setCharAt(10, '1'); // Stadtbahn
}
else if (product == 'B' || product == 'P')
{
productBits.setCharAt(9, '1'); // Bus
}
else if (product == 'F' || product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -55,6 +55,43 @@ public class VbbProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(5, '1');
}
else if (product == 'R')
{
productBits.setCharAt(6, '1');
}
else if (product == 'S')
{
productBits.setCharAt(0, '1');
}
else if (product == 'U')
{
productBits.setCharAt(1, '1');
}
else if (product == 'T')
{
productBits.setCharAt(2, '1');
}
else if (product == 'B' || product == 'P')
{
productBits.setCharAt(3, '1');
}
else if (product == 'F')
{
productBits.setCharAt(4, '1');
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final Pattern P_SPLIT_NAME_PAREN = Pattern.compile("(.*?) \\((.{4,}?)\\)(?: \\((U|S|S\\+U)\\))?"); private static final Pattern P_SPLIT_NAME_PAREN = Pattern.compile("(.*?) \\((.{4,}?)\\)(?: \\((U|S|S\\+U)\\))?");
private static final Pattern P_SPLIT_NAME_COMMA = Pattern.compile("([^,]*), ([^,]*)"); private static final Pattern P_SPLIT_NAME_COMMA = Pattern.compile("([^,]*), ([^,]*)");

View file

@ -36,7 +36,7 @@ public class VbnProvider extends AbstractHafasProvider
public VbnProvider() public VbnProvider()
{ {
super(API_BASE + "query.exe/dn", 11, null); super(API_BASE + "query.exe/dn", 10, null);
} }
public NetworkId id() public NetworkId id()
@ -53,6 +53,52 @@ public class VbnProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == 'R')
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == 'S')
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == 'U')
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == 'T')
{
productBits.setCharAt(8, '1'); // Stadtbahn
}
else if (product == 'B')
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == 'P')
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == 'F')
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {
final StringBuilder uri = new StringBuilder(API_BASE); final StringBuilder uri = new StringBuilder(API_BASE);

View file

@ -64,6 +64,54 @@ public class VgsProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == 'R')
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == 'S')
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == 'U')
{
productBits.setCharAt(5, '1'); // U-Bahn
}
else if (product == 'T')
{
productBits.setCharAt(6, '1'); // Stadtbahn
}
else if (product == 'B')
{
productBits.setCharAt(7, '1'); // Bus
productBits.setCharAt(10, '1'); // Schulbus
}
else if (product == 'P')
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == 'F')
{
productBits.setCharAt(8, '1'); // Schiff
}
else if (product == 'C')
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{ {

View file

@ -54,6 +54,48 @@ public class ZvvProvider extends AbstractHafasProvider
return false; return false;
} }
@Override
protected void setProductBits(final StringBuilder productBits, final char product)
{
if (product == 'I')
{
productBits.setCharAt(0, '1'); // ICE/EN/CNL/CIS/ES/MET/NZ/PEN/TGV/THA/X2
productBits.setCharAt(1, '1'); // EuroCity/InterCity/InterCityNight/SuperCity
}
else if (product == 'R')
{
productBits.setCharAt(2, '1'); // InterRegio
productBits.setCharAt(3, '1'); // Schnellzug/RegioExpress
}
else if (product == 'S')
{
productBits.setCharAt(5, '1'); // S-Bahn/StadtExpress/Eilzug/Regionalzug
}
else if (product == 'U')
{
}
else if (product == 'T')
{
productBits.setCharAt(9, '1'); // Tram
}
else if (product == 'B' || product == 'P')
{
productBits.setCharAt(6, '1'); // Postauto/Bus
}
else if (product == 'F')
{
productBits.setCharAt(4, '1'); // Schiff/Fähre/Dampfschiff
}
else if (product == 'C')
{
productBits.setCharAt(7, '1'); // Luftseilbahn/Standseilbahn/Bergbahn
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] PLACES = { "Zürich" }; private static final String[] PLACES = { "Zürich" };
@Override @Override
@ -163,6 +205,8 @@ public class ZvvProvider extends AbstractHafasProvider
return 'B'; return 'B';
if ("TRO-NF".equals(ucType)) // Niederflur if ("TRO-NF".equals(ucType)) // Niederflur
return 'B'; return 'B';
if ("N".equals(ucType)) // Nachtbus
return 'B';
if ("BUXI".equals(ucType)) if ("BUXI".equals(ucType))
return 'B'; return 'B';
if ("TX".equals(ucType)) if ("TX".equals(ucType))