Merge London and South West England into East of England.

This commit is contained in:
Andreas Schildbach 2014-12-11 16:01:27 +01:00
parent fdf1a6ca2a
commit b7f1fda768
7 changed files with 91 additions and 484 deletions

View file

@ -56,7 +56,7 @@ public enum NetworkId
LU, LU,
// United Kingdom // United Kingdom
TFL, TLEM, TLWM, TLSW, TLEM, TLWM,
// Ireland // Ireland
TFI, EIREANN, TFI, EIREANN,

View file

@ -1,154 +0,0 @@
/*
* Copyright 2010-2014 the original author or authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.schildbach.pte;
import java.util.HashMap;
import java.util.Map;
import de.schildbach.pte.dto.Style;
/**
* @author Andreas Schildbach
*/
public class TflProvider extends AbstractEfaProvider
{
public static final NetworkId NETWORK_ID = NetworkId.TFL;
private static final String API_BASE = "http://journeyplanner.tfl.gov.uk/user/";
public TflProvider()
{
super(API_BASE);
setTimeZone("Europe/London");
setUseLineRestriction(false);
setStyles(STYLES);
}
public NetworkId id()
{
return NETWORK_ID;
}
@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)
{
if ("0".equals(mot))
{
if ("First Hull Trains".equals(trainName) || "=HT".equals(trainType))
return "IHT" + trainNum;
else if ("Southern".equals(trainName) || "=SN".equals(trainType))
return "RSN" + trainNum;
else if ("Southeastern".equals(trainName) || "=SE".equals(trainType))
return "RSE" + trainNum;
else if ("South West Trains".equals(trainName) || "=SW".equals(trainType))
return "RSW" + trainNum;
else if ("Greater Anglia".equals(trainName) || "=LE".equals(trainType))
return "RLE" + trainNum;
else if ("First Great Western".equals(trainName) || "=GW".equals(trainType))
return "RGW" + trainNum;
else if ("First Capital Connect".equals(trainName) || "=FC".equals(trainType))
return "RFC" + trainNum;
else if ("Northern Rail".equals(trainName) || "=NT".equals(trainType))
return "RNT" + trainNum;
else if ("Heathrow Connect".equals(trainName) || "=HC".equals(trainType))
return "RHC" + trainNum;
else if ("Heathrow Express".equals(trainName) || "=HX".equals(trainType))
return "RHX" + trainNum;
else if ("Gatwick Express".equals(trainName) || "=GX".equals(trainType))
return "RGX" + trainNum;
else if ("Merseyrail".equals(trainName) || "=ME".equals(trainType))
return "RME" + trainNum;
else if ("East Coast".equals(trainName) || "=GR".equals(trainType))
return "RGR" + trainNum;
else if ("Cross Country".equals(trainName) || "=XC".equals(trainType))
return "RXC" + trainNum;
else if ("East Midlands Trains".equals(trainName) || "=EM".equals(trainType))
return "REM" + trainNum;
else if ("Arriva Trains Wales".equals(trainName) || "=AW".equals(trainType))
return "RAW" + trainNum;
else if ("First TransPennine Express".equals(trainName) || "=TP".equals(trainType))
return "RTP" + trainNum;
else if ("ScotRail".equals(trainName) || "=SR".equals(trainType))
return "RSR" + trainNum;
else if ("London Midland".equals(trainName) || "=LM".equals(trainType))
return "RLM" + trainNum;
else if ("c2c".equals(trainName) || "=CC".equals(trainType))
return "RCC" + trainNum;
else if ("Grand Central".equals(trainName) || "=GC".equals(trainType))
return "RGC" + trainNum;
else if ("Virgin Trains".equals(trainName) || "=VT".equals(trainType))
return "RVT" + trainNum;
else if ("Island Line".equals(trainName) || "=IL".equals(trainType))
return "RIL" + trainNum;
else if ("Chiltern Railways".equals(trainName) || "=CH".equals(trainType))
return "RCH" + trainNum;
else if ("London Overground".equals(trainName) || "=LO".equals(trainType))
return "SLO" + trainNum;
else if ("LO".equals(trainNum) && trainType == null && trainName == null)
return "SLO";
else if ("Underground".equals(trainName) && trainType == null && name != null)
return "U" + name;
}
else if ("3".equals(mot))
{
if ("London Overground".equals(trainName) || "=LO".equals(trainType))
return "SLO" + (trainNum != null ? trainNum : "");
}
return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName);
}
private static final Map<String, Style> STYLES = new HashMap<String, Style>();
static
{
// London
STYLES.put("UBakerloo", new Style(Style.parseColor("#9D5324"), Style.WHITE));
STYLES.put("UCentral", new Style(Style.parseColor("#D52B1E"), Style.WHITE));
STYLES.put("UCircle", new Style(Style.parseColor("#FECB00"), Style.BLACK));
STYLES.put("UDistrict", new Style(Style.parseColor("#007934"), Style.WHITE));
STYLES.put("UEast London", new Style(Style.parseColor("#FFA100"), Style.WHITE));
STYLES.put("UHammersmith & City", new Style(Style.parseColor("#C5858F"), Style.BLACK));
STYLES.put("UJubilee", new Style(Style.parseColor("#818A8F"), Style.WHITE));
STYLES.put("UMetropolitan", new Style(Style.parseColor("#850057"), Style.WHITE));
STYLES.put("UNorthern", new Style(Style.BLACK, Style.WHITE));
STYLES.put("UPiccadilly", new Style(Style.parseColor("#0018A8"), Style.WHITE));
STYLES.put("UVictoria", new Style(Style.parseColor("#00A1DE"), Style.WHITE));
STYLES.put("UWaterloo & City", new Style(Style.parseColor("#76D2B6"), Style.BLACK));
STYLES.put("SDLR", new Style(Style.parseColor("#00B2A9"), Style.WHITE));
STYLES.put("SLO", new Style(Style.parseColor("#f46f1a"), Style.WHITE));
STYLES.put("TTramlink 1", new Style(Style.rgb(193, 215, 46), Style.WHITE));
STYLES.put("TTramlink 2", new Style(Style.rgb(193, 215, 46), Style.WHITE));
STYLES.put("TTramlink 3", new Style(Style.rgb(124, 194, 66), Style.BLACK));
}
@Override
public Style lineStyle(final String network, final String line)
{
if (line.startsWith("SLO"))
return super.lineStyle(network, "SLO");
return super.lineStyle(network, line);
}
}

View file

@ -18,8 +18,11 @@
package de.schildbach.pte; package de.schildbach.pte;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.Style;
/** /**
* @author Andreas Schildbach * @author Andreas Schildbach
@ -29,6 +32,8 @@ public class TlemProvider extends AbstractEfaProvider
public static final NetworkId NETWORK_ID = NetworkId.TLEM; public static final NetworkId NETWORK_ID = NetworkId.TLEM;
private final static String API_BASE = "http://www.travelineeastmidlands.co.uk/em/"; private final static String API_BASE = "http://www.travelineeastmidlands.co.uk/em/";
// http://www.travelineeastmidlands.co.uk/em/
// http://www.travelinesw.com/swe/
// http://www.travelinesoutheast.org.uk/se/ // http://www.travelinesoutheast.org.uk/se/
// http://www.travelineeastanglia.org.uk/ea/ // http://www.travelineeastanglia.org.uk/ea/
@ -37,6 +42,7 @@ public class TlemProvider extends AbstractEfaProvider
super(API_BASE); super(API_BASE);
setTimeZone("Europe/London"); setTimeZone("Europe/London");
setStyles(STYLES);
} }
public NetworkId id() public NetworkId id()
@ -54,22 +60,35 @@ public class TlemProvider extends AbstractEfaProvider
return normalizedName; return normalizedName;
} }
@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)
{
if ("0".equals(mot))
{
if ("Underground".equals(trainName) && trainType == null && name != null)
return "U" + name;
}
return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName);
}
@Override @Override
public Collection<Product> defaultProducts() public Collection<Product> defaultProducts()
{ {
return Product.ALL; return Product.ALL;
} }
private static final Map<String, Style> STYLES = new HashMap<String, Style>();
static
{
// London
STYLES.put("UBakerloo", new Style(Style.parseColor("#9D5324"), Style.WHITE));
STYLES.put("UCentral", new Style(Style.parseColor("#D52B1E"), Style.WHITE));
STYLES.put("UCircle", new Style(Style.parseColor("#FECB00"), Style.BLACK));
STYLES.put("UDistrict", new Style(Style.parseColor("#007934"), Style.WHITE));
STYLES.put("UEast London", new Style(Style.parseColor("#FFA100"), Style.WHITE));
STYLES.put("UHammersmith & City", new Style(Style.parseColor("#C5858F"), Style.BLACK));
STYLES.put("UJubilee", new Style(Style.parseColor("#818A8F"), Style.WHITE));
STYLES.put("UMetropolitan", new Style(Style.parseColor("#850057"), Style.WHITE));
STYLES.put("UNorthern", new Style(Style.BLACK, Style.WHITE));
STYLES.put("UPiccadilly", new Style(Style.parseColor("#0018A8"), Style.WHITE));
STYLES.put("UVictoria", new Style(Style.parseColor("#00A1DE"), Style.WHITE));
STYLES.put("UWaterloo & City", new Style(Style.parseColor("#76D2B6"), Style.BLACK));
STYLES.put("SDLR", new Style(Style.parseColor("#00B2A9"), Style.WHITE));
STYLES.put("SLO", new Style(Style.parseColor("#f46f1a"), Style.WHITE));
STYLES.put("TTramlink 1", new Style(Style.rgb(193, 215, 46), Style.WHITE));
STYLES.put("TTramlink 2", new Style(Style.rgb(193, 215, 46), Style.WHITE));
STYLES.put("TTramlink 3", new Style(Style.rgb(124, 194, 66), Style.BLACK));
}
} }

View file

@ -1,60 +0,0 @@
/*
* Copyright 2010-2014 the original author or authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.schildbach.pte;
import java.util.Collection;
import de.schildbach.pte.dto.Product;
/**
* @author Andreas Schildbach
*/
public class TlswProvider extends AbstractEfaProvider
{
public static final NetworkId NETWORK_ID = NetworkId.TLSW;
private final static String API_BASE = "http://www.travelinesw.com/swe/";
public TlswProvider()
{
super(API_BASE);
setTimeZone("Europe/London");
setUseRouteIndexAsTripId(false);
}
public NetworkId id()
{
return NETWORK_ID;
}
@Override
protected String normalizeLocationName(final String name)
{
final String normalizedName = super.normalizeLocationName(name);
if (normalizedName != null && normalizedName.endsWith(" ()"))
return normalizedName.substring(0, normalizedName.length() - 3);
else
return normalizedName;
}
@Override
public Collection<Product> defaultProducts()
{
return Product.ALL;
}
}

