Migrate Salzburg to use VAO.

This commit is contained in:
Andreas Schildbach 2016-03-06 11:34:49 +01:00
parent 907fc38dc4
commit 04b0c2ea2c
5 changed files with 97 additions and 224 deletions

View file

@ -29,7 +29,7 @@ public enum NetworkId
DB, BVG, VBB, NVV, BAYERN, MVV, INVG, AVV, VGN, VVM, VMV, HVV, SH, GVH, BSVAG, VBN, NASA, VVO, VMS, VGS, VRR, VRS, MVG, NPH, VRN, VVS, DING, KVV, VAGFR, NVBW, VVV, DB, BVG, VBB, NVV, BAYERN, MVV, INVG, AVV, VGN, VVM, VMV, HVV, SH, GVH, BSVAG, VBN, NASA, VVO, VMS, VGS, VRR, VRS, MVG, NPH, VRN, VVS, DING, KVV, VAGFR, NVBW, VVV,
// Austria // Austria
OEBB, VAO, VOR, WIEN, LINZ, SVV, VVT, IVB, STV, OEBB, VAO, VOR, WIEN, LINZ, VVT, IVB, STV,
// Switzerland // Switzerland
SBB, BVB, VBL, ZVV, SBB, BVB, VBL, ZVV,

View file

@ -1,82 +0,0 @@
/*
* Copyright 2010-2015 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 javax.annotation.Nullable;
import com.google.common.base.Charsets;
import de.schildbach.pte.dto.Line;
import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.Style;
/**
* @author Andreas Schildbach
*/
public class SvvProvider extends AbstractEfaProvider
{
private final static String API_BASE = "http://efa.svv-info.at/svv/";
public SvvProvider()
{
super(NetworkId.SVV, API_BASE);
setRequestUrlEncoding(Charsets.UTF_8);
setStyles(STYLES);
}
@Override
protected Line parseLine(final @Nullable String id, final @Nullable String network, final @Nullable String mot, final @Nullable String symbol,
final @Nullable String name, final @Nullable String longName, final @Nullable String trainType, final @Nullable String trainNum,
final @Nullable String trainName)
{
if ("1".equals(mot))
{
if ("S1/11".equals(symbol)) // Salzburger Lokalbahn
return new Line(id, network, Product.SUBURBAN_TRAIN, "S1/11");
}
return super.parseLine(id, network, mot, symbol, name, longName, trainType, trainNum, trainName);
}
private static final Map<String, Style> STYLES = new HashMap<String, Style>();
static
{
STYLES.put("svv|SS1", new Style(Style.parseColor("#b61d33"), Style.WHITE));
STYLES.put("svv|SS2", new Style(Style.parseColor("#0069b4"), Style.WHITE));
STYLES.put("svv|SS3", new Style(Style.parseColor("#0aa537"), Style.WHITE));
STYLES.put("svv|SS4", new Style(Style.parseColor("#a862a4"), Style.WHITE));
STYLES.put("svv|SS11", new Style(Style.parseColor("#b61d33"), Style.WHITE));
STYLES.put("svv|B1", new Style(Style.parseColor("#e3000f"), Style.WHITE));
STYLES.put("svv|B2", new Style(Style.parseColor("#0069b4"), Style.WHITE));
STYLES.put("svv|B3", new Style(Style.parseColor("#956b27"), Style.WHITE));
STYLES.put("svv|B4", new Style(Style.parseColor("#ffcc00"), Style.WHITE));
STYLES.put("svv|B5", new Style(Style.parseColor("#04bbee"), Style.WHITE));
STYLES.put("svv|B6", new Style(Style.parseColor("#85bc22"), Style.WHITE));
STYLES.put("svv|B7", new Style(Style.parseColor("#009a9b"), Style.WHITE));
STYLES.put("svv|B8", new Style(Style.parseColor("#f39100"), Style.WHITE));
STYLES.put("svv|B10", new Style(Style.parseColor("#f8baa2"), Style.BLACK));
STYLES.put("svv|B12", new Style(Style.parseColor("#b9dfde"), Style.WHITE));
STYLES.put("svv|B14", new Style(Style.parseColor("#cfe09a"), Style.WHITE));
}
}

View file

