remove superfluous departureQueryUri() method from interface

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@304 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach 2010-10-17 15:50:02 +00:00
parent 1e49dd0e46
commit 4d4355ac4f
36 changed files with 126 additions and 128 deletions

View file

@ -634,8 +634,12 @@ public abstract class AbstractEfaProvider implements NetworkProvider
throw new IllegalStateException("cannot normalize mot '" + mot + "' name '" + name + "' long '" + longName + "'");
}
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
protected abstract String departuresQueryUri(String stationId, int maxDepartures);
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
final String uri = departuresQueryUri(stationId, maxDepartures);
InputStream is = null;
try
{
@ -691,11 +695,11 @@ public abstract class AbstractEfaProvider implements NetworkProvider
XmlPullUtil.skipRestOfTree(pp);
}
return new QueryDeparturesResult(uri, locationId, location, departures);
return new QueryDeparturesResult(locationId, location, departures);
}
else if ("notidentified".equals(nameState))
{
return new QueryDeparturesResult(uri, QueryDeparturesResult.Status.INVALID_STATION);
return new QueryDeparturesResult(QueryDeparturesResult.Status.INVALID_STATION, Integer.parseInt(stationId));
}
else
{
@ -708,11 +712,11 @@ public abstract class AbstractEfaProvider implements NetworkProvider
}
catch (final FileNotFoundException x)
{
return new QueryDeparturesResult(uri, QueryDeparturesResult.Status.SERVICE_DOWN);
return new QueryDeparturesResult(QueryDeparturesResult.Status.SERVICE_DOWN, Integer.parseInt(stationId));
}
catch (final SocketTimeoutException x)
{
return new QueryDeparturesResult(uri, QueryDeparturesResult.Status.SERVICE_DOWN);
return new QueryDeparturesResult(QueryDeparturesResult.Status.SERVICE_DOWN, Integer.parseInt(stationId));
}
finally
{

View file

@ -65,7 +65,8 @@ public class AvvProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, ParserUtils.urlEncode(stationId));
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -432,7 +432,7 @@ public final class BahnProvider implements NetworkProvider
}
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("bhftafel.exe/dn");
@ -459,9 +459,9 @@ public final class BahnProvider implements NetworkProvider
);
private static final Pattern P_DEPARTURES_MESSAGES = Pattern.compile("<Err code=\"([^\"]*)\" text=\"([^\"]*)\"");
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
final Matcher mMessage = P_DEPARTURES_MESSAGES.matcher(page);
if (mMessage.find())
@ -470,9 +470,9 @@ public final class BahnProvider implements NetworkProvider
final String text = mMessage.group(2);
if (code.equals("H730")) // Your input is not valid
return new QueryDeparturesResult(uri, QueryDeparturesResult.Status.INVALID_STATION);
return new QueryDeparturesResult(QueryDeparturesResult.Status.INVALID_STATION, Integer.parseInt(stationId));
if (code.equals("H890")) // No trains in result
return new QueryDeparturesResult(uri, QueryDeparturesResult.Status.NO_INFO);
return new QueryDeparturesResult(QueryDeparturesResult.Status.NO_INFO, Integer.parseInt(stationId));
throw new IllegalArgumentException("unknown error " + code + ", " + text);
}
@ -512,11 +512,11 @@ public final class BahnProvider implements NetworkProvider
}
else
{
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + stationId);
}
}
return new QueryDeparturesResult(uri, 0, null, departures);
return new QueryDeparturesResult(Integer.parseInt(stationId), null, departures);
}
private static final Pattern P_NORMALIZE_LINE_NUMBER = Pattern.compile("\\d{2,5}");

View file