View file

@ -1,144 +0,0 @@
/*
* Copyright 2010-2014 the original author or authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.schildbach.pte.live;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import org.junit.Test;
import de.schildbach.pte.NetworkProvider.Accessibility;
import de.schildbach.pte.NetworkProvider.WalkSpeed;
import de.schildbach.pte.TflProvider;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsResult;
import de.schildbach.pte.dto.SuggestLocationsResult;
/**
* @author Andreas Schildbach
*/
public class TflProviderLiveTest extends AbstractProviderLiveTest
{
public TflProviderLiveTest()
{
super(new TflProvider());
}
@Test
public void nearbyStations() throws Exception
{
final NearbyStationsResult result = provider.queryNearbyStations(new Location(LocationType.STATION, "1000086"), 0, 0);
print(result);
}
@Test
public void nearbyStationsByCoordinate() throws Exception
{
final NearbyStationsResult result = provider.queryNearbyStations(new Location(LocationType.ADDRESS, 51507161, -0127144), 0, 0);
print(result);
}
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = queryDepartures("1000086", false);
print(result);
}
@Test
public void suggestLocationsIncomplete() throws Exception
{
final SuggestLocationsResult result = provider.suggestLocations("Kur");
print(result);
}
@Test
public void shortTrip() throws Exception
{
final QueryTripsResult result = queryTrips(new Location(LocationType.STATION, "1008730", null, "King & Queen Wharf"), null, new Location(
LocationType.STATION, "1006433", null, "Edinburgh Court"), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result);
assertEquals(QueryTripsResult.Status.OK, result.status);
assertTrue(result.trips.size() > 0);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult);
if (!laterResult.context.canQueryLater())
return;
final QueryTripsResult later2Result = queryMoreTrips(laterResult.context, true);
print(later2Result);
if (!later2Result.context.canQueryEarlier())
return;
final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false);
print(earlierResult);
}
@Test
public void postcodeTrip() throws Exception
{
final QueryTripsResult result = queryTrips(new Location(LocationType.ANY, null, null, "sw19 8ta"), null, new Location(LocationType.STATION,
"1016019", 51655903, -397249, null, "Watford (Herts), Watford Town Centre"), new Date(), true, Product.ALL, WalkSpeed.NORMAL,
Accessibility.NEUTRAL);
print(result);
}
@Test
public void tripItdMessageList() throws Exception
{
final QueryTripsResult result = queryTrips(new Location(LocationType.ADDRESS, null, 51446072, -239417, "Wandsworth",
"Timsbury Walk, Wandsworth"), null, new Location(LocationType.STATION, "90046985", 53225140, -1472433, "Chesterfield (Derbys)",
"Walton (Chesterfield), Netherfield Road (on Somersall Lane)"), new Date(), true, Product.ALL, WalkSpeed.NORMAL,
Accessibility.NEUTRAL);
print(result);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult);
if (!laterResult.context.canQueryLater())
return;
final QueryTripsResult later2Result = queryMoreTrips(laterResult.context, true);
print(later2Result);
if (!later2Result.context.canQueryEarlier())
return;
final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false);
print(earlierResult);
}
}

View file

