Hafas xmlStationBoard to support equivs.

This commit is contained in:
Andreas Schildbach 2014-08-28 14:02:26 +02:00
parent d161b19907
commit 6a71482d15
7 changed files with 65 additions and 15 deletions

View file

@ -445,18 +445,18 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
throws IOException
{
final StringBuilder uri = new StringBuilder(stationBoardEndpoint);
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, "vs_java3");
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, equivs, "vs_java3");
return xmlStationBoard(uri.toString(), stationId);
}
protected void appendXmlStationBoardParameters(final StringBuilder uri, final Date time, final String stationId, final int maxDepartures,
final String styleSheet)
final boolean equivs, final String styleSheet)
{
uri.append("?productsFilter=").append(allProductsString());
uri.append("&boardType=dep");
if (stationBoardCanDoEquivs)
uri.append("&disableEquivs=yes"); // don't use nearby stations
uri.append("&disableEquivs=").append(equivs ? "0" : "1");
uri.append("&maxJourneys=").append(maxDepartures > 0 ? maxDepartures : DEFAULT_MAX_DEPARTURES);
uri.append("&input=").append(normalizeStationId(stationId));
appendDateTimeParameters(uri, time, "date", "time");
@ -516,7 +516,6 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final ResultHeader header = new ResultHeader(SERVER_PRODUCT);
final QueryDeparturesResult result = new QueryDeparturesResult(header);
final List<Departure> departures = new ArrayList<Departure>(8);
if (XmlPullUtil.test(pp, "Err"))
{
@ -576,9 +575,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
// TODO is_reachable
// TODO disableTrainInfo
final boolean isEquivStation = stationBoardCanDoEquivs && depStation != null;
if (!isEquivStation && !"cancel".equals(eDelay))
if (!"cancel".equals(eDelay))
{
final Calendar plannedTime = new GregorianCalendar(timeZone);
plannedTime.clear();
@ -687,7 +684,27 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final Departure departure = new Departure(plannedTime.getTime(), predictedTime != null ? predictedTime.getTime() : null, line,
position, destination, capacity, message);
departures.add(departure);
final Location location;
if (!stationBoardCanDoEquivs || depStation == null)
{
location = new Location(LocationType.STATION, normalizedStationId, stationPlaceAndName != null ? stationPlaceAndName[0]
: null, stationPlaceAndName != null ? stationPlaceAndName[1] : null);
}
else
{
final String[] depPlaceAndName = splitPlaceAndName(depStation);
location = new Location(LocationType.STATION, null, depPlaceAndName[0], depPlaceAndName[1]);
}
StationDepartures stationDepartures = findStationDepartures(result.stationDepartures, location);
if (stationDepartures == null)
{
stationDepartures = new StationDepartures(location, new ArrayList<Departure>(8), null);
result.stationDepartures.add(stationDepartures);
}
stationDepartures.departures.add(departure);
}
XmlPullUtil.requireSkip(pp, "Journey");
@ -698,9 +715,6 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.requireEndDocument(pp);
result.stationDepartures.add(new StationDepartures(new Location(LocationType.STATION, normalizedStationId,
stationPlaceAndName != null ? stationPlaceAndName[0] : null, stationPlaceAndName != null ? stationPlaceAndName[1] : null),
departures, null));
return result;
}
catch (final XmlPullParserException x)
@ -714,6 +728,15 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
}
}
private StationDepartures findStationDepartures(final List<StationDepartures> stationDepartures, final Location location)
{
for (final StationDepartures stationDeparture : stationDepartures)
if (stationDeparture.location.equals(location))
return stationDeparture;
return null;
}
protected void addCustomReplaces(final StringReplaceReader reader)
{
}

View file

@ -159,7 +159,7 @@ public class InvgProvider extends AbstractHafasProvider
// scrape page
final StringBuilder uri = new StringBuilder(stationBoardEndpoint);
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, null);
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, false, null);
final CharSequence page = ParserUtils.scrape(uri.toString());
// System.out.println(uri);

View file

@ -181,7 +181,7 @@ public class SeptaProvider extends AbstractHafasProvider
// scrape page
final StringBuilder uri = new StringBuilder(stationBoardEndpoint);
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, null);
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, false, null);
final CharSequence page = ParserUtils.scrape(uri.toString());
// System.out.println(uri);

View file

@ -197,7 +197,7 @@ public class ShProvider extends AbstractHafasProvider
// scrape page
final StringBuilder uri = new StringBuilder(stationBoardEndpoint);
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, null);
appendXmlStationBoardParameters(uri, time, stationId, maxDepartures, false, null);
final CharSequence page = ParserUtils.scrape(uri.toString());
// System.out.println(uri);

View file

@ -17,6 +17,8 @@
package de.schildbach.pte.live;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Collection;
import java.util.Date;
@ -70,7 +72,17 @@ public abstract class AbstractProviderLiveTest
protected final QueryDeparturesResult queryDepartures(final String stationId, boolean equivs) throws IOException
{
return provider.queryDepartures(stationId, new Date(), 0, equivs);
final QueryDeparturesResult result = provider.queryDepartures(stationId, new Date(), 0, equivs);
if (result.status == QueryDeparturesResult.Status.OK)
{
if (equivs)
assertTrue(result.stationDepartures.size() > 1);
else
assertTrue(result.stationDepartures.size() == 1);
}
return result;
}
protected final QueryTripsResult queryTrips(final Location from, final Location via, final Location to, final Date date, final boolean dep,

View file

@ -71,6 +71,14 @@ public class NasaProviderLiveTest extends AbstractProviderLiveTest
print(result);
}
@Test
public void queryDeparturesEquivs() throws Exception
{
final QueryDeparturesResult result = queryDepartures("13000", true);
print(result);
}
@Test
public void queryDeparturesInvalidStation() throws Exception
{

View file

@ -86,6 +86,13 @@ public class NvvProviderLiveTest extends AbstractProviderLiveTest
print(result4);
}
@Test
public void queryDeparturesEquivs() throws Exception
{
final QueryDeparturesResult result = queryDepartures("3000010", true);
print(result);
}
@Test
public void queryDeparturesInvalidStation() throws Exception
{