@ -20,6 +20,8 @@ package de.schildbach.pte;
import java.io.IOException; import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -35,6 +37,7 @@ import de.schildbach.pte.dto.Product;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.QueryTripsContext; import de.schildbach.pte.dto.QueryTripsContext;
import de.schildbach.pte.dto.QueryTripsResult; import de.schildbach.pte.dto.QueryTripsResult;
import de.schildbach.pte.dto.Style;
import de.schildbach.pte.dto.SuggestLocationsResult; import de.schildbach.pte.dto.SuggestLocationsResult;
/** /**
@ -55,6 +58,7 @@ public class VaoProvider extends AbstractHafasProvider
setJsonApiClient("{\"id\":\"VAO\",\"l\":\"vs_vvv\"}"); setJsonApiClient("{\"id\":\"VAO\",\"l\":\"vs_vvv\"}");
setJsonApiAuthorization(jsonApiAuthorization); setJsonApiAuthorization(jsonApiAuthorization);
setJsonNearbyLocationsEncoding(Charsets.UTF_8); setJsonNearbyLocationsEncoding(Charsets.UTF_8);
setStyles(STYLES);
} }
@Override @Override
@ -133,4 +137,29 @@ public class VaoProvider extends AbstractHafasProvider
return jsonTripSearch(jsonContext.from, jsonContext.to, jsonContext.date, jsonContext.dep, jsonContext.products, return jsonTripSearch(jsonContext.from, jsonContext.to, jsonContext.date, jsonContext.dep, jsonContext.products,
later ? jsonContext.laterContext : jsonContext.earlierContext); later ? jsonContext.laterContext : jsonContext.earlierContext);
} }
private static final Map<String, Style> STYLES = new HashMap<String, Style>();
static
{
// Salzburg S-Bahn
STYLES.put("Salzburg AG|SS1", new Style(Style.parseColor("#b61d33"), Style.WHITE));
STYLES.put("Salzburg AG|SS11", new Style(Style.parseColor("#b61d33"), Style.WHITE));
STYLES.put("OEBB|SS2", new Style(Style.parseColor("#0069b4"), Style.WHITE));
STYLES.put("OEBB|SS3", new Style(Style.parseColor("#0aa537"), Style.WHITE));
STYLES.put("BLB|SS4", new Style(Style.parseColor("#a862a4"), Style.WHITE));
// Salzburg Bus
STYLES.put("Salzburg AG|B1", new Style(Style.parseColor("#e3000f"), Style.WHITE));
STYLES.put("Salzburg AG|B2", new Style(Style.parseColor("#0069b4"), Style.WHITE));
STYLES.put("Salzburg AG|B3", new Style(Style.parseColor("#956b27"), Style.WHITE));
STYLES.put("Salzburg AG|B4", new Style(Style.parseColor("#ffcc00"), Style.WHITE));
STYLES.put("Salzburg AG|B5", new Style(Style.parseColor("#04bbee"), Style.WHITE));
STYLES.put("Salzburg AG|B6", new Style(Style.parseColor("#85bc22"), Style.WHITE));
STYLES.put("Salzburg AG|B7", new Style(Style.parseColor("#009a9b"), Style.WHITE));
STYLES.put("Salzburg AG|B8", new Style(Style.parseColor("#f39100"), Style.WHITE));
STYLES.put("Salzburg AG|B10", new Style(Style.parseColor("#f8baa2"), Style.BLACK));
STYLES.put("Salzburg AG|B12", new Style(Style.parseColor("#b9dfde"), Style.WHITE));
STYLES.put("Salzburg AG|B14", new Style(Style.parseColor("#cfe09a"), Style.WHITE));
}
} }

View file

@ -1,141 +0,0 @@
/*
* Copyright 2010-2015 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.hamcrest.CoreMatchers.hasItem;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
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.SvvProvider;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyLocationsResult;
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 SvvProviderLiveTest extends AbstractProviderLiveTest
{
public SvvProviderLiveTest()
{
super(new SvvProvider());
}
@Test
public void nearbyStations() throws Exception
{
final NearbyLocationsResult result = queryNearbyStations(new Location(LocationType.STATION, "60650002"));
print(result);
}
@Test
public void nearbyStationsByCoordinate() throws Exception
{
final NearbyLocationsResult result = queryNearbyStations(Location.coord(47809195, 13054919));
print(result);
}
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = queryDepartures("60650002", false);
print(result);
}
@Test
public void suggestLocationsIncomplete() throws Exception
{
final SuggestLocationsResult result = suggestLocations("Kur");
print(result);
}
@Test
public void suggestLocationsWithUmlaut() throws Exception
{
final SuggestLocationsResult result = suggestLocations("Salzburg Süd");
print(result);
assertThat(result.getLocations(), hasItem(new Location(LocationType.STATION, "60650458")));
}
@Test
public void suggestLocationsAddress() throws Exception
{
final SuggestLocationsResult result = suggestLocations("Kaigasse 10");
print(result);
}
@Test
public void suggestLocationsCoverage() throws Exception
{
final SuggestLocationsResult salzburgResult = suggestLocations("Salzburg Süd");
print(salzburgResult);
assertThat(salzburgResult.getLocations(), hasItem(new Location(LocationType.STATION, "60650458")));
final SuggestLocationsResult strasswalchenResult = suggestLocations("Straßwalchen West");
print(strasswalchenResult);
assertThat(strasswalchenResult.getLocations(), hasItem(new Location(LocationType.STATION, "60656483")));
final SuggestLocationsResult schwarzachResult = suggestLocations("Schwarzach Abtsdorf");
print(schwarzachResult);
assertThat(schwarzachResult.getLocations(), hasItem(new Location(LocationType.STATION, "60656614")));
final SuggestLocationsResult trimmelkamResult = suggestLocations("Trimmelkam");
print(trimmelkamResult);
assertThat(trimmelkamResult.getLocations(), hasItem(new Location(LocationType.STATION, "60640776")));
}
@Test
public void shortTrip() throws Exception
{
final QueryTripsResult result = queryTrips(new Location(LocationType.STATION, "60650021", 47797036, 13053608, "Salzburg", "Justizgebäude"),
null, new Location(LocationType.STATION, "60650022", 47793760, 13059338, "Salzburg", "Akademiestraß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

@ -17,7 +17,10 @@
package de.schildbach.pte.live; package de.schildbach.pte.live;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.Date; import java.util.Date;
@ -58,6 +61,13 @@ public class VaoProviderLiveTest extends AbstractProviderLiveTest
print(result); print(result);
} }
@Test
public void nearbyStationsByCoordinateSalzburg() throws Exception
{
final NearbyLocationsResult result = queryNearbyStations(Location.coord(47809195, 13054919));
print(result);
}
@Test @Test
public void queryDepartures() throws Exception public void queryDepartures() throws Exception
{ {
@ -66,6 +76,13 @@ public class VaoProviderLiveTest extends AbstractProviderLiveTest
assertEquals(QueryDeparturesResult.Status.OK, result.status); assertEquals(QueryDeparturesResult.Status.OK, result.status);
} }
@Test
public void queryDeparturesSalzburg() throws Exception
{
final QueryDeparturesResult result = queryDepartures("455000200", false);
print(result);
}
@Test @Test
public void queryDeparturesInvalidStation() throws Exception public void queryDeparturesInvalidStation() throws Exception
{ {
@ -95,6 +112,26 @@ public class VaoProviderLiveTest extends AbstractProviderLiveTest
print(result); print(result);
} }
@Test
public void suggestLocationsCoverage() throws Exception
{
final SuggestLocationsResult salzburgResult = suggestLocations("Salzburg Süd");
print(salzburgResult);
assertThat(salzburgResult.getLocations(), hasItem(new Location(LocationType.STATION, "60650458")));
final SuggestLocationsResult strasswalchenResult = suggestLocations("Straßwalchen West");
print(strasswalchenResult);
assertThat(strasswalchenResult.getLocations(), hasItem(new Location(LocationType.STATION, "60656483")));
final SuggestLocationsResult schwarzachResult = suggestLocations("Schwarzach Abtsdorf");
print(schwarzachResult);
assertThat(schwarzachResult.getLocations(), hasItem(new Location(LocationType.STATION, "60656614")));
final SuggestLocationsResult trimmelkamResult = suggestLocations("Trimmelkam");
print(trimmelkamResult);
assertThat(trimmelkamResult.getLocations(), hasItem(new Location(LocationType.STATION, "60640776")));
}
@Test @Test
public void shortTripFeldkirch() throws Exception public void shortTripFeldkirch() throws Exception
{ {
@ -131,6 +168,36 @@ public class VaoProviderLiveTest extends AbstractProviderLiveTest
print(earlierResult); print(earlierResult);
} }
@Test
public void shortTripSalzburg() throws Exception
{
final QueryTripsResult result = queryTrips(
new Location(LocationType.STATION, "455000900", 47808976, 13056409, "Salzburg", "Vogelweiderstraße"), null,
new Location(LocationType.STATION, "455084400", 47811556, 13050278, "Salzburg", "Merianstraß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);
}
@Test @Test
public void tripAddressToStation() throws Exception public void tripAddressToStation() throws Exception
{ {