@ -48,23 +48,48 @@ public class TlemProviderLiveTest extends AbstractProviderLiveTest
@Test @Test
public void nearbyStations() throws Exception public void nearbyStations() throws Exception
{ {
final NearbyStationsResult result = provider.queryNearbyStations(new Location(LocationType.STATION, "1001003"), 0, 0); final NearbyStationsResult result1 = provider.queryNearbyStations(new Location(LocationType.STATION, "1001003"), 0, 0);
print(result1);
print(result); final NearbyStationsResult result2 = provider.queryNearbyStations(new Location(LocationType.STATION, "1000086"), 0, 0);
print(result2);
} }
@Test @Test
public void nearbyStationsByCoordinate() throws Exception public void nearbyStationsByCoordinate() throws Exception
{ {
final NearbyStationsResult result = provider.queryNearbyStations(new Location(LocationType.ADDRESS, 51507161, -0127144), 0, 0); final NearbyStationsResult result = provider.queryNearbyStations(new Location(LocationType.ADDRESS, 51507161, -0127144), 0, 0);
print(result); print(result);
} }
@Test @Test
public void queryDepartures() throws Exception public void queryDepartures() throws Exception
{ {
final QueryDeparturesResult result = queryDepartures("1001003", false); final QueryDeparturesResult result1 = queryDepartures("1001003", false);
print(result1);
final QueryDeparturesResult result3 = queryDepartures("1000086", false);
print(result3);
}
@Test
public void queryDeparturesEquivs() throws Exception
{
final QueryDeparturesResult result = queryDepartures("1001003", true);
print(result);
}
@Test
public void queryDeparturesInvalidStation() throws Exception
{
final QueryDeparturesResult resultLive = queryDepartures("999999", false);
assertEquals(QueryDeparturesResult.Status.INVALID_STATION, resultLive.status);
}
@Test
public void suggestLocations() throws Exception
{
final SuggestLocationsResult result = provider.suggestLocations("Lower Arncott The Plough");
print(result); print(result);
} }
@ -104,4 +129,33 @@ public class TlemProviderLiveTest extends AbstractProviderLiveTest
final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false); final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false);
print(earlierResult); print(earlierResult);
} }
@Test
public void tripArncott() throws Exception
{
final QueryTripsResult result = queryTrips(new Location(LocationType.STATION, "60011202", 51850168, -1094302, "Upper Arncott",
"Bullingdon Prison"), null, new Location(LocationType.STATION, "60006013", 51856612, -1112904, "Lower Arncott", "The Plough E"),
new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result);
assertEquals(QueryTripsResult.Status.OK, result.status);
assertTrue(result.trips.size() > 0);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult);
if (!laterResult.context.canQueryLater())
return;
final QueryTripsResult later2Result = queryMoreTrips(laterResult.context, true);
print(later2Result);
if (!later2Result.context.canQueryEarlier())
return;
final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false);
print(earlierResult);
}
} }

View file

@ -1,108 +0,0 @@
/*
* Copyright 2010-2014 the original author or authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.schildbach.pte.live;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import org.junit.Test;
import de.schildbach.pte.NetworkProvider.Accessibility;
import de.schildbach.pte.NetworkProvider.WalkSpeed;
import de.schildbach.pte.TlswProvider;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyStationsResult;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsResult;
import de.schildbach.pte.dto.SuggestLocationsResult;
/**
* @author Andreas Schildbach
*/
public class TlswProviderLiveTest extends AbstractProviderLiveTest
{
public TlswProviderLiveTest()
{
super(new TlswProvider());
}
@Test
public void nearbyStations() throws Exception
{
final NearbyStationsResult result = provider.queryNearbyStations(new Location(LocationType.STATION, "247616"), 0, 0);
print(result);
}
@Test
public void nearbyStationsByCoordinate() throws Exception
{
final NearbyStationsResult result = provider.queryNearbyStations(new Location(LocationType.ADDRESS, 51507161, -0127144), 0, 0);
print(result);
}
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = queryDepartures("247616", false);
print(result);
}
@Test
public void suggestLocationsIncomplete() throws Exception
{
final SuggestLocationsResult result = provider.suggestLocations("Kur");
print(result);
}
@Test
public void shortTrip() throws Exception
{
final QueryTripsResult result = queryTrips(new Location(LocationType.STATION, "60011202", 51850168, -1094302, "Upper Arncott",
"Bullingdon Prison"), null, new Location(LocationType.STATION, "60006576", 51856352, -1113127, "Lower Arncott", "The Plough"),
new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result);
assertEquals(QueryTripsResult.Status.OK, result.status);
assertTrue(result.trips.size() > 0);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult);
if (!laterResult.context.canQueryLater())
return;
final QueryTripsResult later2Result = queryMoreTrips(laterResult.context, true);
print(later2Result);
if (!later2Result.context.canQueryEarlier())
return;
final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false);
print(earlierResult);
}
}