@ -65,7 +65,8 @@ public class BvbProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, ParserUtils.urlEncode(stationId));
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -65,7 +65,8 @@ public class GvhProvider extends AbstractEfaProvider
return null;
}
public String departuresQueryUri(String stationId, int maxDepartures)
@Override
protected String departuresQueryUri(String stationId, int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -65,7 +65,8 @@ public class IvbProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, ParserUtils.urlEncode(stationId));
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -70,7 +70,8 @@ public class LinzProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, stationId);
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -124,7 +124,8 @@ public class MvvProvider extends AbstractEfaProvider
return new NearbyStationsResult(uri, stations.subList(0, maxStations));
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -75,7 +75,7 @@ public class NasaProvider extends AbstractHafasProvider
return String.format(NEARBY_URI, stationId);
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy");
final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
@ -124,10 +124,10 @@ public class NasaProvider extends AbstractHafasProvider
+ "(?:<td class=\"center sepline top\">\n(" + ParserUtils.P_PLATFORM + ").*?)?" // position
, Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
// scrape page
final CharSequence page = ParserUtils.scrape(uri);
final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
// parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -135,11 +135,11 @@ public class NasaProvider extends AbstractHafasProvider
{
// messages
if (mHeadCoarse.group(3) != null)
return new QueryDeparturesResult(uri, Status.NO_INFO);
return new QueryDeparturesResult(Status.NO_INFO, Integer.parseInt(stationId));
else if (mHeadCoarse.group(4) != null)
return new QueryDeparturesResult(uri, Status.INVALID_STATION);
return new QueryDeparturesResult(Status.INVALID_STATION, Integer.parseInt(stationId));
else if (mHeadCoarse.group(5) != null)
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN);
return new QueryDeparturesResult(Status.SERVICE_DOWN, Integer.parseInt(stationId));
final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches())
@ -202,20 +202,20 @@ public class NasaProvider extends AbstractHafasProvider
}
else
{
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(2) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(2) + "' on " + stationId);
}
}
return new QueryDeparturesResult(uri, 0, location, departures);
return new QueryDeparturesResult(Integer.parseInt(stationId), location, departures);
}
else
{
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
}
}
else
{
throw new IllegalArgumentException("cannot parse '" + page + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + page + "' on " + stationId);
}
}

View file

