mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-15 00:50:31 +00:00
Hafas xmlStationBoard to support equivs.
This commit is contained in:
parent
d161b19907
commit
6a71482d15
7 changed files with 65 additions and 15 deletions
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue