diff --git a/src/de/schildbach/pte/AbstractHafasProvider.java b/src/de/schildbach/pte/AbstractHafasProvider.java index 4f01e9f4..b80ec220 100644 --- a/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/src/de/schildbach/pte/AbstractHafasProvider.java @@ -115,6 +115,8 @@ public abstract class AbstractHafasProvider implements NetworkProvider return 0; } + protected abstract void setProductBits(StringBuilder productBits, char product); + private static final Pattern P_SPLIT_ADDRESS = Pattern.compile("(\\d{4,5}\\s+[^,]+),\\s+(.*)"); protected String[] splitPlaceAndName(final String name) @@ -636,10 +638,19 @@ public abstract class AbstractHafasProvider implements NetworkProvider final Calendar c = new GregorianCalendar(timeZone()); 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 = "" // + "" + location(from) - + "" // + + "" // + + "" // + (via != null ? "" + location(via) + "" : "") // + "" + 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) throws IOException { - // System.out.println(request); + System.out.println(request); // ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), null, null)); InputStream is = null; diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index 419c96ab..77dec0ea 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -68,6 +68,12 @@ public final class BahnProvider extends AbstractHafasProvider 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 .compile("([^<]*)"); diff --git a/src/de/schildbach/pte/BvgProvider.java b/src/de/schildbach/pte/BvgProvider.java index 1c40a147..94552c8f 100644 --- a/src/de/schildbach/pte/BvgProvider.java +++ b/src/de/schildbach/pte/BvgProvider.java @@ -26,7 +26,6 @@ import java.util.GregorianCalendar; import java.util.HashMap; import java.util.LinkedList; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -83,6 +82,12 @@ public final class BvgProvider extends AbstractHafasProvider return true; } + @Override + protected void setProductBits(final StringBuilder productBits, final char product) + { + throw new UnsupportedOperationException(); + } + @Override protected String[] splitPlaceAndName(final String name) { diff --git a/src/de/schildbach/pte/DsbProvider.java b/src/de/schildbach/pte/DsbProvider.java index 3c9e03dd..bd9cd0d2 100644 --- a/src/de/schildbach/pte/DsbProvider.java +++ b/src/de/schildbach/pte/DsbProvider.java @@ -55,6 +55,12 @@ public class DsbProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/InvgProvider.java b/src/de/schildbach/pte/InvgProvider.java index 1ce9ca88..57bb1456 100644 --- a/src/de/schildbach/pte/InvgProvider.java +++ b/src/de/schildbach/pte/InvgProvider.java @@ -69,6 +69,12 @@ public class InvgProvider extends AbstractHafasProvider return false; } + @Override + protected void setProductBits(final StringBuilder productBits, final char product) + { + throw new UnsupportedOperationException(); + } + private static final String[] PLACES = { "Ingolstadt", "München" }; @Override diff --git a/src/de/schildbach/pte/LuProvider.java b/src/de/schildbach/pte/LuProvider.java index c121a424..b64a3037 100644 --- a/src/de/schildbach/pte/LuProvider.java +++ b/src/de/schildbach/pte/LuProvider.java @@ -54,6 +54,52 @@ public class LuProvider extends AbstractHafasProvider 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 { if (location.type == LocationType.STATION && location.hasId()) diff --git a/src/de/schildbach/pte/NasaProvider.java b/src/de/schildbach/pte/NasaProvider.java index 388dbda8..131eb1ec 100644 --- a/src/de/schildbach/pte/NasaProvider.java +++ b/src/de/schildbach/pte/NasaProvider.java @@ -66,6 +66,41 @@ public class NasaProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/NriProvider.java b/src/de/schildbach/pte/NriProvider.java index 1a5827df..5f698efc 100644 --- a/src/de/schildbach/pte/NriProvider.java +++ b/src/de/schildbach/pte/NriProvider.java @@ -53,6 +53,46 @@ public class NriProvider extends AbstractHafasProvider 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" }; @Override diff --git a/src/de/schildbach/pte/NsProvider.java b/src/de/schildbach/pte/NsProvider.java index c6e9dbe4..2777dfb9 100644 --- a/src/de/schildbach/pte/NsProvider.java +++ b/src/de/schildbach/pte/NsProvider.java @@ -66,6 +66,12 @@ public class NsProvider extends AbstractHafasProvider 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 { if (location.type == LocationType.STATION && location.hasId()) diff --git a/src/de/schildbach/pte/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java index 9a2fdf16..12051ceb 100644 --- a/src/de/schildbach/pte/OebbProvider.java +++ b/src/de/schildbach/pte/OebbProvider.java @@ -69,6 +69,12 @@ public class OebbProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/PlProvider.java b/src/de/schildbach/pte/PlProvider.java index 3b2a1327..1ab9a994 100644 --- a/src/de/schildbach/pte/PlProvider.java +++ b/src/de/schildbach/pte/PlProvider.java @@ -54,6 +54,40 @@ public class PlProvider extends AbstractHafasProvider 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" }; @Override diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java index d810df57..1d3a2b53 100644 --- a/src/de/schildbach/pte/RmvProvider.java +++ b/src/de/schildbach/pte/RmvProvider.java @@ -65,6 +65,53 @@ public class RmvProvider extends AbstractHafasProvider 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", "Darmstadt", "Aschaffenburg", "Berlin", "Fulda" }; diff --git a/src/de/schildbach/pte/RtProvider.java b/src/de/schildbach/pte/RtProvider.java index c17c95ed..c73fdb16 100644 --- a/src/de/schildbach/pte/RtProvider.java +++ b/src/de/schildbach/pte/RtProvider.java @@ -55,6 +55,52 @@ public class RtProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/SbbProvider.java b/src/de/schildbach/pte/SbbProvider.java index 3b91c2ee..99183e57 100644 --- a/src/de/schildbach/pte/SbbProvider.java +++ b/src/de/schildbach/pte/SbbProvider.java @@ -57,6 +57,46 @@ public class SbbProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/SeProvider.java b/src/de/schildbach/pte/SeProvider.java index 0830d98b..08611d0e 100644 --- a/src/de/schildbach/pte/SeProvider.java +++ b/src/de/schildbach/pte/SeProvider.java @@ -84,6 +84,12 @@ public class SeProvider extends AbstractHafasProvider 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\\)"); @Override diff --git a/src/de/schildbach/pte/SeptaProvider.java b/src/de/schildbach/pte/SeptaProvider.java index df2fa1ac..e6efd5f1 100644 --- a/src/de/schildbach/pte/SeptaProvider.java +++ b/src/de/schildbach/pte/SeptaProvider.java @@ -72,6 +72,37 @@ public class SeptaProvider extends AbstractHafasProvider 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})"); @Override diff --git a/src/de/schildbach/pte/ShProvider.java b/src/de/schildbach/pte/ShProvider.java index 65ae6045..9359b28d 100644 --- a/src/de/schildbach/pte/ShProvider.java +++ b/src/de/schildbach/pte/ShProvider.java @@ -48,7 +48,7 @@ public class ShProvider extends AbstractHafasProvider public ShProvider() { - super(API_BASE + "query.exe/dn", 16, null); + super(API_BASE + "query.exe/dn", 10, null); } public NetworkId id() @@ -65,6 +65,52 @@ public class ShProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/SncbProvider.java b/src/de/schildbach/pte/SncbProvider.java index 8f5c16fb..9aef4be9 100644 --- a/src/de/schildbach/pte/SncbProvider.java +++ b/src/de/schildbach/pte/SncbProvider.java @@ -66,6 +66,39 @@ public class SncbProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java index ef58df48..e2923f4f 100644 --- a/src/de/schildbach/pte/VbbProvider.java +++ b/src/de/schildbach/pte/VbbProvider.java @@ -55,6 +55,43 @@ public class VbbProvider extends AbstractHafasProvider 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_COMMA = Pattern.compile("([^,]*), ([^,]*)"); diff --git a/src/de/schildbach/pte/VbnProvider.java b/src/de/schildbach/pte/VbnProvider.java index bf57f5f3..eb42705e 100644 --- a/src/de/schildbach/pte/VbnProvider.java +++ b/src/de/schildbach/pte/VbnProvider.java @@ -36,7 +36,7 @@ public class VbnProvider extends AbstractHafasProvider public VbnProvider() { - super(API_BASE + "query.exe/dn", 11, null); + super(API_BASE + "query.exe/dn", 10, null); } public NetworkId id() @@ -53,6 +53,52 @@ public class VbnProvider extends AbstractHafasProvider 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 { final StringBuilder uri = new StringBuilder(API_BASE); diff --git a/src/de/schildbach/pte/VgsProvider.java b/src/de/schildbach/pte/VgsProvider.java index f7a07648..06a88a53 100644 --- a/src/de/schildbach/pte/VgsProvider.java +++ b/src/de/schildbach/pte/VgsProvider.java @@ -64,6 +64,54 @@ public class VgsProvider extends AbstractHafasProvider 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 { diff --git a/src/de/schildbach/pte/ZvvProvider.java b/src/de/schildbach/pte/ZvvProvider.java index 65cd73cb..caaae642 100644 --- a/src/de/schildbach/pte/ZvvProvider.java +++ b/src/de/schildbach/pte/ZvvProvider.java @@ -54,6 +54,48 @@ public class ZvvProvider extends AbstractHafasProvider 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" }; @Override @@ -163,6 +205,8 @@ public class ZvvProvider extends AbstractHafasProvider return 'B'; if ("TRO-NF".equals(ucType)) // Niederflur return 'B'; + if ("N".equals(ucType)) // Nachtbus + return 'B'; if ("BUXI".equals(ucType)) return 'B'; if ("TX".equals(ucType))