@ -120,25 +120,16 @@ public interface NetworkProvider
GetConnectionDetailsResult getConnectionDetails(String connectionUri) throws IOException;
/**
* Construct an Uri for getting departures
* Get departures at a given station, probably live
*
* @param stationId
* id of the station
* @param maxDepartures
* maximum number of departures to get or {@code 0}
* @return uri for getting departures
*/
String departuresQueryUri(String stationId, int maxDepartures);
/**
* Get departures at a given station, probably live
*
* @param queryUri
* uri constructed by {@link NetworkProvider#departuresQueryUri}
* @return result object containing the departures
* @throws IOException
*/
QueryDeparturesResult queryDepartures(String queryUri) throws IOException;
QueryDeparturesResult queryDepartures(String stationId, int maxDepartures) throws IOException;
/**
* Get colors of line

View file

@ -491,7 +491,7 @@ public class OebbProvider extends AbstractHafasProvider
throw new UnsupportedOperationException();
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
final Date now = new Date();
@ -518,16 +518,16 @@ public class OebbProvider extends AbstractHafasProvider
private static final Pattern P_DEPARTURES_ERROR = Pattern.compile("(Verbindung zum Server konnte leider nicht hergestellt werden)");
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
// scrape page
final String page = ParserUtils.scrape(uri).toString().substring(14);
final String page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures)).toString().substring(14);
final Matcher mError = P_DEPARTURES_ERROR.matcher(page);
if (mError.find())
{
if (mError.group(1) != null)
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN);
return new QueryDeparturesResult(Status.SERVICE_DOWN, Integer.parseInt(stationId));
}
try
@ -537,7 +537,7 @@ public class OebbProvider extends AbstractHafasProvider
final int locationId = head.optInt("stationEvaId", -1);
// final boolean rt = head.optBoolean("rtInfo");
if (locationId == -1)
return new QueryDeparturesResult(uri, Status.INVALID_STATION);
return new QueryDeparturesResult(Status.INVALID_STATION, Integer.parseInt(stationId));
final List<Departure> departures = new ArrayList<Departure>(8);
@ -565,11 +565,11 @@ public class OebbProvider extends AbstractHafasProvider
}
}
return new QueryDeparturesResult(uri, locationId, location, departures);
return new QueryDeparturesResult(locationId, location, departures);
}
catch (final JSONException x)
{
throw new RuntimeException("cannot parse: '" + page + "' on " + uri, x);
throw new RuntimeException("cannot parse: '" + page + "' on " + stationId, x);
}
}

View file

@ -427,7 +427,7 @@ public class RmvProvider extends AbstractHafasProvider
return time;
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy");
final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
@ -473,9 +473,9 @@ public class RmvProvider extends AbstractHafasProvider
+ "(?:<img src=\".+?\" alt=\"\" />\n<b>[^<]*</b>\n<br />\n)*" // (messages)
, Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
// parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -483,11 +483,11 @@ public class RmvProvider extends AbstractHafasProvider
{
// messages
if (mHeadCoarse.group(4) != null)
return new QueryDeparturesResult(uri, Status.INVALID_STATION);
return new QueryDeparturesResult(Status.INVALID_STATION, Integer.parseInt(stationId));
else if (mHeadCoarse.group(5) != null)
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN);
return new QueryDeparturesResult(Status.SERVICE_DOWN, Integer.parseInt(stationId));
final int stationId = Integer.parseInt(mHeadCoarse.group(3));
final int locationId = Integer.parseInt(mHeadCoarse.group(3));
final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches())
@ -541,20 +541,20 @@ public class RmvProvider extends AbstractHafasProvider
}
else
{
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + stationId);
}
}
return new QueryDeparturesResult(uri, stationId, location, departures);
return new QueryDeparturesResult(locationId, location, departures);
}
else
{
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
}
}
else
{
throw new IllegalArgumentException("cannot parse '" + page + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + page + "' on " + stationId);
}
}

View file

@ -367,7 +367,7 @@ public class SbbProvider extends AbstractHafasProvider
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("bhftafel.exe/dox");
@ -407,9 +407,9 @@ public class SbbProvider extends AbstractHafasProvider
+ ".*?" //
, Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
// parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -417,11 +417,11 @@ public class SbbProvider extends AbstractHafasProvider
{
// messages
if (mHeadCoarse.group(3) != null)
return new QueryDeparturesResult(uri, Status.NO_INFO);
return new QueryDeparturesResult( Status.NO_INFO, Integer.parseInt(stationId));
else if (mHeadCoarse.group(5) != null)
return new QueryDeparturesResult(uri, Status.INVALID_STATION);
return new QueryDeparturesResult( Status.INVALID_STATION, Integer.parseInt(stationId));
else if (mHeadCoarse.group(6) != null)
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN);
return new QueryDeparturesResult( Status.SERVICE_DOWN, Integer.parseInt(stationId));
final String head = mHeadCoarse.group(1) + mHeadCoarse.group(4);
final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(head);
@ -469,20 +469,20 @@ public class SbbProvider extends AbstractHafasProvider
}
else
{
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + stationId);
}
}
return new QueryDeparturesResult(uri, locationId, location, departures);
return new QueryDeparturesResult(locationId, location, departures);
}
else
{
throw new IllegalArgumentException("cannot parse '" + head + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + head + "' on " + stationId);
}
}
else
{
throw new IllegalArgumentException("cannot parse '" + page + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + page + "' on " + stationId);
}
}

View file

@ -64,7 +64,7 @@ public class SncbProvider extends AbstractHafasProvider
return String.format(NEARBY_URI, stationId);
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append("http://hari.b-rail.be/hari3/webserver1/bin/stboard.exe/dox");
@ -99,9 +99,9 @@ public class SncbProvider extends AbstractHafasProvider
+ "(?:<span class=\"delay\">([+-]?\\d+|Ausfall)</span>\r\n)?" // delay
, Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
// parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -109,9 +109,9 @@ public class SncbProvider extends AbstractHafasProvider
{
// messages
if (mHeadCoarse.group(3) != null)
return new QueryDeparturesResult(uri, Status.INVALID_STATION);
return new QueryDeparturesResult(Status.INVALID_STATION, Integer.parseInt(stationId));
else if (mHeadCoarse.group(4) != null)
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN);
return new QueryDeparturesResult(Status.SERVICE_DOWN, Integer.parseInt(stationId));
final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches())
@ -150,20 +150,20 @@ public class SncbProvider extends AbstractHafasProvider
}
else
{
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + stationId);
}
}
return new QueryDeparturesResult(uri, 0, location, departures);
return new QueryDeparturesResult(Integer.parseInt(stationId), location, departures);
}
else
{
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
}
}
else
{
throw new IllegalArgumentException("cannot parse '" + page + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + page + "' on " + stationId);
}
}

View file

@ -65,7 +65,8 @@ public class SvvProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, ParserUtils.urlEncode(stationId));
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -72,7 +72,8 @@ public class TflProvider extends AbstractEfaProvider
return null;
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -277,8 +277,8 @@ public final class VbbProvider implements NetworkProvider
if (departureTime.after(arrivalTime))
arrivalTime = ParserUtils.addDays(arrivalTime, 1);
final String line = normalizeLine(ParserUtils.resolveEntities(mConFine.group(4)));
final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime, line,
line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null);
final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime,
line, line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null);
connections.add(connection);
}
else
@ -424,8 +424,8 @@ public final class VbbProvider implements NetworkProvider
}
if (firstDepartureTime != null && lastArrivalTime != null)
return new GetConnectionDetailsResult(currentDate, new Connection(AbstractHafasProvider.extractConnectionId(uri), uri, firstDepartureTime,
lastArrivalTime, null, null, firstDepartureId, firstDeparture, lastArrivalId, lastArrival, parts));
return new GetConnectionDetailsResult(currentDate, new Connection(AbstractHafasProvider.extractConnectionId(uri), uri,
firstDepartureTime, lastArrivalTime, null, null, firstDepartureId, firstDeparture, lastArrivalId, lastArrival, parts));
else
return new GetConnectionDetailsResult(currentDate, null);
}
@ -438,7 +438,7 @@ public final class VbbProvider implements NetworkProvider
private static final String DEPARTURE_URL_LIVE = "http://mobil.bvg.de/IstAbfahrtzeiten/index/mobil?";
private static final String DEPARTURE_URL_PLAN = "http://mobil.bvg.de/Fahrinfo/bin/stboard.bin/dox/dox?boardType=dep&start=yes&";
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final boolean live = stationId.length() == 6;
@ -469,19 +469,13 @@ public final class VbbProvider implements NetworkProvider
+ "\\s*(.*?)\\s*</a>.*?" // destination
, Pattern.DOTALL);
private static final Pattern P_DEPARTURES_SERVICE_DOWN = Pattern.compile("Wartungsarbeiten");
private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)");
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
final Matcher mStationId = P_DEPARTURES_URI_STATION_ID.matcher(uri);
if (!mStationId.find())
throw new IllegalStateException(uri);
final int stationId = Integer.parseInt(mStationId.group(1));
final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
if (P_DEPARTURES_SERVICE_DOWN.matcher(page).find())
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN);
return new QueryDeparturesResult(Status.SERVICE_DOWN, Integer.parseInt(stationId));
// parse page
final Matcher mHead = P_DEPARTURES_HEAD.matcher(page);
@ -495,7 +489,7 @@ public final class VbbProvider implements NetworkProvider
final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page);
while (mDepCoarse.find())
{
final boolean live = uri.contains("IstAbfahrtzeiten");
final boolean live = stationId.length() == 6;
final Matcher mDepFine = (live ? P_DEPARTURES_LIVE_FINE : P_DEPARTURES_PLAN_FINE).matcher(mDepCoarse.group(1));
if (mDepFine.matches())
{
@ -533,15 +527,15 @@ public final class VbbProvider implements NetworkProvider
}
else
{
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + stationId);
}
}
return new QueryDeparturesResult(uri, stationId, location, departures);
return new QueryDeparturesResult(Integer.parseInt(stationId), location, departures);
}
else
{
return new QueryDeparturesResult(uri, Status.NO_INFO);
return new QueryDeparturesResult(Status.NO_INFO, Integer.parseInt(stationId));
}
}

View file

@ -75,7 +75,7 @@ public class VgsProvider extends AbstractHafasProvider
return String.format(NEARBY_URI, stationId);
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
private String departuresQueryUri(final String stationId, final int maxDepartures)
{
final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy");
final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
@ -124,10 +124,10 @@ public class VgsProvider extends AbstractHafasProvider
+ "(?:<td class=\"center sepline top\">\n(" + ParserUtils.P_PLATFORM + ").*?)?" // position
, Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{
// scrape page
final CharSequence page = ParserUtils.scrape(uri);
final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
// parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -135,11 +135,11 @@ public class VgsProvider extends AbstractHafasProvider
{
// messages
if (mHeadCoarse.group(3) != null)
return new QueryDeparturesResult(uri, Status.NO_INFO);
return new QueryDeparturesResult(Status.NO_INFO, Integer.parseInt(stationId));
else if (mHeadCoarse.group(4) != null)
return new QueryDeparturesResult(uri, Status.INVALID_STATION);
return new QueryDeparturesResult(Status.INVALID_STATION, Integer.parseInt(stationId));
else if (mHeadCoarse.group(5) != null)
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN);
return new QueryDeparturesResult(Status.SERVICE_DOWN, Integer.parseInt(stationId));
final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches())
@ -202,20 +202,20 @@ public class VgsProvider extends AbstractHafasProvider
}
else
{
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(2) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(2) + "' on " + stationId);
}
}
return new QueryDeparturesResult(uri, 0, location, departures);
return new QueryDeparturesResult(Integer.parseInt(stationId), location, departures);
}
else
{
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
}
}
else
{
throw new IllegalArgumentException("cannot parse '" + page + "' on " + uri);
throw new IllegalArgumentException("cannot parse '" + page + "' on " + stationId);
}
}

View file

@ -65,7 +65,8 @@ public class VrnProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, stationId);
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -65,7 +65,8 @@ public class VrrProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, stationId);
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -65,7 +65,8 @@ public class VvoProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, ParserUtils.urlEncode(stationId));
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -66,7 +66,8 @@ public class VvsProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, stationId);
}
public String departuresQueryUri(final String stationId, final int maxDepartures)
@Override
protected String departuresQueryUri(final String stationId, final int maxDepartures)
{
final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -29,26 +29,23 @@ public final class QueryDeparturesResult
OK, NO_INFO, INVALID_STATION, SERVICE_DOWN
}
public final String uri;
public final Status status;
public final int locationId;
public final String location;
public final List<Departure> departures;
public QueryDeparturesResult(final String uri, final int locationId, final String location, final List<Departure> departures)
public QueryDeparturesResult(final int locationId, final String location, final List<Departure> departures)
{
this.uri = uri;
this.status = Status.OK;
this.locationId = locationId;
this.location = location;
this.departures = departures;
}
public QueryDeparturesResult(final String uri, final Status status)
public QueryDeparturesResult(final Status status, final int locationId)
{
this.uri = uri;
this.status = status;
this.locationId = 0;
this.locationId = locationId;
this.location = null;
this.departures = null;
}

View file

@ -40,7 +40,7 @@ public class AvvProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("100", 0));
final QueryDeparturesResult result = provider.queryDepartures("100", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -40,7 +40,7 @@ public class BahnProviderLiveTest
@Test
public void departures() throws Exception
{
final QueryDeparturesResult queryDepartures = provider.queryDepartures(provider.departuresQueryUri("692991", 0));
final QueryDeparturesResult queryDepartures = provider.queryDepartures("692991", 0);
System.out.println(queryDepartures.departures);
}

View file

@ -40,7 +40,7 @@ public class BvbProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("10000", 0));
final QueryDeparturesResult result = provider.queryDepartures("10000", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -72,7 +72,7 @@ public class LinzProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("60501720", 0));
final QueryDeparturesResult result = provider.queryDepartures("60501720", 0);
System.out.println(result);
}

View file

@ -40,7 +40,7 @@ public class NasaProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("13000", 0));
final QueryDeparturesResult result = provider.queryDepartures("13000", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -66,7 +66,7 @@ public class SbbProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("8500010", 0));
final QueryDeparturesResult result = provider.queryDepartures("8500010", 0);
System.out.println(result.status + " " + result.departures.size() + " " + result.departures);
}

View file

@ -40,7 +40,7 @@ public class SvvProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("60650002", 0));
final QueryDeparturesResult result = provider.queryDepartures("60650002", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -40,7 +40,7 @@ public class TflProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("1000086", 0));
final QueryDeparturesResult result = provider.queryDepartures("1000086", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -40,7 +40,7 @@ public class VgsProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("8000244", 0));
final QueryDeparturesResult result = provider.queryDepartures("8000244", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -83,7 +83,7 @@ public class VrnProviderLiveTest
@Test
public void departures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("6032236", 0));
final QueryDeparturesResult result = provider.queryDepartures("6032236", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -75,7 +75,7 @@ public class VrrProviderLiveTest
@Test
public void departures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("1007258", 0));
final QueryDeparturesResult result = provider.queryDepartures("1007258", 0);
System.out.println(result.departures.size() + " " + result.departures);
}

View file

@ -40,7 +40,7 @@ public class VvoProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("100", 0));
final QueryDeparturesResult result = provider.queryDepartures("100", 0);
System.out.println(result.status + " " + result.departures.size() + " " + result.departures);
}

View file

@ -40,7 +40,7 @@ public class VvsProviderLiveTest
@Test
public void queryDepartures() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures(provider.departuresQueryUri("6118", 0));
final QueryDeparturesResult result = provider.queryDepartures("6118", 0);
System.out.println(result.departures.size() + " " + result.departures);
}