From 883015177e88460b7a65628dd8b8f6bfc935951a Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 31 Jan 2015 11:48:41 +0100 Subject: [PATCH] Migrate from using char as a product type to Product enum. Line labels are really just the label and can be null. --- .../schildbach/pte/AbstractEfaProvider.java | 437 ++++++++-------- .../schildbach/pte/AbstractHafasProvider.java | 471 +++++++++--------- .../pte/AbstractNavitiaProvider.java | 34 +- .../pte/AbstractNetworkProvider.java | 24 +- .../schildbach/pte/AbstractTsiProvider.java | 48 +- .../src/de/schildbach/pte/AvvProvider.java | 10 +- .../src/de/schildbach/pte/BahnProvider.java | 34 +- .../src/de/schildbach/pte/BayernProvider.java | 33 +- .../src/de/schildbach/pte/BvgProvider.java | 36 +- .../src/de/schildbach/pte/DsbProvider.java | 64 ++- .../de/schildbach/pte/EireannProvider.java | 10 +- .../src/de/schildbach/pte/InvgProvider.java | 22 +- .../src/de/schildbach/pte/JetProvider.java | 12 +- .../src/de/schildbach/pte/KvvProvider.java | 9 +- enabler/src/de/schildbach/pte/LuProvider.java | 38 +- .../src/de/schildbach/pte/MetProvider.java | 18 +- .../src/de/schildbach/pte/MvvProvider.java | 20 +- .../src/de/schildbach/pte/NasaProvider.java | 52 +- .../de/schildbach/pte/NetworkProvider.java | 8 +- .../src/de/schildbach/pte/NriProvider.java | 50 +- enabler/src/de/schildbach/pte/NsProvider.java | 36 +- .../src/de/schildbach/pte/NvbwProvider.java | 35 +- .../src/de/schildbach/pte/NvvProvider.java | 40 +- .../src/de/schildbach/pte/OebbProvider.java | 90 ++-- .../src/de/schildbach/pte/ParisProvider.java | 11 +- enabler/src/de/schildbach/pte/PlProvider.java | 44 +- .../src/de/schildbach/pte/RsagProvider.java | 22 +- enabler/src/de/schildbach/pte/RtProvider.java | 18 +- .../src/de/schildbach/pte/SbbProvider.java | 42 +- enabler/src/de/schildbach/pte/SeProvider.java | 30 +- .../src/de/schildbach/pte/SeptaProvider.java | 26 +- enabler/src/de/schildbach/pte/SfProvider.java | 52 +- enabler/src/de/schildbach/pte/ShProvider.java | 22 +- .../src/de/schildbach/pte/SncbProvider.java | 40 +- enabler/src/de/schildbach/pte/Standard.java | 19 +- .../de/schildbach/pte/StockholmProvider.java | 52 +- .../src/de/schildbach/pte/StvProvider.java | 11 +- .../src/de/schildbach/pte/SydneyProvider.java | 52 +- .../src/de/schildbach/pte/TfiProvider.java | 13 +- .../src/de/schildbach/pte/TlemProvider.java | 9 +- .../src/de/schildbach/pte/VbbProvider.java | 18 +- .../src/de/schildbach/pte/VblProvider.java | 57 ++- .../src/de/schildbach/pte/VbnProvider.java | 32 +- .../src/de/schildbach/pte/VgnProvider.java | 13 +- .../src/de/schildbach/pte/VmsProvider.java | 17 +- .../src/de/schildbach/pte/VrnProvider.java | 11 +- .../src/de/schildbach/pte/VrrProvider.java | 30 +- .../src/de/schildbach/pte/VsnProvider.java | 34 +- .../src/de/schildbach/pte/VvoProvider.java | 25 +- .../src/de/schildbach/pte/ZvvProvider.java | 64 ++- enabler/src/de/schildbach/pte/dto/Line.java | 53 +- enabler/src/de/schildbach/pte/dto/Trip.java | 6 +- 52 files changed, 1216 insertions(+), 1238 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index 67dc0300..453a7193 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -999,441 +999,441 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider private static final Pattern P_LINE_S_DB = Pattern.compile("(S\\d+) \\((?:DB Regio AG)\\)"); private static final Pattern P_LINE_NUMBER = Pattern.compile("\\d+"); - protected String parseLine(final String mot, String symbol, final String name, final String longName, final String trainType, + protected Line parseLine(final String id, final String mot, String symbol, final String name, final String longName, final String trainType, final String trainNum, final String trainName) { if (mot == null) { if (trainName != null) { - final String str = name != null ? name : ""; + final String str = Strings.nullToEmpty(name); if (trainName.equals("S-Bahn")) - return 'S' + str; + return new Line(id, Product.SUBURBAN_TRAIN, str); if (trainName.equals("U-Bahn")) - return 'U' + str; + return new Line(id, Product.SUBWAY, str); if (trainName.equals("Straßenbahn")) - return 'T' + str; + return new Line(id, Product.TRAM, str); if (trainName.equals("Badner Bahn")) - return 'T' + str; + return new Line(id, Product.TRAM, str); if (trainName.equals("Stadtbus")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Citybus")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Regionalbus")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("ÖBB-Postbus")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Autobus")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Discobus")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Nachtbus")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Anrufsammeltaxi")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Ersatzverkehr")) - return 'B' + str; + return new Line(id, Product.BUS, str); if (trainName.equals("Vienna Airport Lines")) - return 'B' + str; + return new Line(id, Product.BUS, str); } } else if ("0".equals(mot)) { - final String trainNumStr = trainNum != null ? trainNum : ""; + final String trainNumStr = Strings.nullToEmpty(trainNum); if (("EC".equals(trainType) || "EuroCity".equals(trainName) || "Eurocity".equals(trainName)) && trainNum != null) - return "IEC" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "EC" + trainNum); if (("EN".equals(trainType) || "EuroNight".equals(trainName)) && trainNum != null) - return "IEN" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "EN" + trainNum); if (("IC".equals(trainType) || "InterCity".equals(trainName)) && trainNum != null) - return "IIC" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "IC" + trainNum); if (("ICE".equals(trainType) || "ICE".equals(trainName) || "Intercity-Express".equals(trainName)) && trainNum != null) - return "IICE" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "ICE" + trainNum); if (("ICN".equals(trainType) || "InterCityNight".equals(trainName)) && trainNum != null) - return "IICN" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "ICN" + trainNum); if (("X".equals(trainType) || "InterConnex".equals(trainName)) && trainNum != null) - return "IX" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "X" + trainNum); if (("CNL".equals(trainType) || "CityNightLine".equals(trainName)) && trainNum != null) // City Night Line - return "ICNL" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "CNL" + trainNum); if (("THA".equals(trainType) || "Thalys".equals(trainName)) && trainNum != null) - return "ITHA" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "THA" + trainNum); if ("RHI".equals(trainType) && trainNum != null) - return "IRHI" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "RHI" + trainNum); if (("TGV".equals(trainType) || "TGV".equals(trainName)) && trainNum != null) - return "ITGV" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "TGV" + trainNum); if ("TGD".equals(trainType) && trainNum != null) - return "ITGD" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "TGD" + trainNum); if ("INZ".equals(trainType) && trainNum != null) - return "IINZ" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "INZ" + trainNum); if (("RJ".equals(trainType) || "railjet".equals(trainName)) && trainNum != null) // railjet - return "IRJ" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "RJ" + trainNum); if (("WB".equals(trainType) || "WESTbahn".equals(trainName)) && trainNum != null) - return "IWB" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "WB" + trainNum); if (("HKX".equals(trainType) || "Hamburg-Köln-Express".equals(trainName)) && trainNum != null) - return "IHKX" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "HKX" + trainNum); if ("INT".equals(trainType) && trainNum != null) // SVV, VAGFR - return "IINT" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "INT" + trainNum); if (("SC".equals(trainType) || "SC Pendolino".equals(trainName)) && trainNum != null) // SuperCity - return "ISC" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "SC" + trainNum); if ("ECB".equals(trainType) && trainNum != null) // EC, Verona-München - return "IECB" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "ECB" + trainNum); if ("ES".equals(trainType) && trainNum != null) // Eurostar Italia - return "IES" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "ES" + trainNum); if (("EST".equals(trainType) || "EUROSTAR".equals(trainName)) && trainNum != null) - return "IEST" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "EST" + trainNum); if ("EIC".equals(trainType) && trainNum != null) // Ekspres InterCity, Polen - return "IEIC" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "EIC" + trainNum); if ("MT".equals(trainType) && "Schnee-Express".equals(trainName) && trainNum != null) - return "IMT" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "MT" + trainNum); if (("TLK".equals(trainType) || "Tanie Linie Kolejowe".equals(trainName)) && trainNum != null) - return "ITLK" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "TLK" + trainNum); if ("Zug".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("Zuglinie".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("IR".equals(trainType) || "Interregio".equals(trainName) || "InterRegio".equals(trainName)) - return "RIR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "IR" + trainNum); if ("IRE".equals(trainType) || "Interregio-Express".equals(trainName)) - return "RIRE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "IRE" + trainNum); if ("InterRegioExpress".equals(trainName)) - return "RIRE" + trainNumStr; + return new Line(id, Product.REGIONAL_TRAIN, "IRE" + trainNumStr); if ("RE".equals(trainType) || "Regional-Express".equals(trainName)) - return "RRE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "RE" + trainNum); if (trainType == null && trainNum != null && P_LINE_RE.matcher(trainNum).matches()) - return 'R' + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, trainNum); if ("Regionalexpress".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("R-Bahn".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("RB-Bahn".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("RE-Bahn".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("REX".equals(trainType)) // RegionalExpress, Österreich - return "RREX" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "REX" + trainNum); if (("RB".equals(trainType) || "Regionalbahn".equals(trainName)) && trainNum != null) - return "RRB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "RB" + trainNum); if (trainType == null && trainNum != null && P_LINE_RB.matcher(trainNum).matches()) - return 'R' + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, trainNum); if ("Abellio-Zug".equals(trainName)) - return "R" + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("Westfalenbahn".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("Chiemseebahn".equals(trainName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("R".equals(trainType) || "Regionalzug".equals(trainName)) - return "RR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "R" + trainNum); if (trainType == null && trainNum != null && P_LINE_R.matcher(trainNum).matches()) - return 'R' + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, trainNum); if ("D".equals(trainType) || "Schnellzug".equals(trainName)) - return "RD" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "D" + trainNum); if ("E".equals(trainType) || "Eilzug".equals(trainName)) - return "RE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "E" + trainNum); if ("WFB".equals(trainType) || "WestfalenBahn".equals(trainName)) - return "RWFB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "WFB" + trainNum); if (("NWB".equals(trainType) || "NordWestBahn".equals(trainName)) && trainNum != null) - return "RNWB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "NWB" + trainNum); if ("WES".equals(trainType) || "Westbahn".equals(trainName)) - return "RWES" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "WES" + trainNum); if ("ERB".equals(trainType) || "eurobahn".equals(trainName)) - return "RERB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ERB" + trainNum); if ("CAN".equals(trainType) || "cantus Verkehrsgesellschaft".equals(trainName)) - return "RCAN" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "CAN" + trainNum); if ("HEX".equals(trainType) || "Veolia Verkehr Sachsen-Anhalt".equals(trainName)) - return "RHEX" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "HEX" + trainNum); if ("EB".equals(trainType) || "Erfurter Bahn".equals(trainName)) - return "REB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "EB" + trainNum); if ("Erfurter Bahn".equals(longName)) - return "REB"; + return new Line(id, Product.REGIONAL_TRAIN, "EB"); if ("EBx".equals(trainType) || "Erfurter Bahn Express".equals(trainName)) - return "REBx" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "EBx" + trainNum); if ("Erfurter Bahn Express".equals(longName)) - return "REBx"; + return new Line(id, Product.REGIONAL_TRAIN, "EBx"); if ("MRB".equals(trainType) || "Mitteldeutsche Regiobahn".equals(trainName)) - return "RMRB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "MRB" + trainNum); if ("ABR".equals(trainType) || "ABELLIO Rail NRW GmbH".equals(trainName)) - return "RABR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ABR" + trainNum); if ("NEB".equals(trainType) || "NEB Niederbarnimer Eisenbahn".equals(trainName)) - return "RNEB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "NEB" + trainNum); if ("OE".equals(trainType) || "Ostdeutsche Eisenbahn GmbH".equals(trainName)) - return "ROE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "OE" + trainNum); if ("ODE".equals(trainType)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("OLA".equals(trainType) || "Ostseeland Verkehr GmbH".equals(trainName)) - return "ROLA" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "OLA" + trainNum); if ("UBB".equals(trainType) || "Usedomer Bäderbahn".equals(trainName)) - return "RUBB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "UBB" + trainNum); if ("EVB".equals(trainType) || "ELBE-WESER GmbH".equals(trainName)) - return "REVB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "EVB" + trainNum); if ("RTB".equals(trainType) || "Rurtalbahn GmbH".equals(trainName)) - return "RRTB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "RTB" + trainNum); if ("STB".equals(trainType) || "Süd-Thüringen-Bahn".equals(trainName)) - return "RSTB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "STB" + trainNum); if ("HTB".equals(trainType) || "Hellertalbahn".equals(trainName)) - return "RHTB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "HTB" + trainNum); if ("VBG".equals(trainType) || "Vogtlandbahn".equals(trainName)) - return "RVBG" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "VBG" + trainNum); if ("CB".equals(trainType) || "City-Bahn Chemnitz".equals(trainName)) - return "RCB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "CB" + trainNum); if ("VEC".equals(trainType) || "vectus Verkehrsgesellschaft".equals(trainName)) - return "RVEC" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "VEC" + trainNum); if ("HzL".equals(trainType) || "Hohenzollerische Landesbahn AG".equals(trainName)) - return "RHzL" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "HzL" + trainNum); if ("SBB".equals(trainType) || "SBB GmbH".equals(trainName)) - return "RSBB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SBB" + trainNum); if ("MBB".equals(trainType) || "Mecklenburgische Bäderbahn Molli".equals(trainName)) - return "RMBB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "MBB" + trainNum); if ("OS".equals(trainType)) // Osobní vlak - return "ROS" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "OS" + trainNum); if ("SP".equals(trainType) || "Sp".equals(trainType)) // Spěšný vlak - return "RSP" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SP" + trainNum); if ("Dab".equals(trainType) || "Daadetalbahn".equals(trainName)) - return "RDab" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "Dab" + trainNum); if ("FEG".equals(trainType) || "Freiberger Eisenbahngesellschaft".equals(trainName)) - return "RFEG" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "FEG" + trainNum); if ("ARR".equals(trainType) || "ARRIVA".equals(trainName)) - return "RARR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ARR" + trainNum); if ("HSB".equals(trainType) || "Harzer Schmalspurbahn".equals(trainName)) - return "RHSB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "HSB" + trainNum); if ("ALX".equals(trainType) || "alex - Länderbahn und Vogtlandbahn GmbH".equals(trainName)) - return "RALX" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ALX" + trainNum); if ("EX".equals(trainType) || "Fatra".equals(trainName)) - return "REX" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "EX" + trainNum); if ("ME".equals(trainType) || "metronom".equals(trainName)) - return "RME" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ME" + trainNum); if ("metronom".equals(longName)) - return "RME"; + return new Line(id, Product.REGIONAL_TRAIN, "ME"); if ("MEr".equals(trainType)) - return "RMEr" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "MEr" + trainNum); if ("AKN".equals(trainType) || "AKN Eisenbahn AG".equals(trainName)) - return "RAKN" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "AKN" + trainNum); if ("SOE".equals(trainType) || "Sächsisch-Oberlausitzer Eisenbahngesellschaft".equals(trainName)) - return "RSOE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SOE" + trainNum); if ("VIA".equals(trainType) || "VIAS GmbH".equals(trainName)) - return "RVIA" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "VIA" + trainNum); if ("BRB".equals(trainType) || "Bayerische Regiobahn".equals(trainName)) - return "RBRB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "BRB" + trainNum); if ("BLB".equals(trainType) || "Berchtesgadener Land Bahn".equals(trainName)) - return "RBLB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "BLB" + trainNum); if ("HLB".equals(trainType) || "Hessische Landesbahn".equals(trainName)) - return "RHLB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "HLB" + trainNum); if ("NOB".equals(trainType) || "NordOstseeBahn".equals(trainName)) - return "RNOB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "NOB" + trainNum); if ("NBE".equals(trainType) || "Nordbahn Eisenbahngesellschaft".equals(trainName)) - return "RNBE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "NBE" + trainNum); if ("VEN".equals(trainType) || "Rhenus Veniro".equals(trainName)) - return "RVEN" + trainType; + return new Line(id, Product.REGIONAL_TRAIN, "VEN" + trainType); if ("DPN".equals(trainType) || "Nahreisezug".equals(trainName)) - return "RDPN" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "DPN" + trainNum); if ("RBG".equals(trainType) || "Regental Bahnbetriebs GmbH".equals(trainName)) - return "RRBG" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "RBG" + trainNum); if ("BOB".equals(trainType) || "Bodensee-Oberschwaben-Bahn".equals(trainName)) - return "RBOB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "BOB" + trainNum); if ("VE".equals(trainType) || "Vetter".equals(trainName)) - return "RVE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "VE" + trainNum); if ("SDG".equals(trainType) || "SDG Sächsische Dampfeisenbahngesellschaft mbH".equals(trainName)) - return "RSDG" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SDG" + trainNum); if ("PRE".equals(trainType) || "Pressnitztalbahn".equals(trainName)) - return "RPRE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "PRE" + trainNum); if ("VEB".equals(trainType) || "Vulkan-Eifel-Bahn".equals(trainName)) - return "RVEB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "VEB" + trainNum); if ("neg".equals(trainType) || "Norddeutsche Eisenbahn Gesellschaft".equals(trainName)) - return "Rneg" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "neg" + trainNum); if ("AVG".equals(trainType) || "Felsenland-Express".equals(trainName)) - return "RAVG" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "AVG" + trainNum); if ("P".equals(trainType) || "BayernBahn Betriebs-GmbH".equals(trainName) || "Brohltalbahn".equals(trainName) || "Kasbachtalbahn".equals(trainName)) - return "RP" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "P" + trainNum); if ("SBS".equals(trainType) || "Städtebahn Sachsen".equals(trainName)) - return "RSBS" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SBS" + trainNum); if ("SES".equals(trainType) || "Städteexpress Sachsen".equals(trainName)) - return "RSES" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SES" + trainNum); if ("SB-".equals(trainType)) // Städtebahn Sachsen - return "RSB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SB" + trainNum); if ("ag".equals(trainType)) // agilis - return "Rag" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ag" + trainNum); if ("agi".equals(trainType) || "agilis".equals(trainName)) - return "Ragi" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "agi" + trainNum); if ("as".equals(trainType) || "agilis-Schnellzug".equals(trainName)) - return "Ras" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "as" + trainNum); if ("TLX".equals(trainType) || "TRILEX".equals(trainName)) // Trilex (Vogtlandbahn) - return "RTLX" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "TLX" + trainNum); if ("MSB".equals(trainType) || "Mainschleifenbahn".equals(trainName)) - return "RMSB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "MSB" + trainNum); if ("BE".equals(trainType) || "Bentheimer Eisenbahn".equals(trainName)) - return "RBE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "BE" + trainNum); if ("erx".equals(trainType) || "erixx - Der Heidesprinter".equals(trainName)) - return "Rerx" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "erx" + trainNum); if ("SWEG-Zug".equals(trainName)) // Südwestdeutschen Verkehrs-Aktiengesellschaft - return "RSWEG" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SWEG" + trainNum); if ("SWEG-Zug".equals(longName)) - return "RSWEG"; + return new Line(id, Product.REGIONAL_TRAIN, "SWEG"); if ("EGP Eisenbahngesellschaft Potsdam".equals(trainName)) - return "REGP" + trainNumStr; + return new Line(id, Product.REGIONAL_TRAIN, "EGP" + trainNumStr); if ("ÖBB".equals(trainType) || "ÖBB".equals(trainName)) - return "RÖBB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ÖBB" + trainNum); if ("CAT".equals(trainType)) // City Airport Train Wien - return "RCAT" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "CAT" + trainNum); if ("DZ".equals(trainType) || "Dampfzug".equals(trainName)) - return "RDZ" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "DZ" + trainNum); if ("CD".equals(trainType)) // Tschechien - return "RCD" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "CD" + trainNum); if ("VR".equals(trainType)) // Polen - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("PR".equals(trainType)) // Polen - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("KD".equals(trainType)) // Koleje Dolnośląskie (Niederschlesische Eisenbahn) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("Koleje Dolnoslaskie".equals(trainName) && symbol != null) // Koleje Dolnośląskie - return "R" + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("OO".equals(trainType) || "Ordinary passenger (o.pas.)".equals(trainName)) // GB - return "ROO" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "OO" + trainNum); if ("XX".equals(trainType) || "Express passenger (ex.pas.)".equals(trainName)) // GB - return "RXX" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "XX" + trainNum); if ("XZ".equals(trainType) || "Express passenger sleeper".equals(trainName)) // GB - return "RXZ" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "XZ" + trainNum); if ("ATB".equals(trainType)) // Autoschleuse Tauernbahn - return "RATB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ATB" + trainNum); if ("ATZ".equals(trainType)) // Autozug - return "RATZ" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ATZ" + trainNum); if ("AZ".equals(trainType) || "Auto-Zug".equals(trainName)) - return "RAZ" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "AZ" + trainNum); if ("DWE".equals(trainType) || "Dessau-Wörlitzer Eisenbahn".equals(trainName)) - return "RDWE" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "DWE" + trainNum); if ("KTB".equals(trainType) || "Kandertalbahn".equals(trainName)) - return "RKTB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "KTB" + trainNum); if ("CBC".equals(trainType) || "CBC".equals(trainName)) // City-Bahn Chemnitz - return "RCBC" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "CBC" + trainNum); if ("Bernina Express".equals(trainName)) - return 'R' + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, trainNum); if ("STR".equals(trainType)) // Harzquerbahn, Nordhausen - return "RSTR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "STR" + trainNum); if ("EXT".equals(trainType) || "Extrazug".equals(trainName)) - return "REXT" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "EXT" + trainNum); if ("Heritage Railway".equals(trainName)) // GB - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("WTB".equals(trainType) || "Wutachtalbahn".equals(trainName)) - return "RWTB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "WTB" + trainNum); if ("DB".equals(trainType) || "DB Regio".equals(trainName)) - return "RDB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "DB" + trainNum); if ("M".equals(trainType) && "Meridian".equals(trainName)) - return "RM" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "M" + trainNum); if ("M".equals(trainType) && "Messezug".equals(trainName)) - return "RM" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "M" + trainNum); if ("EZ".equals(trainType)) // ÖBB Erlebniszug - return "REZ" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "EZ" + trainNum); if ("DPF".equals(trainType)) - return "RDPF" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "DPF" + trainNum); if ("WBA".equals(trainType) || "Waldbahn".equals(trainName)) - return "RWBA" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "WBA" + trainNum); if ("ÖBA".equals(trainType) && trainNum != null) // Eisenbahn-Betriebsgesellschaft Ochsenhausen - return "RÖBA" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ÖBA" + trainNum); if (("UEF".equals(trainType) || "Ulmer Eisenbahnfreunde".equals(trainName)) && trainNum != null) - return "RUEF" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "UEF" + trainNum); if (("DBG".equals(trainType) || "Döllnitzbahn".equals(trainName)) && trainNum != null) - return "RDBG" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "DBG" + trainNum); if (("TL".equals(trainType) || "Trilex".equals(trainName)) && trainNum != null) - return "RTL" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "TL" + trainNum); if (("OPB".equals(trainType) || "oberpfalzbahn".equals(trainName)) && trainNum != null) - return "ROPB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "OPB" + trainNum); if (("OPX".equals(trainType) || "oberpfalz-express".equals(trainName)) && trainNum != null) - return "ROPX" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "OPX" + trainNum); if (("V6".equals(trainType) || "vlexx".equals(trainName)) && trainNum != null) - return "Rvlexx" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "vlexx" + trainNum); if (("ARZ".equals(trainType) || "Autoreisezug".equals(trainName)) && trainNum != null) - return "RARZ" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ARZ" + trainNum); if ("BSB-Zug".equals(trainName) && trainNum != null) // Breisgau-S-Bahn - return 'S' + trainNum; + return new Line(id, Product.SUBURBAN_TRAIN, trainNum); if ("BSB-Zug".equals(trainName) && trainNum == null) - return "SBSB"; + return new Line(id, Product.SUBURBAN_TRAIN, "BSB"); if ("BSB-Zug".equals(longName)) - return "SBSB"; + return new Line(id, Product.SUBURBAN_TRAIN, "BSB"); if ("RSB".equals(trainType)) // Regionalschnellbahn, Wien - return "SRSB" + trainNum; + return new Line(id, Product.SUBURBAN_TRAIN, "RSB" + trainNum); if ("RER".equals(trainName) && symbol != null && symbol.length() == 1) // Réseau Express Régional, // Frankreich - return 'S' + symbol; + return new Line(id, Product.SUBURBAN_TRAIN, symbol); if ("S".equals(trainType)) - return "SS" + trainNum; + return new Line(id, Product.SUBURBAN_TRAIN, "S" + trainNum); if ("S-Bahn".equals(trainName)) - return "SS" + trainNumStr; + return new Line(id, Product.SUBURBAN_TRAIN, "S" + trainNumStr); if ("RT".equals(trainType) || "RegioTram".equals(trainName)) - return "TRT" + trainNum; + return new Line(id, Product.TRAM, "RT" + trainNum); if ("Bus".equals(trainType)) - return "B" + trainNum; + return new Line(id, Product.BUS, "" + trainNum); if ("SEV".equals(trainType) || "SEV".equals(trainNum) || "SEV".equals(trainName) || "SEV".equals(symbol) || "BSV".equals(trainType) || "Ersatzverkehr".equals(trainName) || "Schienenersatzverkehr".equals(trainName)) - return "BSEV" + (trainNum != null ? trainNum : ""); + return new Line(id, Product.BUS, "SEV" + trainNumStr); if ("Bus replacement".equals(trainName)) // GB - return "BBR"; + return new Line(id, Product.BUS, "BR"); if ("BR".equals(trainType) && trainName.startsWith("Bus")) // GB - return "BBR" + trainNum; + return new Line(id, Product.BUS, "BR" + trainNum); if ("GB".equals(trainType)) // Gondelbahn - return "CGB" + trainNum; + return new Line(id, Product.CABLECAR, "GB" + trainNum); if ("SB".equals(trainType)) // Seilbahn - return "CSB" + trainNum; + return new Line(id, Product.SUBURBAN_TRAIN, "SB" + trainNum); if ("ZUG".equals(trainType) && trainNum != null) - return '?' + trainNum; + return new Line(id, null, trainNum); if (symbol != null && P_LINE_NUMBER.matcher(symbol).matches() && trainType == null && trainName == null) - return '?' + symbol; + return new Line(id, null, symbol); if ("N".equals(trainType) && trainName == null && symbol == null) - return "?N" + trainNum; + return new Line(id, null, "N" + trainNum); if ("Train".equals(trainName)) - return "?"; + return new Line(id, null, null); // generic if (trainName != null && trainType == null && trainNum == null) - return '?' + trainName; + return new Line(id, null, trainName); } else if ("1".equals(mot)) { if (symbol != null && P_LINE_S.matcher(symbol).matches()) - return "S" + symbol; + return new Line(id, Product.SUBURBAN_TRAIN, symbol); if (name != null && P_LINE_S.matcher(name).matches()) - return "S" + name; + return new Line(id, Product.SUBURBAN_TRAIN, name); if ("S-Bahn".equals(trainName)) - return "SS" + Strings.nullToEmpty(trainNum); + return new Line(id, Product.SUBURBAN_TRAIN, "S" + Strings.nullToEmpty(trainNum)); if ("S5X".equals(symbol)) - return "SS5X"; + return new Line(id, Product.SUBURBAN_TRAIN, "S5X"); if (symbol != null && symbol.equals(name)) { final Matcher m = P_LINE_S_DB.matcher(symbol); if (m.matches()) - return "S" + m.group(1); + return new Line(id, Product.SUBURBAN_TRAIN, m.group(1)); } } else if ("2".equals(mot)) { - return 'U' + name; + return new Line(id, Product.SUBWAY, name); } else if ("3".equals(mot) || "4".equals(mot)) { - return 'T' + name; + return new Line(id, Product.TRAM, name); } else if ("5".equals(mot) || "6".equals(mot) || "7".equals(mot) || "10".equals(mot)) { if ("Schienenersatzverkehr".equals(name)) - return "BSEV"; + return new Line(id, Product.BUS, "SEV"); else - return 'B' + name; + return new Line(id, Product.BUS, name); } else if ("8".equals(mot)) { - return 'C' + name; + return new Line(id, Product.CABLECAR, name); } else if ("9".equals(mot)) { - return 'F' + name; + return new Line(id, Product.FERRY, name); } else if ("11".equals(mot)) { - return '?' + ParserUtils.firstNotEmpty(symbol, name); + return new Line(id, null, ParserUtils.firstNotEmpty(symbol, name)); } throw new IllegalStateException("cannot normalize mot='" + mot + "' symbol='" + symbol + "' name='" + name + "' long='" + longName @@ -1805,8 +1805,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider } final String network = lineId.substring(0, lineId.indexOf(':')); - final String lineLabel = parseLine(productType, symbol, symbol, null, trainType, trainNum, productName); - line = new Line(lineId, lineLabel, lineStyle(network, lineLabel)); + final Line parsedLine = parseLine(lineId, productType, symbol, symbol, null, trainType, trainNum, productName); + line = new Line(parsedLine.id, parsedLine.product, parsedLine.label, lineStyle(network, parsedLine.product, parsedLine.label)); } XmlPullUtil.skipExit(pp, "m"); @@ -1974,9 +1974,9 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final String trainType = ParserUtils.firstNotEmpty(slTrainType, itdTrainType); final String trainName = ParserUtils.firstNotEmpty(slTrainName, itdTrainName); - final String label = parseLine(slMotType, slSymbol, slNumber, slNumber, trainType, slTrainNum, trainName); + final Line line = parseLine(slStateless, slMotType, slSymbol, slNumber, slNumber, trainType, slTrainNum, trainName); - return new Line(slStateless, label, lineStyle(divaNetwork, label), itdMessage); + return new Line(line.id, line.product, line.label, lineStyle(divaNetwork, line.product, line.label), itdMessage); } private static final Pattern P_STATION_NAME_WHITESPACE = Pattern.compile("\\s+"); @@ -2496,22 +2496,14 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final String destinationId = XmlPullUtil.optAttr(pp, "destID", null); final Location destination = new Location(destinationId != null ? LocationType.STATION : LocationType.ANY, destinationId, null, destinationName); - final String lineLabel; - final String motSymbol = XmlPullUtil.optAttr(pp, "symbol", null); - if ("AST".equals(motSymbol)) - { - lineLabel = "BAST"; - } - else - { - final String motType = XmlPullUtil.attr(pp, "motType"); - final String motShortName = XmlPullUtil.optAttr(pp, "shortname", null); - final String motName = XmlPullUtil.attr(pp, "name"); - final String motTrainName = XmlPullUtil.optAttr(pp, "trainName", null); - final String motTrainType = XmlPullUtil.optAttr(pp, "trainType", null); - lineLabel = parseLine(motType, motSymbol, motShortName, motName, motTrainType, motShortName, motTrainName); - } + final String motSymbol = XmlPullUtil.optAttr(pp, "symbol", null); + final String motType = XmlPullUtil.optAttr(pp, "motType", null); + final String motShortName = XmlPullUtil.optAttr(pp, "shortname", null); + final String motName = XmlPullUtil.attr(pp, "name"); + final String motTrainName = XmlPullUtil.optAttr(pp, "trainName", null); + final String motTrainType = XmlPullUtil.optAttr(pp, "trainType", null); + XmlPullUtil.enter(pp, "itdMeansOfTransport"); XmlPullUtil.require(pp, "motDivaParams"); final String divaNetwork = XmlPullUtil.attr(pp, "network"); @@ -2522,6 +2514,12 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final String lineId = divaNetwork + ':' + divaLine + ':' + divaSupplement + ':' + divaDirection + ':' + divaProject; XmlPullUtil.skipExit(pp, "itdMeansOfTransport"); + final Line line; + if ("AST".equals(motSymbol)) + line = new Line(null, Product.BUS, "AST"); + else + line = parseLine(lineId, motType, motSymbol, motShortName, motName, motTrainType, motShortName, motTrainName); + final Integer departureDelay; final Integer arrivalDelay; if (XmlPullUtil.test(pp, "itdRBLControlled")) @@ -2694,14 +2692,15 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final Set lineAttrs = new HashSet(); if (wheelChairAccess || lowFloorVehicle) lineAttrs.add(Line.Attr.WHEEL_CHAIR_ACCESS); - final Line line = new Line(lineId, lineLabel, lineStyle(divaNetwork, lineLabel), lineAttrs); + final Line styledLine = new Line(line.id, line.product, line.label, lineStyle(divaNetwork, line.product, line.label), + lineAttrs); final Stop departure = new Stop(departureLocation, true, departureTargetTime != null ? departureTargetTime : departureTime, departureTime != null ? departureTime : null, departurePosition, null); final Stop arrival = new Stop(arrivalLocation, false, arrivalTargetTime != null ? arrivalTargetTime : arrivalTime, arrivalTime != null ? arrivalTime : null, arrivalPosition, null); - legs.add(new Trip.Public(line, destination, departure, arrival, intermediateStops, path, message)); + legs.add(new Trip.Public(styledLine, destination, departure, arrival, intermediateStops, path, message)); } else { diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index fd9bfe07..15679ba7 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -242,9 +242,9 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider return (1 << numProductBits) - 1; } - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { - return 0; + return null; } protected abstract void setProductBits(StringBuilder productBits, Product product); @@ -648,16 +648,14 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Line line; if (classStr != null) { - final char classChar = intToProduct(Integer.parseInt(classStr)); - if (classChar == 0) + final Product product = intToProduct(Integer.parseInt(classStr)); + if (product == null) throw new IllegalArgumentException(); // could check for type consistency here - final String lineName = prodLine.label.substring(1); if (prodLine.attrs != null) - line = newLine(classChar, lineName, null, prodLine.attrs.toArray(new Line.Attr[0])); + line = newLine(product, prodLine.label, null, prodLine.attrs.toArray(new Line.Attr[0])); else - line = newLine(classChar, lineName, null); - + line = newLine(product, prodLine.label, null); } else { @@ -1955,9 +1953,9 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider } else if (type == 2) { - final char lineProduct; + final Product lineProduct; if (lineOnDemand) - lineProduct = Product.ON_DEMAND.code; + lineProduct = Product.ON_DEMAND; else if (lineClass != 0) lineProduct = intToProduct(lineClass); else @@ -2553,444 +2551,435 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider private static final Pattern P_LINE_BUS = Pattern.compile("BUS\\w{0,5}"); private static final Pattern P_LINE_TAXI = Pattern.compile("TAX\\w{0,5}"); - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); // Intercity if ("EC".equals(ucType)) // EuroCity - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("EN".equals(ucType)) // EuroNight - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("D".equals(ucType)) // EuroNight, Sitzwagenabteil - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("EIC".equals(ucType)) // Ekspres InterCity, Polen - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ICE".equals(ucType)) // InterCityExpress - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("IC".equals(ucType)) // InterCity - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ICT".equals(ucType)) // InterCity - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ICN".equals(ucType)) // InterCityNight - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ICD".equals(ucType)) // Intercity direkt Amsterdam-Breda - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("CNL".equals(ucType)) // CityNightLine - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("MT".equals(ucType)) // Schnee-Express - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("OEC".equals(ucType)) // ÖBB-EuroCity - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("OIC".equals(ucType)) // ÖBB-InterCity - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("RJ".equals(ucType)) // RailJet, Österreichische Bundesbahnen - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("WB".equals(ucType)) // westbahn - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("THA".equals(ucType)) // Thalys - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("TGV".equals(ucType)) // Train à Grande Vitesse - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("DNZ".equals(ucType)) // Nachtzug Basel-Moskau - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("AIR".equals(ucType)) // Generic Flight - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ECB".equals(ucType)) // EC, Verona-München - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("LYN".equals(ucType)) // Dänemark - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("NZ".equals(ucType)) // Schweden, Nacht - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("INZ".equals(ucType)) // Nacht - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("RHI".equals(ucType)) // ICE - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("RHT".equals(ucType)) // TGV - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("TGD".equals(ucType)) // TGV - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("IRX".equals(ucType)) // IC - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ES".equals(ucType)) // Eurostar Italia - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("EST".equals(ucType)) // Eurostar Frankreich - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("EM".equals(ucType)) // Euromed, Barcelona-Alicante, Spanien - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("A".equals(ucType)) // Spain, Highspeed - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("AVE".equals(ucType)) // Alta Velocidad Española, Spanien - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ARC".equals(ucType)) // Arco (Renfe), Spanien - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ALS".equals(ucType)) // Alaris (Renfe), Spanien - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ATR".equals(ucType)) // Altaria (Renfe), Spanien - return 'R'; + return Product.REGIONAL_TRAIN; if ("TAL".equals(ucType)) // Talgo, Spanien - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("TLG".equals(ucType)) // Spanien, Madrid - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("HOT".equals(ucType)) // Spanien, Nacht - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("X2".equals(ucType)) // X2000 Neigezug, Schweden - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("X".equals(ucType)) // InterConnex - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("FYR".equals(ucType)) // Fyra, Amsterdam-Schiphol-Rotterdam - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("FYRA".equals(ucType)) // Fyra, Amsterdam-Schiphol-Rotterdam - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("SC".equals(ucType)) // SuperCity, Tschechien - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("LE".equals(ucType)) // LEO Express, Prag - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("FLUG".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("TLK".equals(ucType)) // Tanie Linie Kolejowe, Polen - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("EIP".equals(ucType)) // Express Intercity Premium - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("INT".equals(ucType)) // Zürich-Brüssel - Budapest-Istanbul - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("HKX".equals(ucType)) // Hamburg-Koeln-Express - return 'I'; + return Product.HIGH_SPEED_TRAIN; // Regional if ("ZUG".equals(ucType)) // Generic Train - return 'R'; + return Product.REGIONAL_TRAIN; if ("R".equals(ucType)) // Generic Regional Train - return 'R'; + return Product.REGIONAL_TRAIN; if ("DPN".equals(ucType)) // Dritter Personen Nahverkehr - return 'R'; + return Product.REGIONAL_TRAIN; if ("RB".equals(ucType)) // RegionalBahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("RE".equals(ucType)) // RegionalExpress - return 'R'; + return Product.REGIONAL_TRAIN; if ("IR".equals(ucType)) // Interregio - return 'R'; + return Product.REGIONAL_TRAIN; if ("IRE".equals(ucType)) // Interregio Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("HEX".equals(ucType)) // Harz-Berlin-Express, Veolia - return 'R'; + return Product.REGIONAL_TRAIN; if ("WFB".equals(ucType)) // Westfalenbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("RT".equals(ucType)) // RegioTram - return 'R'; + return Product.REGIONAL_TRAIN; if ("REX".equals(ucType)) // RegionalExpress, Österreich - return 'R'; + return Product.REGIONAL_TRAIN; if ("OS".equals(ucType)) // Osobný vlak, Slovakia oder Osobní vlak, Czech Republic - return 'R'; + return Product.REGIONAL_TRAIN; if ("SP".equals(ucType)) // Spěšný vlak, Czech Republic - return 'R'; + return Product.REGIONAL_TRAIN; if ("EZ".equals(ucType)) // ÖBB ErlebnisBahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("ARZ".equals(ucType)) // Auto-Reisezug Brig - Iselle di Trasquera - return 'R'; + return Product.REGIONAL_TRAIN; if ("OE".equals(ucType)) // Ostdeutsche Eisenbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("MR".equals(ucType)) // Märkische Regionalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("PE".equals(ucType)) // Prignitzer Eisenbahn GmbH - return 'R'; + return Product.REGIONAL_TRAIN; if ("NE".equals(ucType)) // NEB Betriebsgesellschaft mbH - return 'R'; + return Product.REGIONAL_TRAIN; if ("MRB".equals(ucType)) // Mitteldeutsche Regiobahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("ERB".equals(ucType)) // eurobahn (Keolis Deutschland) - return 'R'; + return Product.REGIONAL_TRAIN; if ("HLB".equals(ucType)) // Hessische Landesbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("VIA".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("HSB".equals(ucType)) // Harzer Schmalspurbahnen - return 'R'; + return Product.REGIONAL_TRAIN; if ("OSB".equals(ucType)) // Ortenau-S-Bahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("VBG".equals(ucType)) // Vogtlandbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("AKN".equals(ucType)) // AKN Eisenbahn AG - return 'R'; + return Product.REGIONAL_TRAIN; if ("OLA".equals(ucType)) // Ostseeland Verkehr - return 'R'; + return Product.REGIONAL_TRAIN; if ("UBB".equals(ucType)) // Usedomer Bäderbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("PEG".equals(ucType)) // Prignitzer Eisenbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("NWB".equals(ucType)) // NordWestBahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("CAN".equals(ucType)) // cantus Verkehrsgesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("BRB".equals(ucType)) // ABELLIO Rail - return 'R'; + return Product.REGIONAL_TRAIN; if ("SBB".equals(ucType)) // Schweizerische Bundesbahnen - return 'R'; + return Product.REGIONAL_TRAIN; if ("VEC".equals(ucType)) // vectus Verkehrsgesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("TLX".equals(ucType)) // Trilex (Vogtlandbahn) - return 'R'; + return Product.REGIONAL_TRAIN; if ("TL".equals(ucType)) // Trilex (Vogtlandbahn) - return 'R'; + return Product.REGIONAL_TRAIN; if ("HZL".equals(ucType)) // Hohenzollerische Landesbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("ABR".equals(ucType)) // Bayerische Regiobahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("CB".equals(ucType)) // City Bahn Chemnitz - return 'R'; + return Product.REGIONAL_TRAIN; if ("WEG".equals(ucType)) // Württembergische Eisenbahn-Gesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("NEB".equals(ucType)) // Niederbarnimer Eisenbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("ME".equals(ucType)) // metronom Eisenbahngesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("MER".equals(ucType)) // metronom regional - return 'R'; + return Product.REGIONAL_TRAIN; if ("ALX".equals(ucType)) // Arriva-Länderbahn-Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("EB".equals(ucType)) // Erfurter Bahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("EBX".equals(ucType)) // Erfurter Bahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("VEN".equals(ucType)) // Rhenus Veniro - return 'R'; + return Product.REGIONAL_TRAIN; if ("BOB".equals(ucType)) // Bayerische Oberlandbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("SBS".equals(ucType)) // Städtebahn Sachsen - return 'R'; + return Product.REGIONAL_TRAIN; if ("SES".equals(ucType)) // Städtebahn Sachsen Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("EVB".equals(ucType)) // Eisenbahnen und Verkehrsbetriebe Elbe-Weser - return 'R'; + return Product.REGIONAL_TRAIN; if ("STB".equals(ucType)) // Süd-Thüringen-Bahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("AG".equals(ucType)) // Ingolstadt-Landshut - return 'R'; + return Product.REGIONAL_TRAIN; if ("PRE".equals(ucType)) // Pressnitztalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("DBG".equals(ucType)) // Döllnitzbahn GmbH - return 'R'; + return Product.REGIONAL_TRAIN; if ("SHB".equals(ucType)) // Schleswig-Holstein-Bahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("NOB".equals(ucType)) // Nord-Ostsee-Bahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("RTB".equals(ucType)) // Rurtalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("BLB".equals(ucType)) // Berchtesgadener Land Bahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("NBE".equals(ucType)) // Nordbahn Eisenbahngesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("SOE".equals(ucType)) // Sächsisch-Oberlausitzer Eisenbahngesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("SDG".equals(ucType)) // Sächsische Dampfeisenbahngesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("VE".equals(ucType)) // Lutherstadt Wittenberg - return 'R'; + return Product.REGIONAL_TRAIN; if ("DAB".equals(ucType)) // Daadetalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("WTB".equals(ucType)) // Wutachtalbahn e.V. - return 'R'; + return Product.REGIONAL_TRAIN; if ("BE".equals(ucType)) // Grensland-Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("ARR".equals(ucType)) // Ostfriesland - return 'R'; + return Product.REGIONAL_TRAIN; if ("HTB".equals(ucType)) // Hörseltalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("FEG".equals(ucType)) // Freiberger Eisenbahngesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("NEG".equals(ucType)) // Norddeutsche Eisenbahngesellschaft Niebüll - return 'R'; + return Product.REGIONAL_TRAIN; if ("RBG".equals(ucType)) // Regental Bahnbetriebs GmbH - return 'R'; + return Product.REGIONAL_TRAIN; if ("MBB".equals(ucType)) // Mecklenburgische Bäderbahn Molli - return 'R'; + return Product.REGIONAL_TRAIN; if ("VEB".equals(ucType)) // Vulkan-Eifel-Bahn Betriebsgesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("LEO".equals(ucType)) // Chiemgauer Lokalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("VX".equals(ucType)) // Vogtland Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("MSB".equals(ucType)) // Mainschleifenbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("P".equals(ucType)) // Kasbachtalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("ÖBA".equals(ucType)) // Öchsle-Bahn Betriebsgesellschaft - return 'R'; + return Product.REGIONAL_TRAIN; if ("KTB".equals(ucType)) // Kandertalbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("ERX".equals(ucType)) // erixx - return 'R'; + return Product.REGIONAL_TRAIN; if ("ATZ".equals(ucType)) // Autotunnelzug - return 'R'; + return Product.REGIONAL_TRAIN; if ("ATB".equals(ucType)) // Autoschleuse Tauernbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("CAT".equals(ucType)) // City Airport Train - return 'R'; + return Product.REGIONAL_TRAIN; if ("EXTRA".equals(ucType) || "EXT".equals(ucType)) // Extrazug - return 'R'; + return Product.REGIONAL_TRAIN; if ("KD".equals(ucType)) // Koleje Dolnośląskie (Niederschlesische Eisenbahn) - return 'R'; + return Product.REGIONAL_TRAIN; if ("KM".equals(ucType)) // Koleje Mazowieckie - return 'R'; + return Product.REGIONAL_TRAIN; if ("EX".equals(ucType)) // Polen - return 'R'; + return Product.REGIONAL_TRAIN; if ("PCC".equals(ucType)) // PCC Rail, Polen - return 'R'; + return Product.REGIONAL_TRAIN; if ("ZR".equals(ucType)) // ZSR (Slovakian Republic Railways) - return 'R'; + return Product.REGIONAL_TRAIN; if ("RNV".equals(ucType)) // Rhein-Neckar-Verkehr GmbH - return 'R'; + return Product.REGIONAL_TRAIN; if ("DWE".equals(ucType)) // Dessau-Wörlitzer Eisenbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("BKB".equals(ucType)) // Buckower Kleinbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("GEX".equals(ucType)) // Glacier Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("M".equals(ucType)) // Meridian - return 'R'; + return Product.REGIONAL_TRAIN; if ("WBA".equals(ucType)) // Waldbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("BEX".equals(ucType)) // Bernina Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("VAE".equals(ucType)) // Voralpen-Express - return 'R'; + return Product.REGIONAL_TRAIN; if ("OPB".equals(ucType)) // oberpfalzbahn - return 'R'; + return Product.REGIONAL_TRAIN; if ("OPX".equals(ucType)) // oberpfalz-express - return 'R'; + return Product.REGIONAL_TRAIN; if ("TER".equals(ucType)) // Transport express régional - return 'R'; + return Product.REGIONAL_TRAIN; // Suburban Trains if (P_LINE_SBAHN.matcher(ucType).matches()) // Generic (Night) S-Bahn - return 'S'; + return Product.SUBURBAN_TRAIN; if ("S-BAHN".equals(ucType)) - return 'S'; + return Product.SUBURBAN_TRAIN; if ("BSB".equals(ucType)) // Breisgau S-Bahn - return 'S'; + return Product.SUBURBAN_TRAIN; if ("SWE".equals(ucType)) // Südwestdeutsche Verkehrs-AG, Ortenau-S-Bahn - return 'S'; + return Product.SUBURBAN_TRAIN; if ("RER".equals(ucType)) // Réseau Express Régional, Frankreich - return 'S'; + return Product.SUBURBAN_TRAIN; if ("WKD".equals(ucType)) // Warszawska Kolej Dojazdowa (Warsaw Suburban Railway) - return 'S'; + return Product.SUBURBAN_TRAIN; if ("SKM".equals(ucType)) // Szybka Kolej Miejska Tricity - return 'S'; + return Product.SUBURBAN_TRAIN; if ("SKW".equals(ucType)) // Szybka Kolej Miejska Warschau - return 'S'; - // if ("SPR".equals(normalizedType)) // Sprinter, Niederlande - // return "S" + normalizedName; + return Product.SUBURBAN_TRAIN; // Subway if ("U".equals(ucType)) // Generic U-Bahn - return 'U'; + return Product.SUBWAY; if ("MET".equals(ucType)) - return 'U'; + return Product.SUBWAY; if ("METRO".equals(ucType)) - return 'U'; + return Product.SUBWAY; // Tram if (P_LINE_TRAM.matcher(ucType).matches()) // Generic Tram - return 'T'; + return Product.TRAM; if ("NFT".equals(ucType)) // Niederflur-Tram - return 'T'; + return Product.TRAM; if ("TRAM".equals(ucType)) - return 'T'; + return Product.TRAM; if ("TRA".equals(ucType)) - return 'T'; + return Product.TRAM; if ("WLB".equals(ucType)) // Wiener Lokalbahnen - return 'T'; + return Product.TRAM; if ("STRWLB".equals(ucType)) // Wiener Lokalbahnen - return 'T'; + return Product.TRAM; if ("SCHW-B".equals(ucType)) // Schwebebahn, gilt als "Straßenbahn besonderer Bauart" - return 'T'; + return Product.TRAM; // Bus if (P_LINE_BUS.matcher(ucType).matches()) // Generic Bus - return 'B'; + return Product.BUS; if ("NFB".equals(ucType)) // Niederflur-Bus - return 'B'; + return Product.BUS; if ("SEV".equals(ucType)) // Schienen-Ersatz-Verkehr - return 'B'; + return Product.BUS; if ("BUSSEV".equals(ucType)) // Schienen-Ersatz-Verkehr - return 'B'; + return Product.BUS; if ("BSV".equals(ucType)) // Bus SEV - return 'B'; + return Product.BUS; if ("FB".equals(ucType)) // Fernbus? Luxemburg-Saarbrücken - return 'B'; + return Product.BUS; if ("EXB".equals(ucType)) // Expressbus München-Prag? - return 'B'; + return Product.BUS; if ("ICB".equals(ucType)) // ÖBB ICBus - return 'B'; + return Product.BUS; if ("TRO".equals(ucType)) // Trolleybus - return 'B'; + return Product.BUS; if ("RFB".equals(ucType)) // Rufbus - return 'B'; + return Product.BUS; if ("RUF".equals(ucType)) // Rufbus - return 'B'; + return Product.BUS; if (P_LINE_TAXI.matcher(ucType).matches()) // Generic Taxi - return 'B'; + return Product.BUS; if ("RFT".equals(ucType)) // Ruftaxi - return 'B'; + return Product.BUS; if ("LT".equals(ucType)) // Linien-Taxi - return 'B'; + return Product.BUS; if ("NB".equals(ucType)) // Nachtbus Zürich - return 'B'; + return Product.BUS; // Phone if (ucType.startsWith("AST")) // Anruf-Sammel-Taxi - return 'P'; + return Product.ON_DEMAND; if (ucType.startsWith("ALT")) // Anruf-Linien-Taxi - return 'P'; + return Product.ON_DEMAND; if (ucType.startsWith("BUXI")) // Bus-Taxi (Schweiz) - return 'P'; + return Product.ON_DEMAND; if ("TB".equals(ucType)) // Taxi-Bus? - return 'P'; + return Product.ON_DEMAND; // Ferry if ("SCHIFF".equals(ucType)) - return 'F'; + return Product.FERRY; if ("FÄHRE".equals(ucType)) - return 'F'; + return Product.FERRY; if ("FÄH".equals(ucType)) - return 'F'; + return Product.FERRY; if ("FAE".equals(ucType)) - return 'F'; + return Product.FERRY; if ("SCH".equals(ucType)) // Schiff - return 'F'; + return Product.FERRY; if ("AS".equals(ucType)) // SyltShuttle, eigentlich Autoreisezug - return 'F'; + return Product.FERRY; if ("KAT".equals(ucType)) // Katamaran, e.g. Friedrichshafen - Konstanz - return 'F'; + return Product.FERRY; if ("BAT".equals(ucType)) // Boots Anlege Terminal? - return 'F'; + return Product.FERRY; if ("BAV".equals(ucType)) // Boots Anlege? - return 'F'; + return Product.FERRY; // Cable Car if ("SEILBAHN".equals(ucType)) - return 'C'; + return Product.CABLECAR; if ("SB".equals(ucType)) // Seilbahn - return 'C'; + return Product.CABLECAR; if ("ZAHNR".equals(ucType)) // Zahnradbahn, u.a. Zugspitzbahn - return 'C'; + return Product.CABLECAR; if ("GB".equals(ucType)) // Gondelbahn - return 'C'; + return Product.CABLECAR; if ("LB".equals(ucType)) // Luftseilbahn - return 'C'; + return Product.CABLECAR; if ("FUN".equals(ucType)) // Funiculaire (Standseilbahn) - return 'C'; + return Product.CABLECAR; if ("SL".equals(ucType)) // Sessel-Lift - return 'C'; + return Product.CABLECAR; - // if ("L".equals(normalizedType)) - // return "?" + normalizedName; - // if ("CR".equals(normalizedType)) - // return "?" + normalizedName; - // if ("TRN".equals(normalizedType)) - // return "?" + normalizedName; - - return 0; + throw new IllegalStateException("cannot normalize type '" + type + "'"); } private static final Pattern P_NORMALIZE_LINE_NAME_BUS = Pattern.compile("bus\\s+(.*)", Pattern.CASE_INSENSITIVE); @@ -3029,15 +3018,15 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider { final Matcher mBus = P_NORMALIZE_LINE_BUS.matcher(normalizedName); if (mBus.matches()) - return newLine('B', mBus.group(1), null); + return newLine(Product.BUS, mBus.group(1), null); final Matcher mTram = P_NORMALIZE_LINE_TRAM.matcher(normalizedName); if (mTram.matches()) - return newLine('T', mTram.group(1), null); + return newLine(Product.TRAM, mTram.group(1), null); } - final char normalizedType = normalizeType(type); - if (normalizedType == 0) + final Product normalizedType = normalizeType(type); + if (normalizedType == null) throw new IllegalStateException("cannot normalize type '" + type + "' line '" + normalizedName + "'"); final Line.Attr[] attrs; @@ -3076,29 +3065,29 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider if (type.length() == 0) { if (number.length() == 0) - return newLine('?', null, null); + return newLine(null, null, null); if (P_NORMALIZE_LINE_NUMBER.matcher(number).matches()) - return newLine('?', number, null); + return newLine(null, number, null); if (P_LINE_RUSSIA.matcher(number).matches()) - return newLine('R', number, null); + return newLine(Product.REGIONAL_TRAIN, number, null); } else { - final char normalizedType = normalizeType(type); - if (normalizedType != 0) + final Product normalizedType = normalizeType(type); + if (normalizedType != null) { - if (normalizedType == 'B') + if (normalizedType == Product.BUS) { final Matcher mBus = P_NORMALIZE_LINE_BUS.matcher(number); if (mBus.matches()) - return newLine('B', mBus.group(1), null); + return newLine(Product.BUS, mBus.group(1), null); } - if (normalizedType == 'T') + if (normalizedType == Product.TRAM) { final Matcher mTram = P_NORMALIZE_LINE_TRAM.matcher(number); if (mTram.matches()) - return newLine('T', mTram.group(1), null); + return newLine(Product.TRAM, mTram.group(1), null); } return newLine(normalizedType, number.replaceAll("\\s+", ""), null); @@ -3111,20 +3100,18 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider throw new IllegalStateException("cannot normalize line#type '" + lineAndType + "'"); } - protected Line newLine(final char product, final String normalizedName, final String comment, final Line.Attr... attrs) + protected Line newLine(final Product product, final String normalizedName, final String comment, final Line.Attr... attrs) { - final String lineStr = (product != 0 ? Character.toString(product) : Product.UNKNOWN) + (normalizedName != null ? normalizedName : "?"); - if (attrs.length == 0) { - return new Line(null, lineStr, lineStyle(null, lineStr), comment); + return new Line(null, product, normalizedName, lineStyle(null, product, normalizedName), comment); } else { final Set attrSet = new HashSet(); for (final Line.Attr attr : attrs) attrSet.add(attr); - return new Line(null, lineStr, lineStyle(null, lineStr), attrSet, comment); + return new Line(null, product, normalizedName, lineStyle(null, product, normalizedName), attrSet, comment); } } } diff --git a/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java b/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java index e18dcb4d..5f726434 100644 --- a/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractNavitiaProvider.java @@ -141,7 +141,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider return Style.deriveForegroundColor(bgColor); } - protected Style getLineStyle(final char product, final String code, final String color) + protected Style getLineStyle(final Product product, final String code, final String color) { return new Style(Shape.RECT, Style.parseColor(color), computeForegroundColor(color)); } @@ -393,15 +393,14 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider modeId = link.getString("id"); } - final char product = parseLineProductFromMode(modeId); + final Product product = parseLineProductFromMode(modeId); final JSONObject displayInfo = section.getJSONObject("display_informations"); final String code = displayInfo.getString("code"); - final String lineLabel = product + code; final String colorHex = displayInfo.getString("color"); final String color = colorHex.equals("000000") ? "#FFFFFF" : "#" + colorHex; final Style lineStyle = getLineStyle(product, code, color); - return new Line(lineId, lineLabel, lineStyle); + return new Line(lineId, product, code, lineStyle); } catch (final JSONException jsonExc) { @@ -582,12 +581,11 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider try { final String lineId = jsonLine.getString("id"); - final char product = parseLineProduct(jsonLine); + final Product product = parseLineProduct(jsonLine); final String code = jsonLine.getString("code"); - final String lineLabel = product + code; final String color = "#" + jsonLine.getString("color"); final Style lineStyle = getLineStyle(product, code, color); - return new Line(lineId, lineLabel, lineStyle); + return new Line(lineId, product, code, lineStyle); } catch (final JSONException jsonExc) { @@ -595,9 +593,9 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider } } - private Map lineProductCache = new WeakHashMap(); + private Map lineProductCache = new WeakHashMap(); - private char parseLineProductFromMode(final String modeId) + private Product parseLineProductFromMode(final String modeId) { final String modeType = modeId.replace("commercial_mode:", ""); final CommercialMode commercialMode = CommercialMode.valueOf(modeType.toUpperCase()); @@ -605,38 +603,38 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider switch (commercialMode) { case BUS: - return 'B'; + return Product.BUS; case RAPIDTRANSIT: case TRAIN: - return 'S'; + return Product.SUBURBAN_TRAIN; case TRAM: case TRAMWAY: - return 'T'; + return Product.TRAM; case METRO: - return 'U'; + return Product.SUBWAY; case FERRY: - return 'F'; + return Product.FERRY; case FUNICULAR: case CABLECAR: - return 'C'; + return Product.CABLECAR; case DEFAULT_COMMERCIAL_MODE: default: throw new IllegalArgumentException("Unhandled place type: " + modeId); } } - private char parseLineProduct(final JSONObject line) throws IOException + private Product parseLineProduct(final JSONObject line) throws IOException { try { final String lineId = line.getString("id"); - final Character cachedProduct = lineProductCache.get(lineId); + final Product cachedProduct = lineProductCache.get(lineId); if (cachedProduct != null) return cachedProduct; final JSONObject mode = line.getJSONObject("commercial_mode"); final String modeId = mode.getString("id"); - final char product = parseLineProductFromMode(modeId); + final Product product = parseLineProductFromMode(modeId); lineProductCache.put(lineId, product); diff --git a/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java b/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java index f3d3fa2e..dabda7d3 100644 --- a/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractNetworkProvider.java @@ -25,6 +25,8 @@ import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.google.common.base.Strings; + import de.schildbach.pte.dto.Point; import de.schildbach.pte.dto.Position; import de.schildbach.pte.dto.Product; @@ -80,27 +82,24 @@ public abstract class AbstractNetworkProvider implements NetworkProvider private static final char STYLES_SEP = '|'; - public Style lineStyle(final String network, final String line) + public Style lineStyle(final String network, final Product product, final String label) { - if (line == null || line.length() == 0) - return null; - - if (styles != null) + if (styles != null && product != null) { if (network != null) { // check for line match - final Style lineStyle = styles.get(network + STYLES_SEP + line); + final Style lineStyle = styles.get(network + STYLES_SEP + product.code + Strings.nullToEmpty(label)); if (lineStyle != null) return lineStyle; // check for product match - final Style productStyle = styles.get(network + STYLES_SEP + line.charAt(0)); + final Style productStyle = styles.get(network + STYLES_SEP + product.code); if (productStyle != null) return productStyle; // check for night bus, as that's a common special case - if (line.startsWith("BN")) + if (product == Product.BUS && label.startsWith("N")) { final Style nightStyle = styles.get(network + STYLES_SEP + "BN"); if (nightStyle != null) @@ -109,17 +108,18 @@ public abstract class AbstractNetworkProvider implements NetworkProvider } // check for line match - final Style lineStyle = styles.get(line); + final String string = product.code + Strings.nullToEmpty(label); + final Style lineStyle = styles.get(string); if (lineStyle != null) return lineStyle; // check for product match - final Style productStyle = styles.get(new Character(line.charAt(0)).toString()); + final Style productStyle = styles.get(Character.toString(product.code)); if (productStyle != null) return productStyle; // check for night bus, as that's a common special case - if (line.startsWith("BN")) + if (product == Product.BUS && label.startsWith("N")) { final Style nightStyle = styles.get("BN"); if (nightStyle != null) @@ -128,7 +128,7 @@ public abstract class AbstractNetworkProvider implements NetworkProvider } // standard colors - return Standard.STYLES.get(line.charAt(0)); + return Standard.STYLES.get(product); } public Point[] getArea() throws IOException diff --git a/enabler/src/de/schildbach/pte/AbstractTsiProvider.java b/enabler/src/de/schildbach/pte/AbstractTsiProvider.java index 39da44fb..78c89dd0 100644 --- a/enabler/src/de/schildbach/pte/AbstractTsiProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractTsiProvider.java @@ -129,34 +129,34 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider private static final ResultHeader HEADER = new ResultHeader("tsi"); - private static Map TRANSPORT_MODE_SHORTS = new HashMap(); + private static Map TRANSPORT_MODES = new HashMap(); static { // HIGH_SPEED_TRAIN - TRANSPORT_MODE_SHORTS.put("TGV", 'I'); - TRANSPORT_MODE_SHORTS.put("HST", 'I'); + TRANSPORT_MODES.put("TGV", Product.HIGH_SPEED_TRAIN); + TRANSPORT_MODES.put("HST", Product.HIGH_SPEED_TRAIN); // REGIONAL_TRAIN - TRANSPORT_MODE_SHORTS.put("TRAIN", 'R'); - TRANSPORT_MODE_SHORTS.put("TER", 'R'); + TRANSPORT_MODES.put("TRAIN", Product.REGIONAL_TRAIN); + TRANSPORT_MODES.put("TER", Product.REGIONAL_TRAIN); // SUBURBAN_TRAIN - TRANSPORT_MODE_SHORTS.put("LOCAL_TRAIN", 'S'); + TRANSPORT_MODES.put("LOCAL_TRAIN", Product.SUBURBAN_TRAIN); // SUBWAY - TRANSPORT_MODE_SHORTS.put("METRO", 'U'); + TRANSPORT_MODES.put("METRO", Product.SUBWAY); // TRAM - TRANSPORT_MODE_SHORTS.put("TRAM", 'T'); - TRANSPORT_MODE_SHORTS.put("TRAMWAY", 'T'); + TRANSPORT_MODES.put("TRAM", Product.TRAM); + TRANSPORT_MODES.put("TRAMWAY", Product.TRAM); // BUS - TRANSPORT_MODE_SHORTS.put("BUS", 'B'); - TRANSPORT_MODE_SHORTS.put("COACH", 'B'); + TRANSPORT_MODES.put("BUS", Product.BUS); + TRANSPORT_MODES.put("COACH", Product.BUS); // CABLECAR - TRANSPORT_MODE_SHORTS.put("TROLLEY", 'C'); - TRANSPORT_MODE_SHORTS.put("TROLLEY_BUS", 'C'); + TRANSPORT_MODES.put("TROLLEY", Product.CABLECAR); + TRANSPORT_MODES.put("TROLLEY_BUS", Product.CABLECAR); } protected static double latLonToDouble(final int value) @@ -242,18 +242,17 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider return uri; } - private String createLineLabel(final String mode, final String number, final String name, final String operatorCode, final String codeActivity) + private Line createLine(final String id, final String mode, final String number, final String name, final String operatorCode, + final String codeActivity) { - final Character modePrefix = TRANSPORT_MODE_SHORTS.get(mode); + final Product product = TRANSPORT_MODES.get(mode); - if (modePrefix == null) + if (product == null) throw new IllegalStateException("cannot normalize mode '" + mode + "' number '" + number + "'"); final StringBuilder label = new StringBuilder(); - label.append(modePrefix); - - if (number != null && number.length() > 0) + if (number != null) { label.append(number); } @@ -268,7 +267,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider label.append(name); } - return label.toString(); + return new Line(id, product, label.toString()); } private List identifyLocation(final Location location) throws IOException @@ -552,6 +551,9 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider network = null; final JSONObject lineInfo = ptrInfo.getJSONObject("Line"); + + final String id = lineInfo.getString("id"); + final String transportMode = ptrInfo.getString("TransportMode"); final String lineNumber = lineInfo.optString("Number"); @@ -566,9 +568,9 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider final String codeActivity = jsonOptString(ptrInfo, "CodeActivity"); - final String lineLabel = createLineLabel(transportMode, lineNumber, lineName, operatorCode, codeActivity); - - return new Line(lineInfo.getString("id"), lineLabel, lineStyle(network, lineLabel), null, null); + final Line line = createLine(id, transportMode, lineNumber, lineName, operatorCode, codeActivity); + final Line styledLine = new Line(line.id, line.product, line.label, lineStyle(network, line.product, line.label)); + return styledLine; } private Location parseJsonTransportLocation(final JSONObject data) throws JSONException diff --git a/enabler/src/de/schildbach/pte/AvvProvider.java b/enabler/src/de/schildbach/pte/AvvProvider.java index c627152a..c8225ca5 100644 --- a/enabler/src/de/schildbach/pte/AvvProvider.java +++ b/enabler/src/de/schildbach/pte/AvvProvider.java @@ -20,6 +20,8 @@ package de.schildbach.pte; import java.util.HashMap; import java.util.Map; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; /** @@ -44,16 +46,16 @@ public class AvvProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("Regionalbahn".equals(trainName) && symbol != null) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/BahnProvider.java b/enabler/src/de/schildbach/pte/BahnProvider.java index 630e544c..dac3358e 100644 --- a/enabler/src/de/schildbach/pte/BahnProvider.java +++ b/enabler/src/de/schildbach/pte/BahnProvider.java @@ -46,28 +46,28 @@ public final class BahnProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'F'; + return Product.FERRY; if (value == 128) - return 'U'; + return Product.SUBWAY; if (value == 256) - return 'T'; + return Product.TRAM; if (value == 512) - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } @@ -169,19 +169,15 @@ public final class BahnProvider extends AbstractHafasProvider } @Override - protected char normalizeType(String type) + protected Product normalizeType(String type) { final String ucType = type.toUpperCase(); - final char t = super.normalizeType(type); - if (t != 0) - return t; - if ("E".equals(ucType)) - return '?'; + return null; if ("N".equals(ucType)) - return '?'; + return null; - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/BayernProvider.java b/enabler/src/de/schildbach/pte/BayernProvider.java index 392dd634..091eadd2 100644 --- a/enabler/src/de/schildbach/pte/BayernProvider.java +++ b/enabler/src/de/schildbach/pte/BayernProvider.java @@ -24,6 +24,7 @@ import java.util.Set; import com.google.common.base.Charsets; +import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyLocationsResult; @@ -62,44 +63,44 @@ public class BayernProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("M".equals(trainType) && trainNum != null && trainName != null && trainName.endsWith("Meridian")) - return "RM" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "M" + trainNum); if ("ZUG".equals(trainType) && trainNum != null) - return "R" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, trainNum); } else if ("16".equals(mot)) { if ("EC".equals(trainType) && trainNum != null) - return "IEC" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "EC" + trainNum); if ("IC".equals(trainType) && trainNum != null) - return "IIC" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "IC" + trainNum); if ("ICE".equals(trainType) && trainNum != null) - return "IICE" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "ICE" + trainNum); if ("CNL".equals(trainType) && trainNum != null) - return "ICNL" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "CNL" + trainNum); if ("THA".equals(trainType) && trainNum != null) // Thalys - return "ITHA" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "THA" + trainNum); if ("TGV".equals(trainType) && trainNum != null) // Train a grande Vitesse - return "ITGV" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "TGV" + trainNum); if ("RJ".equals(trainType) && trainNum != null) // railjet - return "IRJ" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "RJ" + trainNum); if ("WB".equals(trainType) && trainNum != null) // WESTbahn - return "IWB" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "WB" + trainNum); if ("HKX".equals(trainType) && trainNum != null) // Hamburg-Köln-Express - return "IHKX" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "HKX" + trainNum); if ("D".equals(trainType) && trainNum != null) // Schnellzug - return "ID" + trainNum; + return new Line(id, Product.HIGH_SPEED_TRAIN, "D" + trainNum); if ("IR".equals(trainType) && trainNum != null) // InterRegio - return "RIR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "IR" + trainNum); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } @Override diff --git a/enabler/src/de/schildbach/pte/BvgProvider.java b/enabler/src/de/schildbach/pte/BvgProvider.java index 05434966..892257ef 100644 --- a/enabler/src/de/schildbach/pte/BvgProvider.java +++ b/enabler/src/de/schildbach/pte/BvgProvider.java @@ -55,24 +55,24 @@ public final class BvgProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 2) - return 'U'; + return Product.SUBWAY; if (value == 4) - return 'T'; + return Product.TRAM; if (value == 8) - return 'B'; + return Product.BUS; if (value == 16) - return 'F'; + return Product.FERRY; if (value == 32) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 64) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 128) - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } @@ -193,29 +193,29 @@ public final class BvgProvider extends AbstractHafasProvider protected Line parseLineAndType(final String lineAndType) { if ("X#".equals(lineAndType)) - return newLine('I', "X", null); // InterConnex + return newLine(Product.HIGH_SPEED_TRAIN, "X", null); // InterConnex else return super.parseLineAndType(lineAndType); } @Override - protected Line newLine(final char product, final String normalizedName, final String comment, final Attr... attrs) + protected Line newLine(final Product product, final String normalizedName, final String comment, final Attr... attrs) { - if (product == 'S' && "S41".equals(normalizedName)) + if (product == Product.SUBURBAN_TRAIN && "S41".equals(normalizedName)) return super.newLine(product, normalizedName, comment, concatAttrs(attrs, Attr.CIRCLE_CLOCKWISE)); - if (product == 'S' && "S42".equals(normalizedName)) + if (product == Product.SUBURBAN_TRAIN && "S42".equals(normalizedName)) return super.newLine(product, normalizedName, comment, concatAttrs(attrs, Attr.CIRCLE_ANTICLOCKWISE)); - if (product == 'B' && "S41".equals(normalizedName)) + if (product == Product.BUS && "S41".equals(normalizedName)) return super.newLine(product, normalizedName, comment, concatAttrs(attrs, Attr.SERVICE_REPLACEMENT, Attr.CIRCLE_CLOCKWISE)); - if (product == 'B' && "S42".equals(normalizedName)) + if (product == Product.BUS && "S42".equals(normalizedName)) return super.newLine(product, normalizedName, comment, concatAttrs(attrs, Attr.SERVICE_REPLACEMENT, Attr.CIRCLE_ANTICLOCKWISE)); - if (product == 'B' && "TXL".equals(normalizedName)) + if (product == Product.BUS && "TXL".equals(normalizedName)) return super.newLine(product, normalizedName, comment, concatAttrs(attrs, Attr.LINE_AIRPORT)); - if (product == 'S' && "S9".equals(normalizedName)) + if (product == Product.SUBURBAN_TRAIN && "S9".equals(normalizedName)) return super.newLine(product, normalizedName, comment, concatAttrs(attrs, Attr.LINE_AIRPORT)); - if (product == 'S' && "S45".equals(normalizedName)) + if (product == Product.SUBURBAN_TRAIN && "S45".equals(normalizedName)) return super.newLine(product, normalizedName, comment, concatAttrs(attrs, Attr.LINE_AIRPORT)); return super.newLine(product, normalizedName, comment, attrs); diff --git a/enabler/src/de/schildbach/pte/DsbProvider.java b/enabler/src/de/schildbach/pte/DsbProvider.java index 40f3f53c..deb9b89f 100644 --- a/enabler/src/de/schildbach/pte/DsbProvider.java +++ b/enabler/src/de/schildbach/pte/DsbProvider.java @@ -46,30 +46,30 @@ public class DsbProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'B'; + return Product.BUS; if (value == 128) - return 'B'; + return Product.BUS; if (value == 256) - return 'B'; + return Product.BUS; if (value == 512) - return 'F'; + return Product.FERRY; if (value == 1024) - return 'U'; + return Product.SUBWAY; throw new IllegalArgumentException("cannot handle: " + value); } @@ -138,52 +138,48 @@ public class DsbProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("ICL".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("IB".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("SJ".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("ØR".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("RA".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("RX".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("PP".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("S-TOG".equals(ucType)) - return 'S'; + return Product.SUBURBAN_TRAIN; if ("BYBUS".equals(ucType)) - return 'B'; + return Product.BUS; if ("X-BUS".equals(ucType) || "X BUS".equals(ucType)) - return 'B'; + return Product.BUS; if ("HV-BUS".equals(ucType)) // Havnebus - return 'B'; + return Product.BUS; if ("T-BUS".equals(ucType)) // Togbus - return 'B'; + return Product.BUS; if ("TOGBUS".equals(ucType)) - return 'B'; + return Product.BUS; if ("TELEBUS".equals(ucType)) - return 'P'; + return Product.ON_DEMAND; if ("TELETAXI".equals(ucType)) - return 'P'; + return Product.ON_DEMAND; if ("FÆRGE".equals(ucType)) - return 'F'; + return Product.FERRY; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/EireannProvider.java b/enabler/src/de/schildbach/pte/EireannProvider.java index b48654fd..d1b2734f 100644 --- a/enabler/src/de/schildbach/pte/EireannProvider.java +++ b/enabler/src/de/schildbach/pte/EireannProvider.java @@ -108,21 +108,21 @@ public class EireannProvider extends AbstractHafasProvider { final Matcher mLine = P_NORMALIZE_LINE.matcher(lineAndType); if (mLine.matches()) - return newLine('B', mLine.group(1), null); + return newLine(Product.BUS, mLine.group(1), null); return super.parseLineAndType(lineAndType); } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("COA".equals(ucType)) - return 'B'; + return Product.BUS; if ("CIT".equals(ucType)) - return 'B'; + return Product.BUS; - return 0; + return null; } } diff --git a/enabler/src/de/schildbach/pte/InvgProvider.java b/enabler/src/de/schildbach/pte/InvgProvider.java index 44d9ae76..2a39122e 100644 --- a/enabler/src/de/schildbach/pte/InvgProvider.java +++ b/enabler/src/de/schildbach/pte/InvgProvider.java @@ -330,29 +330,29 @@ public class InvgProvider extends AbstractHafasProvider final Matcher mBus = P_NORMALIZE_LINE_BUS.matcher(line); if (mBus.matches()) { - final String lineStr = "B" + mBus.group(1); - return new Line(null, lineStr, lineStyle(null, lineStr)); + final String label = mBus.group(1); + return new Line(null, Product.BUS, label, lineStyle(null, Product.BUS, label)); } final Matcher mNachtbus = P_NORMALIZE_LINE_NACHTBUS.matcher(line); if (mNachtbus.matches()) { - final String lineStr = "BN" + mNachtbus.group(1); - return new Line(null, lineStr, lineStyle(null, lineStr)); + final String label = "N" + mNachtbus.group(1); + return new Line(null, Product.BUS, label, lineStyle(null, Product.BUS, label)); } final Matcher mBusS = P_NORMALIZE_LINE_BUS_S.matcher(line); if (mBusS.matches()) { - final String lineStr = "BS" + mBusS.group(1); - return new Line(null, lineStr, lineStyle(null, lineStr)); + final String label = "S" + mBusS.group(1); + return new Line(null, Product.BUS, label, lineStyle(null, Product.BUS, label)); } final Matcher mBusX = P_NORMALIZE_LINE_BUS_X.matcher(line); if (mBusX.matches()) { - final String lineStr = "BX" + mBusX.group(1); - return new Line(null, lineStr, lineStyle(null, lineStr)); + final String label = "X" + mBusX.group(1); + return new Line(null, Product.BUS, label, lineStyle(null, Product.BUS, label)); } } @@ -360,12 +360,12 @@ public class InvgProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { if ("1".equals(type)) - return 'B'; + return Product.BUS; - return 0; + return null; } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/JetProvider.java b/enabler/src/de/schildbach/pte/JetProvider.java index 8fd7a61a..aa0b615c 100644 --- a/enabler/src/de/schildbach/pte/JetProvider.java +++ b/enabler/src/de/schildbach/pte/JetProvider.java @@ -51,12 +51,12 @@ public class JetProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 4) - return 'T'; + return Product.TRAM; if (value == 8) - return 'B'; + return Product.BUS; throw new IllegalArgumentException("cannot handle: " + value); } @@ -138,14 +138,14 @@ public class JetProvider extends AbstractHafasProvider protected Line parseLineAndType(final String lineAndType) { if ("רק1#".equals(lineAndType)) - return newLine('T', "רק1", null); + return newLine(Product.TRAM, "רק1", null); if ("א 11#".equals(lineAndType) || "11א#".equals(lineAndType)) - return newLine('B', "א11", null); + return newLine(Product.BUS, "א11", null); final Matcher mBus = P_NORMALIZE_BUS.matcher(lineAndType); if (mBus.matches()) - return newLine('B', mBus.group(1), null); + return newLine(Product.BUS, mBus.group(1), null); throw new IllegalStateException("cannot normalize line#type '" + lineAndType + "'"); } diff --git a/enabler/src/de/schildbach/pte/KvvProvider.java b/enabler/src/de/schildbach/pte/KvvProvider.java index bbe645ef..5c2dd4c8 100644 --- a/enabler/src/de/schildbach/pte/KvvProvider.java +++ b/enabler/src/de/schildbach/pte/KvvProvider.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Style; import de.schildbach.pte.dto.Style.Shape; @@ -54,17 +55,17 @@ public class KvvProvider extends AbstractEfaProvider private static final Pattern P_LINE = Pattern.compile("(.*?)\\s+\\([\\w/]+\\)", Pattern.CASE_INSENSITIVE); @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if (name != null) { final Matcher m = P_LINE.matcher(name); if (m.matches()) - return super.parseLine(mot, symbol, m.group(1), longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, m.group(1), longName, trainType, trainNum, trainName); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); // TODO check for " (Ersatzverkehr)" } diff --git a/enabler/src/de/schildbach/pte/LuProvider.java b/enabler/src/de/schildbach/pte/LuProvider.java index 2297873e..7b28e1ee 100644 --- a/enabler/src/de/schildbach/pte/LuProvider.java +++ b/enabler/src/de/schildbach/pte/LuProvider.java @@ -42,26 +42,26 @@ public class LuProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'B'; + return Product.BUS; if (value == 128) - return 'B'; + return Product.BUS; if (value == 256) - return 'B'; + return Product.BUS; throw new IllegalArgumentException("cannot handle: " + value); } @@ -132,26 +132,22 @@ public class LuProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("CRE".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("CITYBUS".equals(ucType)) - return 'B'; + return Product.BUS; if ("NIGHTBUS".equals(ucType)) - return 'B'; + return Product.BUS; if ("DIFFBUS".equals(ucType)) - return 'B'; + return Product.BUS; if ("NAVETTE".equals(ucType)) - return 'B'; + return Product.BUS; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/MetProvider.java b/enabler/src/de/schildbach/pte/MetProvider.java index e424856d..30522778 100644 --- a/enabler/src/de/schildbach/pte/MetProvider.java +++ b/enabler/src/de/schildbach/pte/MetProvider.java @@ -22,6 +22,8 @@ import java.util.Map; import com.google.common.base.Strings; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; /** @@ -51,27 +53,27 @@ public class MetProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("Regional Train :".equals(longName)) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("Regional Train".equals(trainName)) - return "R"; + return new Line(id, Product.REGIONAL_TRAIN, null); if ("vPK".equals(symbol) && "Regional Train Pakenham".equals(longName)) - return "RV/Line"; + return new Line(id, Product.REGIONAL_TRAIN, "V/Line"); } else if ("1".equals(mot)) { if (trainType == null && trainNum != null) - return 'S' + trainNum; + return new Line(id, Product.SUBURBAN_TRAIN, trainNum); if ("Metropolitan Train".equals(trainName) && trainNum == null) - return 'S' + Strings.nullToEmpty(name); + return new Line(id, Product.SUBURBAN_TRAIN, Strings.nullToEmpty(name)); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/MvvProvider.java b/enabler/src/de/schildbach/pte/MvvProvider.java index ba8fba39..f8a2362f 100644 --- a/enabler/src/de/schildbach/pte/MvvProvider.java +++ b/enabler/src/de/schildbach/pte/MvvProvider.java @@ -22,8 +22,10 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Point; import de.schildbach.pte.dto.Position; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; /** @@ -54,26 +56,26 @@ public class MvvProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("Mittelrheinbahn (trans regio)".equals(trainName)) - return "RMiRhBa"; + return new Line(id, Product.REGIONAL_TRAIN, "MiRhBa"); if ("Süd-Thüringen-Bahn".equals(longName)) - return "RSTB"; + return new Line(id, Product.REGIONAL_TRAIN, "STB"); if ("agilis".equals(longName)) - return "Ragilis"; + return new Line(id, Product.REGIONAL_TRAIN, "agilis"); if ("SBB".equals(trainName)) - return "RSBB"; + return new Line(id, Product.REGIONAL_TRAIN, "SBB"); if ("A".equals(trainNum)) - return "SA"; + return new Line(id, Product.SUBURBAN_TRAIN, "A"); if ("DB AG".equals(trainName)) - return '?' + symbol; + return new Line(id, null, symbol); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } private static final Pattern P_POSITION = Pattern.compile("(Fern|Regio|S-Bahn|U-Bahn|U\\d(?:/U\\d)*)\\s+(.*)"); diff --git a/enabler/src/de/schildbach/pte/NasaProvider.java b/enabler/src/de/schildbach/pte/NasaProvider.java index 1186fc57..cbb77848 100644 --- a/enabler/src/de/schildbach/pte/NasaProvider.java +++ b/enabler/src/de/schildbach/pte/NasaProvider.java @@ -50,24 +50,24 @@ public class NasaProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'T'; + return Product.TRAM; if (value == 64) - return 'B'; + return Product.BUS; if (value == 128) // Rufbus - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } @@ -167,44 +167,40 @@ public class NasaProvider extends AbstractHafasProvider } @Override - protected char normalizeType(String type) + protected Product normalizeType(String type) { final String ucType = type.toUpperCase(); if ("ECW".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("IXB".equals(ucType)) // ICE International - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("RRT".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("DPF".equals(ucType)) // mit Dampflok bespannter Zug - return 'R'; + return Product.REGIONAL_TRAIN; if ("DAM".equals(ucType)) // Harzer Schmalspurbahnen: mit Dampflok bespannter Zug - return 'R'; + return Product.REGIONAL_TRAIN; if ("TW".equals(ucType)) // Harzer Schmalspurbahnen: Triebwagen - return 'R'; + return Product.REGIONAL_TRAIN; if ("RR".equals(ucType)) // Polen - return 'R'; + return Product.REGIONAL_TRAIN; if ("BAHN".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("ZUGBAHN".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("DAMPFZUG".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("E".equals(ucType)) // Stadtbahn Karlsruhe: S4/S31/xxxxx - return 'S'; + return Product.SUBURBAN_TRAIN; if ("RUFBUS".equals(ucType)) // Rufbus - return 'B'; + return Product.BUS; if ("RBS".equals(ucType)) // Rufbus - return 'B'; + return Product.BUS; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/NetworkProvider.java b/enabler/src/de/schildbach/pte/NetworkProvider.java index 509bd798..fac9be31 100644 --- a/enabler/src/de/schildbach/pte/NetworkProvider.java +++ b/enabler/src/de/schildbach/pte/NetworkProvider.java @@ -164,11 +164,13 @@ public interface NetworkProvider * * @param network * network to disambiguate line - * @param line - * line to get style of + * @param product + * line product to get style of + * @param label + * line label to get style of, or null * @return object containing background, foreground and optional border colors */ - Style lineStyle(String network, String line); + Style lineStyle(String network, Product product, String label); /** * Gets the primary covered area of the network diff --git a/enabler/src/de/schildbach/pte/NriProvider.java b/enabler/src/de/schildbach/pte/NriProvider.java index 968180d9..330c93e5 100644 --- a/enabler/src/de/schildbach/pte/NriProvider.java +++ b/enabler/src/de/schildbach/pte/NriProvider.java @@ -49,24 +49,24 @@ public class NriProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) // Air - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 4) - return 'B'; + return Product.BUS; if (value == 8) - return 'T'; + return Product.TRAM; if (value == 16) - return 'U'; + return Product.SUBWAY; if (value == 32) - return 'F'; + return Product.FERRY; if (value == 64) - return 'F'; + return Product.FERRY; if (value == 128) - return 'F'; + return Product.FERRY; throw new IllegalArgumentException("cannot handle: " + value); } @@ -143,44 +143,44 @@ public class NriProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("AIR".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("TRA".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("TRAIN".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("HEL".equals(ucType)) // Heli - return 'R'; + return Product.REGIONAL_TRAIN; if ("U".equals(ucType)) - return 'U'; + return Product.SUBWAY; if ("TRAM".equals(ucType)) - return 'T'; + return Product.TRAM; if ("MTR".equals(ucType)) - return 'T'; + return Product.TRAM; if (ucType.startsWith("BUS")) - return 'B'; + return Product.BUS; if ("EXP".equals(ucType)) - return 'F'; + return Product.FERRY; if ("EXP.BOAT".equals(ucType)) - return 'F'; + return Product.FERRY; if ("FERRY".equals(ucType)) - return 'F'; + return Product.FERRY; if ("FER".equals(ucType)) - return 'F'; + return Product.FERRY; if ("SHIP".equals(ucType)) - return 'F'; + return Product.FERRY; if ("SHI".equals(ucType)) - return 'F'; + return Product.FERRY; - return 0; + return null; } } diff --git a/enabler/src/de/schildbach/pte/NsProvider.java b/enabler/src/de/schildbach/pte/NsProvider.java index f9977737..863f792b 100644 --- a/enabler/src/de/schildbach/pte/NsProvider.java +++ b/enabler/src/de/schildbach/pte/NsProvider.java @@ -51,28 +51,28 @@ public class NsProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'F'; + return Product.FERRY; if (value == 128) - return 'U'; + return Product.SUBWAY; if (value == 256) - return 'T'; + return Product.TRAM; if (value == 512) - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } @@ -150,21 +150,17 @@ public class NsProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if (ucType.equals("SPR")) - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("E")) // Budapest, Ungarn - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("N")) // Avignon - return 'R'; + return Product.REGIONAL_TRAIN; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/NvbwProvider.java b/enabler/src/de/schildbach/pte/NvbwProvider.java index f05240e1..2de70cad 100644 --- a/enabler/src/de/schildbach/pte/NvbwProvider.java +++ b/enabler/src/de/schildbach/pte/NvbwProvider.java @@ -23,6 +23,7 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.QueryTripsContext; @@ -57,37 +58,37 @@ public class NvbwProvider extends AbstractEfaProvider private static final Pattern P_LINE_S_AVG_VBK = Pattern.compile("(S\\d+) \\((?:AVG|VBK)\\)"); @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if (("ICE".equals(trainName) || "InterCityExpress".equals(trainName)) && trainNum == null) - return "IICE"; + return new Line(id, Product.HIGH_SPEED_TRAIN, "ICE"); if ("InterCity".equals(trainName) && trainNum == null) - return "IIC"; + return new Line(id, Product.HIGH_SPEED_TRAIN, "IC"); if ("Fernreisezug externer EU".equals(trainName) && trainNum == null) - return "I"; + return new Line(id, Product.HIGH_SPEED_TRAIN, null); if ("SuperCity".equals(trainName) && trainNum == null) - return "ISC"; + return new Line(id, Product.HIGH_SPEED_TRAIN, "SC"); if ("InterRegio".equals(longName) && symbol == null) - return "RIR"; + return new Line(id, Product.REGIONAL_TRAIN, "IR"); if ("REGIOBAHN".equals(trainName) && trainNum == null) - return "R"; + return new Line(id, Product.REGIONAL_TRAIN, null); if ("RR".equals(trainType) && trainNum == null) - return "RRR"; + return new Line(id, Product.REGIONAL_TRAIN, "RR"); if ("Meridian".equals(trainName) && symbol != null) - return "R" + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("CityBahn".equals(trainName) && trainNum == null) - return "RCB"; + return new Line(id, Product.REGIONAL_TRAIN, "CB"); if ("Trilex".equals(trainName) && trainNum == null) - return "RTLX"; + return new Line(id, Product.REGIONAL_TRAIN, "TLX"); if ("Bay. Seenschifffahrt".equals(trainName) && symbol != null) - return "F" + symbol; + return new Line(id, Product.FERRY, symbol); if ("Nahverkehrszug von Dritten".equals(trainName) && trainNum == null) - return "?Zug"; + return new Line(id, null, "Zug"); if ("DB".equals(trainName) && trainNum == null) - return "?DB"; + return new Line(id, null, "DB"); } else if ("1".equals(mot)) { @@ -95,11 +96,11 @@ public class NvbwProvider extends AbstractEfaProvider { final Matcher m = P_LINE_S_AVG_VBK.matcher(symbol); if (m.matches()) - return "S" + m.group(1); + return new Line(id, Product.SUBURBAN_TRAIN, m.group(1)); } } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } @Override diff --git a/enabler/src/de/schildbach/pte/NvvProvider.java b/enabler/src/de/schildbach/pte/NvvProvider.java index 95548e11..e1cb0cdb 100644 --- a/enabler/src/de/schildbach/pte/NvvProvider.java +++ b/enabler/src/de/schildbach/pte/NvvProvider.java @@ -96,32 +96,32 @@ public class NvvProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 16) - return 'U'; + return Product.SUBWAY; if (value == 32) - return 'T'; + return Product.TRAM; if (value == 64) - return 'B'; + return Product.BUS; if (value == 128) - return 'B'; + return Product.BUS; if (value == 256) - return 'F'; + return Product.FERRY; if (value == 512) - return 'P'; + return Product.ON_DEMAND; if (value == 1024) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 2048) - return 'R'; + return Product.REGIONAL_TRAIN; throw new IllegalArgumentException("cannot handle: " + value); } @@ -195,23 +195,19 @@ public class NvvProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("U-BAHN".equals(ucType)) - return 'U'; + return Product.SUBWAY; if ("AT".equals(ucType)) // Anschluß Sammel Taxi, Anmeldung nicht erforderlich - return 'B'; + return Product.BUS; if ("MOFA".equals(ucType)) // Mobilfalt-Fahrt - return 'P'; + return Product.ON_DEMAND; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/OebbProvider.java b/enabler/src/de/schildbach/pte/OebbProvider.java index 44bd27ff..f15cb20d 100644 --- a/enabler/src/de/schildbach/pte/OebbProvider.java +++ b/enabler/src/de/schildbach/pte/OebbProvider.java @@ -51,34 +51,34 @@ public class OebbProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 32) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 64) - return 'B'; + return Product.BUS; if (value == 128) - return 'F'; + return Product.FERRY; if (value == 256) - return 'U'; + return Product.SUBWAY; if (value == 512) - return 'T'; + return Product.TRAM; if (value == 1024) // Autoreisezug - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2048) - return 'P'; + return Product.ON_DEMAND; if (value == 4096) - return 'I'; + return Product.HIGH_SPEED_TRAIN; throw new IllegalArgumentException("cannot handle: " + value); } @@ -194,76 +194,72 @@ public class OebbProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if (ucType.equals("RR")) // Finnland, Connections only? - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (ucType.equals("EE")) // Rumänien, Connections only? - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (ucType.equals("OZ")) // Schweden, Oeresundzug, Connections only? - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (ucType.equals("UUU")) // Italien, Nacht, Connections only? - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (ucType.equals("S2")) // Helsinki-Turku, Connections only? - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("RE")) // RegionalExpress Deutschland - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("DPN")) // Connections only? TODO nicht evtl. doch eher ne S-Bahn? - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("E")) // Budapest, Ungarn - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("IP")) // Ozd, Ungarn - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("N")) // Frankreich, Tours - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("DPF")) // VX=Vogtland Express, Connections only? - return 'R'; + return Product.REGIONAL_TRAIN; if ("UAU".equals(ucType)) // Rußland - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("RSB")) // Schnellbahn Wien - return 'S'; + return Product.SUBURBAN_TRAIN; if (ucType.equals("LKB")) // Connections only? - return 'T'; + return Product.TRAM; if (ucType.equals("OBU")) // Connections only? - return 'B'; + return Product.BUS; if (ucType.equals("O-BUS")) // Stadtbus - return 'B'; + return Product.BUS; if (ucType.equals("O")) // Stadtbus - return 'B'; + return Product.BUS; if (ucType.equals("SCH")) // Connections only? - return 'F'; + return Product.FERRY; if (ucType.equals("F")) // Fähre - return 'F'; + return Product.FERRY; if (ucType.equals("LIF")) - return 'C'; + return Product.CABLECAR; if (ucType.equals("LIFT")) // Graz Uhrturm - return 'C'; + return Product.CABLECAR; if (ucType.equals("SSB")) // Graz Schlossbergbahn - return 'C'; - - final char t = super.normalizeType(type); - if (t != 0) - return t; + return Product.CABLECAR; if (ucType.equals("U70")) // U.K., Connections only? - return '?'; + return null; if (ucType.equals("X70")) // U.K., Connections only? - return '?'; + return null; if (ucType.equals("R84")) // U.K., Connections only? - return '?'; + return null; if (ucType.equals("S84")) // U.K., Connections only? - return '?'; + return null; if (ucType.equals("T84")) // U.K., Connections only? - return '?'; + return null; - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/ParisProvider.java b/enabler/src/de/schildbach/pte/ParisProvider.java index a1b84304..c806a364 100644 --- a/enabler/src/de/schildbach/pte/ParisProvider.java +++ b/enabler/src/de/schildbach/pte/ParisProvider.java @@ -17,6 +17,7 @@ package de.schildbach.pte; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; import de.schildbach.pte.dto.Style.Shape; @@ -47,11 +48,11 @@ public class ParisProvider extends AbstractNavitiaProvider } @Override - protected Style getLineStyle(final char product, final String code, final String color) + protected Style getLineStyle(final Product product, final String code, final String color) { switch (product) { - case 'S': + case SUBURBAN_TRAIN: { // RER if (code.compareTo("F") < 0) @@ -64,17 +65,17 @@ public class ParisProvider extends AbstractNavitiaProvider return new Style(Shape.ROUNDED, Style.TRANSPARENT, Style.parseColor(color), Style.parseColor(color)); } } - case 'U': + case SUBWAY: { // Metro return new Style(Shape.CIRCLE, Style.parseColor(color), computeForegroundColor(color)); } - case 'T': + case TRAM: { // Tram return new Style(Shape.RECT, Style.parseColor(color), computeForegroundColor(color)); } - case 'B': + case BUS: { // Bus + Noctilien return new Style(Shape.RECT, Style.parseColor(color), computeForegroundColor(color)); diff --git a/enabler/src/de/schildbach/pte/PlProvider.java b/enabler/src/de/schildbach/pte/PlProvider.java index 565c11eb..b23be318 100644 --- a/enabler/src/de/schildbach/pte/PlProvider.java +++ b/enabler/src/de/schildbach/pte/PlProvider.java @@ -43,22 +43,22 @@ public class PlProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 16) // Bus - return 'B'; + return Product.BUS; if (value == 32) // AST, SEV - return 'B'; + return Product.BUS; if (value == 64) - return 'F'; + return Product.FERRY; throw new IllegalArgumentException("cannot handle: " + value); } @@ -134,37 +134,33 @@ public class PlProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("AR".equals(ucType)) // Arriva Polaczen - return 'R'; + return Product.REGIONAL_TRAIN; if ("N".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("KW".equals(ucType)) // Koleje Wielkopolskie - return 'R'; + return Product.REGIONAL_TRAIN; if ("KS".equals(ucType)) // Koleje Śląskie - return 'R'; + return Product.REGIONAL_TRAIN; if ("E".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("DB".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("REG".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("IRB".equals(ucType)) // interREGIO Bus - return 'B'; + return Product.BUS; if ("ZKA".equals(ucType)) // Zastępcza Komunikacja Autobusowa (Schienenersatzverkehr) - return 'B'; + return Product.BUS; if ("FRE".equals(ucType)) - return 'F'; + return Product.FERRY; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/RsagProvider.java b/enabler/src/de/schildbach/pte/RsagProvider.java index 7283ae10..ccdc5a5c 100644 --- a/enabler/src/de/schildbach/pte/RsagProvider.java +++ b/enabler/src/de/schildbach/pte/RsagProvider.java @@ -49,28 +49,28 @@ public class RsagProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'F'; + return Product.FERRY; if (value == 128) - return 'U'; + return Product.SUBWAY; if (value == 256) - return 'T'; + return Product.TRAM; if (value == 512) - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } diff --git a/enabler/src/de/schildbach/pte/RtProvider.java b/enabler/src/de/schildbach/pte/RtProvider.java index 7406074b..f4fe9a8d 100644 --- a/enabler/src/de/schildbach/pte/RtProvider.java +++ b/enabler/src/de/schildbach/pte/RtProvider.java @@ -97,26 +97,22 @@ public class RtProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("E".equals(ucType)) // Romania, Croatia - return 'R'; + return Product.REGIONAL_TRAIN; if ("N".equals(ucType)) // Frankreich, Tours - return 'R'; - - final char t = super.normalizeType(type); - if (t != 0) - return t; + return Product.REGIONAL_TRAIN; if (ucType.equals("U70")) - return '?'; + return null; if (ucType.equals("X70")) - return '?'; + return null; if (ucType.equals("T84")) - return '?'; + return null; - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/SbbProvider.java b/enabler/src/de/schildbach/pte/SbbProvider.java index ebe524c0..130eb84a 100644 --- a/enabler/src/de/schildbach/pte/SbbProvider.java +++ b/enabler/src/de/schildbach/pte/SbbProvider.java @@ -43,28 +43,28 @@ public class SbbProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'F'; + return Product.FERRY; if (value == 32) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 64) - return 'B'; + return Product.BUS; if (value == 128) - return 'C'; + return Product.CABLECAR; if (value == 256) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 512) - return 'T'; + return Product.TRAM; throw new IllegalArgumentException("cannot handle: " + value); } @@ -146,29 +146,25 @@ public class SbbProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("IN".equals(ucType)) // Italien Roma-Lecce - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("E".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("T".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("TX".equals(ucType)) - return 'B'; + return Product.BUS; if ("NFO".equals(ucType)) - return 'B'; + return Product.BUS; if ("KB".equals(ucType)) // Kleinbus? - return 'B'; + return Product.BUS; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/SeProvider.java b/enabler/src/de/schildbach/pte/SeProvider.java index c3abc747..b3d98c33 100644 --- a/enabler/src/de/schildbach/pte/SeProvider.java +++ b/enabler/src/de/schildbach/pte/SeProvider.java @@ -53,30 +53,30 @@ public class SeProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) // Flyg - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) // X2000 - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) // Expressbus - return 'B'; + return Product.BUS; if (value == 16) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 32) // Tunnelbana - return 'U'; + return Product.SUBWAY; if (value == 64) // Spårvagn - return 'T'; + return Product.TRAM; if (value == 128) - return 'B'; + return Product.BUS; if (value == 256) - return 'F'; + return Product.FERRY; if (value == 512) // Länstaxi - return 'F'; + return Product.FERRY; if (value == 1024) // Future - return 'R'; + return Product.REGIONAL_TRAIN; throw new IllegalArgumentException("cannot handle: " + value); } @@ -162,12 +162,12 @@ public class SeProvider extends AbstractHafasProvider { final Matcher mBus = P_NORMALIZE_LINE_BUS.matcher(line); if (mBus.matches()) - return newLine('B', mBus.group(1), null); + return newLine(Product.BUS, mBus.group(1), null); final Matcher mSubway = P_NORMALIZE_LINE_SUBWAY.matcher(line); if (mSubway.matches()) - return newLine('U', "T" + mSubway.group(1), null); + return newLine(Product.SUBWAY, "T" + mSubway.group(1), null); - return newLine('?', line, null); + return newLine(null, line, null); } } diff --git a/enabler/src/de/schildbach/pte/SeptaProvider.java b/enabler/src/de/schildbach/pte/SeptaProvider.java index 1ea54f61..0b609832 100644 --- a/enabler/src/de/schildbach/pte/SeptaProvider.java +++ b/enabler/src/de/schildbach/pte/SeptaProvider.java @@ -305,7 +305,7 @@ public class SeptaProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); @@ -313,39 +313,39 @@ public class SeptaProvider extends AbstractHafasProvider // Regional if (ucType.equals("RAI")) - return 'R'; + return Product.REGIONAL_TRAIN; // Subway if (ucType.equals("BSS")) - return 'U'; + return Product.SUBWAY; if (ucType.equals("BSL")) - return 'U'; + return Product.SUBWAY; if (ucType.equals("MFL")) - return 'U'; + return Product.SUBWAY; // Tram if (ucType.equals("TRM")) - return 'T'; + return Product.TRAM; if (ucType.equals("NHS")) // Tro NHSL - return 'T'; + return Product.TRAM; // Bus if (ucType.equals("BUS")) - return 'B'; + return Product.BUS; if (ucType.equals("TRO")) - return 'B'; + return Product.BUS; // from Connections: if (ucType.equals("RAIL")) - return 'R'; + return Product.REGIONAL_TRAIN; if (ucType.equals("SUBWAY")) - return 'U'; + return Product.SUBWAY; if (ucType.equals("TROLLEY")) - return 'B'; + return Product.BUS; - return 0; + return null; } } diff --git a/enabler/src/de/schildbach/pte/SfProvider.java b/enabler/src/de/schildbach/pte/SfProvider.java index 0d718a8d..d2d0b698 100644 --- a/enabler/src/de/schildbach/pte/SfProvider.java +++ b/enabler/src/de/schildbach/pte/SfProvider.java @@ -20,6 +20,8 @@ package de.schildbach.pte; import java.util.HashMap; import java.util.Map; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; /** @@ -56,60 +58,60 @@ public class SfProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if (("XAA".equals(symbol) || "Daly City / Fremont".equals(symbol)) && "Daly City / Fremont".equals(name)) - return "RDALY/FRMT"; + return new Line(id, Product.REGIONAL_TRAIN, "DALY/FRMT"); if (("FRE".equals(symbol) || "Fremont / Daly City".equals(symbol)) && "Fremont / Daly City".equals(name)) - return "RFRMT/DALY"; + return new Line(id, Product.REGIONAL_TRAIN, "FRMT/DALY"); if (("XAC".equals(symbol) || "Fremont / Richmond".equals(symbol)) && "Fremont / Richmond".equals(name)) - return "RFRMT/RICH"; + return new Line(id, Product.REGIONAL_TRAIN, "FRMT/RICH"); if (("XAD".equals(symbol) || "Richmond / Fremont".equals(symbol)) && "Richmond / Fremont".equals(name)) - return "RRICH/FRMT"; + return new Line(id, Product.REGIONAL_TRAIN, "RICH/FRMT"); if (("XAE".equals(symbol) || "Pittsburg Bay Point / SFO".equals(symbol)) && "Pittsburg Bay Point / SFO".equals(name)) - return "RPITT/SFIA"; + return new Line(id, Product.REGIONAL_TRAIN, "PITT/SFIA"); if (("SFI".equals(symbol) || "SFO / Pittsburg Bay Point".equals(symbol)) && "SFO / Pittsburg Bay Point".equals(name)) - return "RSFIA/PITT"; + return new Line(id, Product.REGIONAL_TRAIN, "SFIA/PITT"); if (("XAF".equals(symbol) || "Millbrae / Richmond".equals(symbol)) && "Millbrae / Richmond".equals(name)) - return "RMLBR/RICH"; + return new Line(id, Product.REGIONAL_TRAIN, "MLBR/RICH"); if (("XAG".equals(symbol) || "Richmond / Millbrae".equals(symbol)) && "Richmond / Millbrae".equals(name)) - return "RRICH/MLBR"; + return new Line(id, Product.REGIONAL_TRAIN, "RICH/MLBR"); if (("XAH".equals(symbol) || "Daly City / Dublin Pleasanton".equals(symbol)) && "Daly City / Dublin Pleasanton".equals(name)) - return "RDALY/DUBL"; + return new Line(id, Product.REGIONAL_TRAIN, "DALY/DUBL"); if (("XAI".equals(symbol) || "Dublin Pleasanton / Daly City".equals(symbol)) && "Dublin Pleasanton / Daly City".equals(name)) - return "RDUBL/DALY"; + return new Line(id, Product.REGIONAL_TRAIN, "DUBL/DALY"); if ("LOC".equals(symbol) && "LOCAL".equals(name)) - return "RLocal"; + return new Line(id, Product.REGIONAL_TRAIN, "Local"); if ("CAP".equals(symbol) && "CAPITOL".equals(name)) - return "RCapitol"; + return new Line(id, Product.REGIONAL_TRAIN, "Capitol"); if ("OAK".equals(symbol) && "OAK / Coliseum".equals(name)) - return "ROAK/Coliseum"; + return new Line(id, Product.REGIONAL_TRAIN, "OAK/Coliseum"); if ("Muni Rail".equals(trainName) && symbol != null) // Muni - return 'T' + symbol; + return new Line(id, Product.TRAM, symbol); if (trainType == null && "F".equals(trainNum)) // Muni Historic Streetcar - return "TF"; + return new Line(id, Product.TRAM, "F"); if (trainType == null && "J".equals(trainNum)) // Muni Metro - return "TJ"; + return new Line(id, Product.TRAM, "J"); if (trainType == null && "K".equals(trainNum)) // Muni Metro - return "TK"; + return new Line(id, Product.TRAM, "K"); if (trainType == null && "KT".equals(trainNum)) // Muni Metro - return "TKT"; + return new Line(id, Product.TRAM, "KT"); if (trainType == null && "L".equals(trainNum)) // Muni Metro - return "TL"; + return new Line(id, Product.TRAM, "L"); if (trainType == null && "M".equals(trainNum)) // Muni Metro - return "TM"; + return new Line(id, Product.TRAM, "M"); if (trainType == null && "N".equals(trainNum)) // Muni Metro - return "TN"; + return new Line(id, Product.TRAM, "N"); if (trainType == null && "T".equals(trainNum)) // Muni Metro - return "TT"; + return new Line(id, Product.TRAM, "T"); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/ShProvider.java b/enabler/src/de/schildbach/pte/ShProvider.java index bbe81f73..8e8e3539 100644 --- a/enabler/src/de/schildbach/pte/ShProvider.java +++ b/enabler/src/de/schildbach/pte/ShProvider.java @@ -49,28 +49,28 @@ public class ShProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'F'; + return Product.FERRY; if (value == 128) - return 'U'; + return Product.SUBWAY; if (value == 256) - return 'T'; + return Product.TRAM; if (value == 512) - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } diff --git a/enabler/src/de/schildbach/pte/SncbProvider.java b/enabler/src/de/schildbach/pte/SncbProvider.java index 1b0b3d0e..22c351e4 100644 --- a/enabler/src/de/schildbach/pte/SncbProvider.java +++ b/enabler/src/de/schildbach/pte/SncbProvider.java @@ -52,22 +52,22 @@ public class SncbProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 256) - return 'U'; + return Product.SUBWAY; if (value == 512) - return 'B'; + return Product.BUS; if (value == 1024) - return 'T'; + return Product.TRAM; throw new IllegalArgumentException("cannot handle: " + value); } @@ -158,34 +158,30 @@ public class SncbProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if (ucType.startsWith("IC ")) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if ("THALYS".equals(ucType)) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (ucType.startsWith("IR ")) - return 'R'; + return Product.REGIONAL_TRAIN; if ("L".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("CR".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("TRN".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("MÉTRO".equals(ucType)) - return 'U'; + return Product.SUBWAY; if ("TRAMWAY".equals(ucType)) - return 'T'; + return Product.TRAM; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/Standard.java b/enabler/src/de/schildbach/pte/Standard.java index 7ae21f3b..5d1d591b 100644 --- a/enabler/src/de/schildbach/pte/Standard.java +++ b/enabler/src/de/schildbach/pte/Standard.java @@ -20,6 +20,7 @@ package de.schildbach.pte; import java.util.HashMap; import java.util.Map; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; import de.schildbach.pte.dto.Style.Shape; @@ -28,17 +29,17 @@ import de.schildbach.pte.dto.Style.Shape; */ public class Standard { - public static final Map STYLES = new HashMap(); + public static final Map STYLES = new HashMap(); static { - STYLES.put('I', new Style(Shape.RECT, Style.WHITE, Style.RED, Style.RED)); - STYLES.put('R', new Style(Shape.RECT, Style.GRAY, Style.WHITE)); - STYLES.put('S', new Style(Shape.CIRCLE, Style.parseColor("#006e34"), Style.WHITE)); - STYLES.put('U', new Style(Shape.RECT, Style.parseColor("#003090"), Style.WHITE)); - STYLES.put('T', new Style(Shape.RECT, Style.parseColor("#cc0000"), Style.WHITE)); - STYLES.put('B', new Style(Style.parseColor("#993399"), Style.WHITE)); - STYLES.put('F', new Style(Shape.CIRCLE, Style.BLUE, Style.WHITE)); - STYLES.put('?', new Style(Style.DKGRAY, Style.WHITE)); + STYLES.put(Product.HIGH_SPEED_TRAIN, new Style(Shape.RECT, Style.WHITE, Style.RED, Style.RED)); + STYLES.put(Product.REGIONAL_TRAIN, new Style(Shape.RECT, Style.GRAY, Style.WHITE)); + STYLES.put(Product.SUBURBAN_TRAIN, new Style(Shape.CIRCLE, Style.parseColor("#006e34"), Style.WHITE)); + STYLES.put(Product.SUBWAY, new Style(Shape.RECT, Style.parseColor("#003090"), Style.WHITE)); + STYLES.put(Product.TRAM, new Style(Shape.RECT, Style.parseColor("#cc0000"), Style.WHITE)); + STYLES.put(Product.BUS, new Style(Style.parseColor("#993399"), Style.WHITE)); + STYLES.put(Product.FERRY, new Style(Shape.CIRCLE, Style.BLUE, Style.WHITE)); + STYLES.put(null, new Style(Style.DKGRAY, Style.WHITE)); } } diff --git a/enabler/src/de/schildbach/pte/StockholmProvider.java b/enabler/src/de/schildbach/pte/StockholmProvider.java index a2ff5be2..18daa56e 100644 --- a/enabler/src/de/schildbach/pte/StockholmProvider.java +++ b/enabler/src/de/schildbach/pte/StockholmProvider.java @@ -49,22 +49,22 @@ public class StockholmProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) // Pendeltåg - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 2) // Tunnelbana - return 'U'; + return Product.SUBWAY; if (value == 4) // Lokalbanor - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) // Bussar - return 'B'; + return Product.BUS; if (value == 16) // Flygbussar - return 'B'; + return Product.BUS; if (value == 32) - return 'F'; + return Product.FERRY; if (value == 64) // Waxholmsbåtar - return 'F'; + return Product.FERRY; throw new IllegalArgumentException("cannot handle: " + value); } @@ -153,9 +153,9 @@ public class StockholmProvider extends AbstractHafasProvider if (type.length() > 0) { - final char normalizedType = normalizeType(type); - if (normalizedType != 0) - return newLine(normalizedType, number, null); + final Product product = normalizeType(type); + if (product != null) + return newLine(product, number, null); } throw new IllegalStateException("cannot normalize type " + type + " number " + number + " line#type " + lineAndType); @@ -165,43 +165,43 @@ public class StockholmProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("TRAIN".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("NÄRTRAFIKEN".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("LOKALTÅG".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("PENDELTÅG".equals(ucType)) - return 'S'; + return Product.SUBURBAN_TRAIN; if ("METRO".equals(ucType)) - return 'U'; + return Product.SUBWAY; if ("TUNNELBANA".equals(ucType)) - return 'U'; + return Product.SUBWAY; if ("TRAM".equals(ucType)) - return 'T'; + return Product.TRAM; if ("BUS".equals(ucType)) - return 'B'; + return Product.BUS; if ("BUSS".equals(ucType)) - return 'B'; + return Product.BUS; if ("FLYG".equals(ucType)) - return 'B'; + return Product.BUS; if ("SHIP".equals(ucType)) - return 'F'; + return Product.FERRY; if ("BÅT".equals(ucType)) - return 'F'; + return Product.FERRY; if ("FÄRJA".equals(ucType)) - return 'F'; + return Product.FERRY; - return 0; + return null; } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/StvProvider.java b/enabler/src/de/schildbach/pte/StvProvider.java index 7adeac06..cbeaf012 100644 --- a/enabler/src/de/schildbach/pte/StvProvider.java +++ b/enabler/src/de/schildbach/pte/StvProvider.java @@ -17,6 +17,9 @@ package de.schildbach.pte; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; + /** * @author Andreas Schildbach */ @@ -38,15 +41,15 @@ public class StvProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("M".equals(trainType) && trainNum != null) - return "RM" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "M" + trainNum); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } } diff --git a/enabler/src/de/schildbach/pte/SydneyProvider.java b/enabler/src/de/schildbach/pte/SydneyProvider.java index 198209b3..f7425579 100644 --- a/enabler/src/de/schildbach/pte/SydneyProvider.java +++ b/enabler/src/de/schildbach/pte/SydneyProvider.java @@ -20,6 +20,8 @@ package de.schildbach.pte; import java.util.HashMap; import java.util.Map; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; /** @@ -56,37 +58,37 @@ public class SydneyProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("1".equals(mot)) { if ("BMT".equals(symbol) || "Blue Mountains Line".equals(symbol)) - return "SBMT"; + return new Line(id, Product.SUBURBAN_TRAIN, "BMT"); if ("CCN".equals(symbol) || "Central Coast & Newcastle Line".equals(symbol)) - return "SCCN"; + return new Line(id, Product.SUBURBAN_TRAIN, "CCN"); if ("SHL".equals(symbol) || "Southern Highlands Line".equals(symbol)) - return "SSHL"; + return new Line(id, Product.SUBURBAN_TRAIN, "SHL"); if ("SCO".equals(symbol) || "South Coast Line".equals(symbol)) - return "SSCO"; + return new Line(id, Product.SUBURBAN_TRAIN, "SCO"); if ("HUN".equals(symbol) || "Hunter Line".equals(symbol)) - return "SHUN"; + return new Line(id, Product.SUBURBAN_TRAIN, "HUN"); if ("T1".equals(symbol) || "T1 North Shore & Northern Line".equals(symbol) || "T1 Northern Line".equals(symbol) || "T1 Western Line".equals(symbol)) - return "ST1"; + return new Line(id, Product.SUBURBAN_TRAIN, "T1"); if ("T2".equals(symbol) || "T2 Inner West & South Line".equals(symbol) || "T2 Airport Line".equals(symbol)) - return "ST2"; + return new Line(id, Product.SUBURBAN_TRAIN, "T2"); if ("T3".equals(symbol) || "T3 Bankstown Line".equals(symbol)) - return "ST3"; + return new Line(id, Product.SUBURBAN_TRAIN, "T3"); if ("T4".equals(symbol) || "T4 Eastern Suburbs & Illawarra Line".equals(symbol)) - return "ST4"; + return new Line(id, Product.SUBURBAN_TRAIN, "T4"); if ("T5".equals(symbol) || "T5 Cumberland Line".equals(symbol)) - return "ST5"; + return new Line(id, Product.SUBURBAN_TRAIN, "T5"); if ("T6".equals(symbol) || "T6 Carlingford Line".equals(symbol)) - return "ST6"; + return new Line(id, Product.SUBURBAN_TRAIN, "T6"); if ("T7".equals(symbol) || "T7 Olympic Park Line".equals(symbol)) - return "ST7"; + return new Line(id, Product.SUBURBAN_TRAIN, "T7"); throw new IllegalStateException("cannot normalize mot='" + mot + "' symbol='" + symbol + "' name='" + name + "' long='" + longName + "' trainType='" + trainType + "' trainNum='" + trainNum + "' trainName='" + trainName + "'"); @@ -94,7 +96,7 @@ public class SydneyProvider extends AbstractEfaProvider else if ("4".equals(mot)) { if ("L1".equals(symbol) || "L1 Dulwich Hill Line".equals(symbol)) - return "TL1"; + return new Line(id, Product.TRAM, "L1"); throw new IllegalStateException("cannot normalize mot='" + mot + "' symbol='" + symbol + "' name='" + name + "' long='" + longName + "' trainType='" + trainType + "' trainNum='" + trainNum + "' trainName='" + trainName + "'"); @@ -102,29 +104,29 @@ public class SydneyProvider extends AbstractEfaProvider else if ("9".equals(mot)) { if ("F1".equals(symbol) || "F1 Manly".equals(symbol)) - return "FF1"; + return new Line(id, Product.FERRY, "F1"); if ("F2".equals(symbol) || "F2 Taronga Zoo".equals(symbol)) - return "FF2"; + return new Line(id, Product.FERRY, "F2"); if ("F3".equals(symbol) || "F3 Parramatta River".equals(symbol)) - return "FF3"; + return new Line(id, Product.FERRY, "F3"); if ("F4".equals(symbol) || "F4 Darling Harbour".equals(symbol)) - return "FF4"; + return new Line(id, Product.FERRY, "F4"); if ("F5".equals(symbol) || "F5 Neutral Bay".equals(symbol)) - return "FF5"; + return new Line(id, Product.FERRY, "F5"); if ("F6".equals(symbol) || "F6 Mosman Bay".equals(symbol)) - return "FF6"; + return new Line(id, Product.FERRY, "F6"); if ("F7".equals(symbol) || "F7 Eastern Suburbs".equals(symbol)) - return "FF7"; + return new Line(id, Product.FERRY, "F7"); if ("Private ferry servic".equals(trainName) && symbol != null) - return 'F' + symbol; + return new Line(id, Product.FERRY, symbol); if ("MFF".equals(symbol) || "Manly Fast Ferry".equals(name)) - return "FMFF"; + return new Line(id, Product.FERRY, "MFF"); throw new IllegalStateException("cannot normalize mot='" + mot + "' symbol='" + symbol + "' name='" + name + "' long='" + longName + "' trainType='" + trainType + "' trainNum='" + trainNum + "' trainName='" + trainName + "'"); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/TfiProvider.java b/enabler/src/de/schildbach/pte/TfiProvider.java index 6fd93702..68cfbdeb 100644 --- a/enabler/src/de/schildbach/pte/TfiProvider.java +++ b/enabler/src/de/schildbach/pte/TfiProvider.java @@ -19,6 +19,7 @@ package de.schildbach.pte; import java.util.Set; +import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Product; /** @@ -49,19 +50,19 @@ public class TfiProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("DART".equals(name)) - return "SDART"; + return new Line(id, Product.SUBURBAN_TRAIN, "DART"); if ("Rail".equals(trainName) && trainNum == null) - return "?Rail"; + return new Line(id, null, "Rail"); if ("Train".equals(name) && "Train".equals(symbol)) - return "?Train"; + return new Line(id, null, "Train"); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } } diff --git a/enabler/src/de/schildbach/pte/TlemProvider.java b/enabler/src/de/schildbach/pte/TlemProvider.java index a3407f7b..8f40780c 100644 --- a/enabler/src/de/schildbach/pte/TlemProvider.java +++ b/enabler/src/de/schildbach/pte/TlemProvider.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; @@ -71,16 +72,16 @@ public class TlemProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("1".equals(mot)) { if (trainType == null && ("DLR".equals(trainNum) || "Light Railway".equals(trainName))) - return "SDLR"; + return new Line(id, Product.SUBURBAN_TRAIN, "DLR"); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/VbbProvider.java b/enabler/src/de/schildbach/pte/VbbProvider.java index 1139db34..8944b541 100644 --- a/enabler/src/de/schildbach/pte/VbbProvider.java +++ b/enabler/src/de/schildbach/pte/VbbProvider.java @@ -50,22 +50,22 @@ public class VbbProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 2) - return 'U'; + return Product.SUBWAY; if (value == 4) - return 'T'; + return Product.TRAM; if (value == 8) - return 'B'; + return Product.BUS; if (value == 16) - return 'F'; + return Product.FERRY; if (value == 32) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 64) - return 'R'; + return Product.REGIONAL_TRAIN; throw new IllegalArgumentException("cannot handle: " + value); } @@ -176,7 +176,7 @@ public class VbbProvider extends AbstractHafasProvider protected Line parseLineAndType(final String lineAndType) { if ("X#".equals(lineAndType)) - return newLine('I', "X", null); // InterConnex + return newLine(Product.HIGH_SPEED_TRAIN, "X", null); // InterConnex else return super.parseLineAndType(lineAndType); } diff --git a/enabler/src/de/schildbach/pte/VblProvider.java b/enabler/src/de/schildbach/pte/VblProvider.java index affc2dba..94190a0c 100644 --- a/enabler/src/de/schildbach/pte/VblProvider.java +++ b/enabler/src/de/schildbach/pte/VblProvider.java @@ -17,6 +17,9 @@ package de.schildbach.pte; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; + /** * @author Andreas Schildbach */ @@ -38,61 +41,61 @@ public class VblProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("BLS".equals(trainType) && trainNum != null) - return "RBLS" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "BLS" + trainNum); if ("ASM".equals(trainType) && trainNum != null) // Aare Seeland mobil - return "RASM" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ASM" + trainNum); if ("SOB".equals(trainType) && trainNum != null) // Schweizerische Südostbahn - return "RSOB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "SOB" + trainNum); if ("RhB".equals(trainType) && trainNum != null) // Rhätische Bahn - return "RRhB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "RhB" + trainNum); if ("AB-".equals(trainType) && trainNum != null) // Appenzeller Bahnen - return "RAB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "AB" + trainNum); if ("BDW".equals(trainType) && trainNum != null) // BDWM Transport - return "RBDW" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "BDW" + trainNum); if ("ZB".equals(trainType) && trainNum != null) // Zentralbahn - return "RZB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "ZB" + trainNum); if ("TPF".equals(trainType) && trainNum != null) // Transports publics fribourgeois - return "RTPF" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "TPF" + trainNum); if ("MGB".equals(trainType) && trainNum != null) // Matterhorn Gotthard Bahn - return "RMGB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "MGB" + trainNum); if ("CJ".equals(trainType) && trainNum != null) // Chemins de fer du Jura - return "RCJ" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "CJ" + trainNum); if ("LEB".equals(trainType) && trainNum != null) // Lausanne-Echallens-Bercher - return "RLEB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "LEB" + trainNum); if ("FAR".equals(trainType) && trainNum != null) // Ferrovie Autolinee Regionali Ticinesi - return "RFAR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "FAR" + trainNum); if ("WAB".equals(trainType) && trainNum != null) // Wengernalpbahn - return "RWAB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "WAB" + trainNum); if ("JB".equals(trainType) && trainNum != null) // Jungfraubahn - return "RJB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "JB" + trainNum); if ("NSt".equals(trainType) && trainNum != null) // Nyon-St-Cergue-Morez - return "RNSt" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "NSt" + trainNum); if ("RA".equals(trainType) && trainNum != null) // Regionalps - return "RRA" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "RA" + trainNum); if ("TRN".equals(trainType) && trainNum != null) // Transport Publics Neuchâtelois - return "RTRN" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "TRN" + trainNum); if ("TPC".equals(trainType) && trainNum != null) // Transports Publics du Chablais - return "RTPC" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "TPC" + trainNum); if ("MVR".equals(trainType) && trainNum != null) // Montreux-Vevey-Riviera - return "RMVR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "MVR" + trainNum); if ("MOB".equals(trainType) && trainNum != null) // Montreux-Oberland Bernois - return "RMOB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "MOB" + trainNum); if ("TRA".equals(trainType) && trainNum != null) // Transports Vallée de Joux-Yverdon-Ste-Croix - return "RTRA" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "TRA" + trainNum); if ("TMR".equals(trainType) && trainNum != null) // Transports de Martigny et Régions - return "RTMR" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "TMR" + trainNum); if ("GGB".equals(trainType) && trainNum != null) // Gornergratbahn - return "RGGB" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "GGB" + trainNum); if ("BLM".equals(trainType) && trainNum != null) // Lauterbrunnen-Mürren - return "RBLM" + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, "BLM" + trainNum); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } } diff --git a/enabler/src/de/schildbach/pte/VbnProvider.java b/enabler/src/de/schildbach/pte/VbnProvider.java index 1cc68f8a..5225c8ec 100644 --- a/enabler/src/de/schildbach/pte/VbnProvider.java +++ b/enabler/src/de/schildbach/pte/VbnProvider.java @@ -42,28 +42,28 @@ public class VbnProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'F'; + return Product.FERRY; if (value == 128) - return 'U'; + return Product.SUBWAY; if (value == 256) - return 'T'; + return Product.TRAM; if (value == 512) - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } @@ -129,17 +129,13 @@ public class VbnProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("SEILB".equals(ucType)) - return 'C'; + return Product.CABLECAR; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/VgnProvider.java b/enabler/src/de/schildbach/pte/VgnProvider.java index 605e8359..6df0d2f2 100644 --- a/enabler/src/de/schildbach/pte/VgnProvider.java +++ b/enabler/src/de/schildbach/pte/VgnProvider.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.Date; import java.util.Set; +import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Product; @@ -44,20 +45,20 @@ public class VgnProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("R5(z)".equals(trainNum)) - return "RR5(z)"; + return new Line(id, Product.REGIONAL_TRAIN, "R5(z)"); if ("R7(z)".equals(trainNum)) - return "RR7(z)"; + return new Line(id, Product.REGIONAL_TRAIN, "R7(z)"); if ("R8(z)".equals(trainNum)) - return "RR8(z)"; + return new Line(id, Product.REGIONAL_TRAIN, "R8(z)"); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } @Override diff --git a/enabler/src/de/schildbach/pte/VmsProvider.java b/enabler/src/de/schildbach/pte/VmsProvider.java index 2ae11baf..a53defae 100644 --- a/enabler/src/de/schildbach/pte/VmsProvider.java +++ b/enabler/src/de/schildbach/pte/VmsProvider.java @@ -17,6 +17,9 @@ package de.schildbach.pte; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; + /** * @author Andreas Schildbach */ @@ -36,22 +39,22 @@ public class VmsProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("Ilztalbahn".equals(trainName) && trainNum == null) - return "RITB"; + return new Line(id, Product.REGIONAL_TRAIN, "ITB"); if ("Meridian".equals(trainName) && trainNum == null) - return "RM"; + return new Line(id, Product.REGIONAL_TRAIN, "M"); if ("CityBahn".equals(trainName) && trainNum == null) - return "RCB"; + return new Line(id, Product.REGIONAL_TRAIN, "CB"); if ("RE 3".equals(symbol) && "Zug".equals(longName)) - return "RRE3"; + return new Line(id, Product.REGIONAL_TRAIN, "RE3"); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } } diff --git a/enabler/src/de/schildbach/pte/VrnProvider.java b/enabler/src/de/schildbach/pte/VrnProvider.java index a7d59e79..e669dc5a 100644 --- a/enabler/src/de/schildbach/pte/VrnProvider.java +++ b/enabler/src/de/schildbach/pte/VrnProvider.java @@ -17,6 +17,9 @@ package de.schildbach.pte; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; + /** * @author Andreas Schildbach */ @@ -38,15 +41,15 @@ public class VrnProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("InterRegio".equals(longName) && symbol == null) - return "RIR"; + return new Line(id, Product.REGIONAL_TRAIN, "IR"); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } } diff --git a/enabler/src/de/schildbach/pte/VrrProvider.java b/enabler/src/de/schildbach/pte/VrrProvider.java index d3c550b4..2bc2e742 100644 --- a/enabler/src/de/schildbach/pte/VrrProvider.java +++ b/enabler/src/de/schildbach/pte/VrrProvider.java @@ -22,6 +22,8 @@ import java.util.Map; import com.google.common.base.Charsets; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Style; /** @@ -50,36 +52,36 @@ public class VrrProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if (trainType == null && "RB67/71".equals(trainNum)) - return 'R' + trainNum; + return new Line(id, Product.REGIONAL_TRAIN, trainNum); if ("Regionalbahn".equals(trainName) && symbol != null) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if ("NordWestBahn".equals(trainName) && symbol != null) - return 'R' + symbol; + return new Line(id, Product.REGIONAL_TRAIN, symbol); if (trainType == null && "SEV7".equals(trainNum)) - return 'B' + trainNum; + return new Line(id, Product.BUS, trainNum); if ("Zug".equals(longName)) - return "?Zug"; + return new Line(id, null, "Zug"); } else if ("11".equals(mot)) { // Wuppertaler Schwebebahn & SkyTrain D'dorf if ("Schwebebahn".equals(trainName) || (longName != null && longName.startsWith("Schwebebahn"))) - return 'C' + name; + return new Line(id, Product.CABLECAR, name); // H-Bahn TU Dortmund if ("H-Bahn".equals(trainName) || (longName != null && longName.startsWith("H-Bahn"))) - return 'C' + name; + return new Line(id, Product.CABLECAR, name); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } private static final Map STYLES = new HashMap(); @@ -188,11 +190,11 @@ public class VrrProvider extends AbstractEfaProvider } @Override - public Style lineStyle(final String network, final String line) + public Style lineStyle(final String network, final Product product, final String label) { - if (line != null && line.startsWith("BSB")) - return super.lineStyle(network, "BSB"); + if (product == Product.BUS && label != null && label.startsWith("SB")) + return super.lineStyle(network, product, "SB"); - return super.lineStyle(network, line); + return super.lineStyle(network, product, label); } } diff --git a/enabler/src/de/schildbach/pte/VsnProvider.java b/enabler/src/de/schildbach/pte/VsnProvider.java index 570e6d31..399ce2ea 100644 --- a/enabler/src/de/schildbach/pte/VsnProvider.java +++ b/enabler/src/de/schildbach/pte/VsnProvider.java @@ -46,28 +46,28 @@ public class VsnProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 32) - return 'B'; + return Product.BUS; if (value == 64) - return 'F'; + return Product.FERRY; if (value == 128) - return 'U'; + return Product.SUBWAY; if (value == 256) - return 'T'; + return Product.TRAM; if (value == 512) - return 'P'; + return Product.ON_DEMAND; throw new IllegalArgumentException("cannot handle: " + value); } @@ -158,20 +158,16 @@ public class VsnProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("E".equals(ucType)) - return 'R'; + return Product.REGIONAL_TRAIN; if ("T84".equals(ucType)) - return '?'; + return null; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } } diff --git a/enabler/src/de/schildbach/pte/VvoProvider.java b/enabler/src/de/schildbach/pte/VvoProvider.java index c517743c..e86bd6e1 100644 --- a/enabler/src/de/schildbach/pte/VvoProvider.java +++ b/enabler/src/de/schildbach/pte/VvoProvider.java @@ -19,6 +19,9 @@ package de.schildbach.pte; import com.google.common.base.Charsets; +import de.schildbach.pte.dto.Line; +import de.schildbach.pte.dto.Product; + /** * @author Andreas Schildbach */ @@ -46,31 +49,31 @@ public class VvoProvider extends AbstractEfaProvider } @Override - protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, - final String trainNum, final String trainName) + protected Line parseLine(final String id, final String mot, final String symbol, final String name, final String longName, + final String trainType, final String trainNum, final String trainName) { if ("0".equals(mot)) { if ("Twoje Linie Kolejowe".equals(trainName) && symbol != null) - return "ITLK" + symbol; + return new Line(id, Product.HIGH_SPEED_TRAIN, "TLK" + symbol); if ("Regionalbahn".equals(trainName) && trainNum == null) - return "R"; + return new Line(id, Product.REGIONAL_TRAIN, null); if ("Ostdeutsche Eisenbahn GmbH".equals(longName)) - return "ROE"; + return new Line(id, Product.REGIONAL_TRAIN, "OE"); if ("Meridian".equals(longName)) - return "RM"; + return new Line(id, Product.REGIONAL_TRAIN, "M"); if ("trilex".equals(longName)) - return "RTLX"; + return new Line(id, Product.REGIONAL_TRAIN, "TLX"); if ("Trilex".equals(trainName) && trainNum == null) - return "RTLX"; + return new Line(id, Product.REGIONAL_TRAIN, "TLX"); if ("U28".equals(symbol)) // Nationalparkbahn - return "RU28"; + return new Line(id, Product.REGIONAL_TRAIN, "U28"); if ("Fernbus".equals(trainName) && trainNum == null) - return "B" + trainName; + return new Line(id, Product.BUS, trainName); } - return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); + return super.parseLine(id, mot, symbol, name, longName, trainType, trainNum, trainName); } } diff --git a/enabler/src/de/schildbach/pte/ZvvProvider.java b/enabler/src/de/schildbach/pte/ZvvProvider.java index 67d896f9..9e514805 100644 --- a/enabler/src/de/schildbach/pte/ZvvProvider.java +++ b/enabler/src/de/schildbach/pte/ZvvProvider.java @@ -49,28 +49,28 @@ public class ZvvProvider extends AbstractHafasProvider } @Override - protected char intToProduct(final int value) + protected Product intToProduct(final int value) { if (value == 1) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 2) - return 'I'; + return Product.HIGH_SPEED_TRAIN; if (value == 4) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 8) - return 'R'; + return Product.REGIONAL_TRAIN; if (value == 16) - return 'F'; + return Product.FERRY; if (value == 32) - return 'S'; + return Product.SUBURBAN_TRAIN; if (value == 64) - return 'B'; + return Product.BUS; if (value == 128) - return 'C'; + return Product.CABLECAR; if (value == 256) - return 'U'; + return Product.SUBWAY; if (value == 512) - return 'T'; + return Product.TRAM; throw new IllegalArgumentException("cannot handle: " + value); } @@ -179,23 +179,23 @@ public class ZvvProvider extends AbstractHafasProvider final String type = m.group(2); if ("Bus".equals(type)) - return newLine('B', stripPrefix(number, "Bus"), null); + return newLine(Product.BUS, stripPrefix(number, "Bus"), null); if ("Bus-NF".equals(type)) - return newLine('B', stripPrefix(number, "Bus", "Bus-NF"), null, Line.Attr.WHEEL_CHAIR_ACCESS); + return newLine(Product.BUS, stripPrefix(number, "Bus", "Bus-NF"), null, Line.Attr.WHEEL_CHAIR_ACCESS); if ("Tro".equals(type) || "Trolley".equals(type)) - return newLine('B', stripPrefix(number, "Tro"), null); + return newLine(Product.BUS, stripPrefix(number, "Tro"), null); if ("Tro-NF".equals(type)) - return newLine('B', stripPrefix(number, "Tro", "Tro-NF"), null, Line.Attr.WHEEL_CHAIR_ACCESS); + return newLine(Product.BUS, stripPrefix(number, "Tro", "Tro-NF"), null, Line.Attr.WHEEL_CHAIR_ACCESS); if ("Trm".equals(type)) - return newLine('T', stripPrefix(number, "Trm"), null); + return newLine(Product.TRAM, stripPrefix(number, "Trm"), null); if ("Trm-NF".equals(type)) - return newLine('T', stripPrefix(number, "Trm", "Trm-NF"), null, Line.Attr.WHEEL_CHAIR_ACCESS); + return newLine(Product.TRAM, stripPrefix(number, "Trm", "Trm-NF"), null, Line.Attr.WHEEL_CHAIR_ACCESS); if (type.length() > 0) { - final char normalizedType = normalizeType(type); - if (normalizedType != 0) - return newLine(normalizedType, number, null); + final Product product = normalizeType(type); + if (product != null) + return newLine(product, number, null); } throw new IllegalStateException("cannot normalize type " + type + " number " + number + " line#type " + lineAndType); @@ -214,34 +214,30 @@ public class ZvvProvider extends AbstractHafasProvider } @Override - protected char normalizeType(final String type) + protected Product normalizeType(final String type) { final String ucType = type.toUpperCase(); if ("N".equals(ucType)) // Nachtbus - return 'B'; + return Product.BUS; if ("TX".equals(ucType)) - return 'B'; + return Product.BUS; if ("KB".equals(ucType)) // Kleinbus? - return 'B'; + return Product.BUS; if ("D-SCHIFF".equals(ucType)) - return 'F'; + return Product.FERRY; if ("DAMPFSCH".equals(ucType)) - return 'F'; + return Product.FERRY; if ("BERGBAHN".equals(ucType)) - return 'C'; + return Product.CABLECAR; if ("LSB".equals(ucType)) // Luftseilbahn - return 'C'; + return Product.CABLECAR; if ("SLB".equals(ucType)) // Sesselliftbahn - return 'C'; + return Product.CABLECAR; - final char t = super.normalizeType(type); - if (t != 0) - return t; - - return 0; + return super.normalizeType(type); } private static final Map STYLES = new HashMap(); diff --git a/enabler/src/de/schildbach/pte/dto/Line.java b/enabler/src/de/schildbach/pte/dto/Line.java index e75fdb62..b502e702 100644 --- a/enabler/src/de/schildbach/pte/dto/Line.java +++ b/enabler/src/de/schildbach/pte/dto/Line.java @@ -22,6 +22,8 @@ import java.util.Set; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; /** * @author Andreas Schildbach @@ -36,43 +38,50 @@ public final class Line implements Serializable, Comparable private static final long serialVersionUID = -5642533805998375070L; public final String id; - private final transient char product; // TODO make true field + public final Product product; public final String label; public final Style style; public final Set attrs; public final String message; - private static final String PRODUCT_ORDER = "IRSUTBPFC?"; - public static final Line FOOTWAY = new Line(null, null, null); public static final Line TRANSFER = new Line(null, null, null); public static final Line SECURE_CONNECTION = new Line(null, null, null); public static final Line DO_NOT_CHANGE = new Line(null, null, null); - public Line(final String id, final String label, final Style style) + public Line(final String id, final Product product, final String label) { - this(id, label, style, null, null); + this(id, product, label, null, null, null); } - public Line(final String id, final String label, final Style style, final String message) + public Line(final String id, final Product product, final String label, final Style style) { - this(id, label, style, null, message); + this(id, product, label, style, null, null); } - public Line(final String id, final String label, final Style style, final Set attrs) + public Line(final String id, final Product product, final String label, final Style style, final String message) { - this(id, label, style, attrs, null); + this(id, product, label, style, null, message); } - public Line(final String id, final String label, final Style style, final Set attrs, final String message) + public Line(final String id, final Product product, final String label, final Style style, final Set attrs) + { + this(id, product, label, style, attrs, null); + } + + public Line(final String id, final Product product, final String label, final Style style, final Set attrs, final String message) { this.id = id; + this.product = product; this.label = label; this.style = style; this.attrs = attrs; this.message = message; + } - product = (label != null && label.length() >= 1) ? label.charAt(0) : '?'; + public char productCode() + { + return product != null ? product.code : Product.UNKNOWN; } public boolean hasAttr(final Attr attr) @@ -88,31 +97,31 @@ public final class Line implements Serializable, Comparable if (!(o instanceof Line)) return false; final Line other = (Line) o; + if (!Objects.equal(this.product, other.product)) + return false; return Objects.equal(this.label, other.label); } @Override public int hashCode() { - return Objects.hashCode(label); + return Objects.hashCode(product, label); } @Override public String toString() { - return MoreObjects.toStringHelper(this).addValue(label).toString(); + return MoreObjects.toStringHelper(this) // + .addValue(product) // + .addValue(label) // + .toString(); } public int compareTo(final Line other) { - final int productThis = PRODUCT_ORDER.indexOf(this.product); - final int productOther = PRODUCT_ORDER.indexOf(other.product); - - final int compareProduct = new Integer(productThis >= 0 ? productThis : Integer.MAX_VALUE).compareTo(productOther >= 0 ? productOther - : Integer.MAX_VALUE); - if (compareProduct != 0) - return compareProduct; - - return this.label.compareTo(other.label); + return ComparisonChain.start() // + .compare(this.product, other.product, Ordering.natural().nullsLast()) // + .compare(this.label, other.label, Ordering.natural().nullsLast()) // + .result(); } } diff --git a/enabler/src/de/schildbach/pte/dto/Trip.java b/enabler/src/de/schildbach/pte/dto/Trip.java index 1f8e5559..f349301e 100644 --- a/enabler/src/de/schildbach/pte/dto/Trip.java +++ b/enabler/src/de/schildbach/pte/dto/Trip.java @@ -188,7 +188,7 @@ public final class Trip implements Serializable for (final Leg leg : legs) if (leg instanceof Public) - products.add(Product.fromCode(((Public) leg).line.label.charAt(0))); + products.add(((Public) leg).line.product); return products; } @@ -219,7 +219,9 @@ public final class Trip implements Serializable final Public publicLeg = (Public) leg; builder.append(publicLeg.departureStop.plannedDepartureTime.getTime()).append('-'); builder.append(publicLeg.arrivalStop.plannedArrivalTime.getTime()).append('-'); - builder.append(publicLeg.line.label); + final Line line = publicLeg.line; + builder.append(line.productCode()); + builder.append(line.label); } builder.append('|');