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 + "'"); 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; InputStream is = null;
try try
{ {
@ -691,11 +695,11 @@ public abstract class AbstractEfaProvider implements NetworkProvider
XmlPullUtil.skipRestOfTree(pp); XmlPullUtil.skipRestOfTree(pp);
} }
return new QueryDeparturesResult(uri, locationId, location, departures); return new QueryDeparturesResult(locationId, location, departures);
} }
else if ("notidentified".equals(nameState)) else if ("notidentified".equals(nameState))
{ {
return new QueryDeparturesResult(uri, QueryDeparturesResult.Status.INVALID_STATION); return new QueryDeparturesResult(QueryDeparturesResult.Status.INVALID_STATION, Integer.parseInt(stationId));
} }
else else
{ {
@ -708,11 +712,11 @@ public abstract class AbstractEfaProvider implements NetworkProvider
} }
catch (final FileNotFoundException x) 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) catch (final SocketTimeoutException x)
{ {
return new QueryDeparturesResult(uri, QueryDeparturesResult.Status.SERVICE_DOWN); return new QueryDeparturesResult(QueryDeparturesResult.Status.SERVICE_DOWN, Integer.parseInt(stationId));
} }
finally finally
{ {

View file

@ -65,7 +65,8 @@ public class AvvProvider extends AbstractEfaProvider
return String.format(NEARBY_STATION_URI, ParserUtils.urlEncode(stationId)); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("bhftafel.exe/dn"); 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=\"([^\"]*)\""); 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); final Matcher mMessage = P_DEPARTURES_MESSAGES.matcher(page);
if (mMessage.find()) if (mMessage.find())
@ -470,9 +470,9 @@ public final class BahnProvider implements NetworkProvider
final String text = mMessage.group(2); final String text = mMessage.group(2);
if (code.equals("H730")) // Your input is not valid 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 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); throw new IllegalArgumentException("unknown error " + code + ", " + text);
} }
@ -512,11 +512,11 @@ public final class BahnProvider implements NetworkProvider
} }
else 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}"); 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)); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -65,7 +65,8 @@ public class GvhProvider extends AbstractEfaProvider
return null; return null;
} }
public String departuresQueryUri(String stationId, int maxDepartures) @Override
protected String departuresQueryUri(String stationId, int maxDepartures)
{ {
final StringBuilder uri = new StringBuilder(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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)); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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)); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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); 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 DATE_FORMAT = new SimpleDateFormat("dd.MM.yy");
final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); 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 + "(?:<td class=\"center sepline top\">\n(" + ParserUtils.P_PLATFORM + ").*?)?" // position
, Pattern.DOTALL); , Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri) throws IOException public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{ {
// scrape page // scrape page
final CharSequence page = ParserUtils.scrape(uri); final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
// parse page // parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page); final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -135,11 +135,11 @@ public class NasaProvider extends AbstractHafasProvider
{ {
// messages // messages
if (mHeadCoarse.group(3) != null) 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) 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) 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)); final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches()) if (mHeadFine.matches())
@ -202,20 +202,20 @@ public class NasaProvider extends AbstractHafasProvider
} }
else 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 else
{ {
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri); throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
} }
} }
else 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; GetConnectionDetailsResult getConnectionDetails(String connectionUri) throws IOException;
/** /**
* Construct an Uri for getting departures * Get departures at a given station, probably live
* *
* @param stationId * @param stationId
* id of the station * id of the station
* @param maxDepartures * @param maxDepartures
* maximum number of departures to get or {@code 0} * 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 * @return result object containing the departures
* @throws IOException * @throws IOException
*/ */
QueryDeparturesResult queryDepartures(String queryUri) throws IOException; QueryDeparturesResult queryDepartures(String stationId, int maxDepartures) throws IOException;
/** /**
* Get colors of line * Get colors of line

View file

@ -491,7 +491,7 @@ public class OebbProvider extends AbstractHafasProvider
throw new UnsupportedOperationException(); 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 DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
final Date now = new Date(); 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)"); 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 // 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); final Matcher mError = P_DEPARTURES_ERROR.matcher(page);
if (mError.find()) if (mError.find())
{ {
if (mError.group(1) != null) if (mError.group(1) != null)
return new QueryDeparturesResult(uri, Status.SERVICE_DOWN); return new QueryDeparturesResult(Status.SERVICE_DOWN, Integer.parseInt(stationId));
} }
try try
@ -537,7 +537,7 @@ public class OebbProvider extends AbstractHafasProvider
final int locationId = head.optInt("stationEvaId", -1); final int locationId = head.optInt("stationEvaId", -1);
// final boolean rt = head.optBoolean("rtInfo"); // final boolean rt = head.optBoolean("rtInfo");
if (locationId == -1) 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); 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) 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; 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 DATE_FORMAT = new SimpleDateFormat("dd.MM.yy");
final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); 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) + "(?:<img src=\".+?\" alt=\"\" />\n<b>[^<]*</b>\n<br />\n)*" // (messages)
, Pattern.DOTALL); , 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 // parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page); final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -483,11 +483,11 @@ public class RmvProvider extends AbstractHafasProvider
{ {
// messages // messages
if (mHeadCoarse.group(4) != null) 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) 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)); final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches()) if (mHeadFine.matches())
@ -541,20 +541,20 @@ public class RmvProvider extends AbstractHafasProvider
} }
else 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 else
{ {
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri); throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
} }
} }
else 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("bhftafel.exe/dox"); uri.append(API_BASE).append("bhftafel.exe/dox");
@ -407,9 +407,9 @@ public class SbbProvider extends AbstractHafasProvider
+ ".*?" // + ".*?" //
, Pattern.DOTALL); , 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 // parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page); final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -417,11 +417,11 @@ public class SbbProvider extends AbstractHafasProvider
{ {
// messages // messages
if (mHeadCoarse.group(3) != null) 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) 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) 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 String head = mHeadCoarse.group(1) + mHeadCoarse.group(4);
final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(head); final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(head);
@ -469,20 +469,20 @@ public class SbbProvider extends AbstractHafasProvider
} }
else 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 else
{ {
throw new IllegalArgumentException("cannot parse '" + head + "' on " + uri); throw new IllegalArgumentException("cannot parse '" + head + "' on " + stationId);
} }
} }
else 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); 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(); final StringBuilder uri = new StringBuilder();
uri.append("http://hari.b-rail.be/hari3/webserver1/bin/stboard.exe/dox"); 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 + "(?:<span class=\"delay\">([+-]?\\d+|Ausfall)</span>\r\n)?" // delay
, Pattern.DOTALL); , 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 // parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page); final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -109,9 +109,9 @@ public class SncbProvider extends AbstractHafasProvider
{ {
// messages // messages
if (mHeadCoarse.group(3) != null) 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) 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)); final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches()) if (mHeadFine.matches())
@ -150,20 +150,20 @@ public class SncbProvider extends AbstractHafasProvider
} }
else 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 else
{ {
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri); throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
} }
} }
else 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)); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -72,7 +72,8 @@ public class TflProvider extends AbstractEfaProvider
return null; 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); uri.append(API_BASE).append("XSLT_DM_REQUEST");

View file

@ -277,8 +277,8 @@ public final class VbbProvider implements NetworkProvider
if (departureTime.after(arrivalTime)) if (departureTime.after(arrivalTime))
arrivalTime = ParserUtils.addDays(arrivalTime, 1); arrivalTime = ParserUtils.addDays(arrivalTime, 1);
final String line = normalizeLine(ParserUtils.resolveEntities(mConFine.group(4))); final String line = normalizeLine(ParserUtils.resolveEntities(mConFine.group(4)));
final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime, line, final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime,
line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null); line, line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -424,8 +424,8 @@ public final class VbbProvider implements NetworkProvider
} }
if (firstDepartureTime != null && lastArrivalTime != null) if (firstDepartureTime != null && lastArrivalTime != null)
return new GetConnectionDetailsResult(currentDate, new Connection(AbstractHafasProvider.extractConnectionId(uri), uri, firstDepartureTime, return new GetConnectionDetailsResult(currentDate, new Connection(AbstractHafasProvider.extractConnectionId(uri), uri,
lastArrivalTime, null, null, firstDepartureId, firstDeparture, lastArrivalId, lastArrival, parts)); firstDepartureTime, lastArrivalTime, null, null, firstDepartureId, firstDeparture, lastArrivalId, lastArrival, parts));
else else
return new GetConnectionDetailsResult(currentDate, null); 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_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&"; 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; final boolean live = stationId.length() == 6;
@ -469,19 +469,13 @@ public final class VbbProvider implements NetworkProvider
+ "\\s*(.*?)\\s*</a>.*?" // destination + "\\s*(.*?)\\s*</a>.*?" // destination
, Pattern.DOTALL); , Pattern.DOTALL);
private static final Pattern P_DEPARTURES_SERVICE_DOWN = Pattern.compile("Wartungsarbeiten"); 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 CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
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));
if (P_DEPARTURES_SERVICE_DOWN.matcher(page).find()) 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 // parse page
final Matcher mHead = P_DEPARTURES_HEAD.matcher(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); final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page);
while (mDepCoarse.find()) 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)); final Matcher mDepFine = (live ? P_DEPARTURES_LIVE_FINE : P_DEPARTURES_PLAN_FINE).matcher(mDepCoarse.group(1));
if (mDepFine.matches()) if (mDepFine.matches())
{ {
@ -533,15 +527,15 @@ public final class VbbProvider implements NetworkProvider
} }
else 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 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); 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 DATE_FORMAT = new SimpleDateFormat("dd.MM.yy");
final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); 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 + "(?:<td class=\"center sepline top\">\n(" + ParserUtils.P_PLATFORM + ").*?)?" // position
, Pattern.DOTALL); , Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri) throws IOException public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures) throws IOException
{ {
// scrape page // scrape page
final CharSequence page = ParserUtils.scrape(uri); final CharSequence page = ParserUtils.scrape(departuresQueryUri(stationId, maxDepartures));
// parse page // parse page
final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page); final Matcher mHeadCoarse = P_DEPARTURES_HEAD_COARSE.matcher(page);
@ -135,11 +135,11 @@ public class VgsProvider extends AbstractHafasProvider
{ {
// messages // messages
if (mHeadCoarse.group(3) != null) 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) 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) 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)); final Matcher mHeadFine = P_DEPARTURES_HEAD_FINE.matcher(mHeadCoarse.group(1));
if (mHeadFine.matches()) if (mHeadFine.matches())
@ -202,20 +202,20 @@ public class VgsProvider extends AbstractHafasProvider
} }
else 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 else
{ {
throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + uri); throw new IllegalArgumentException("cannot parse '" + mHeadCoarse.group(1) + "' on " + stationId);
} }
} }
else 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); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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)); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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); 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(); final StringBuilder uri = new StringBuilder();
uri.append(API_BASE).append("XSLT_DM_REQUEST"); 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 OK, NO_INFO, INVALID_STATION, SERVICE_DOWN
} }
public final String uri;
public final Status status; public final Status status;
public final int locationId; public final int locationId;
public final String location; public final String location;
public final List<Departure> departures; 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.status = Status.OK;
this.locationId = locationId; this.locationId = locationId;
this.location = location; this.location = location;
this.departures = departures; 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.status = status;
this.locationId = 0; this.locationId = locationId;
this.location = null; this.location = null;
this.departures = null; this.departures = null;
} }

View file

@ -40,7 +40,7 @@ public class AvvProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -40,7 +40,7 @@ public class BahnProviderLiveTest
@Test @Test
public void departures() throws Exception 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); System.out.println(queryDepartures.departures);
} }

View file

@ -40,7 +40,7 @@ public class BvbProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -72,7 +72,7 @@ public class LinzProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result);
} }

View file

@ -40,7 +40,7 @@ public class NasaProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -66,7 +66,7 @@ public class SbbProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.status + " " + result.departures.size() + " " + result.departures);
} }

View file

@ -40,7 +40,7 @@ public class SvvProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -40,7 +40,7 @@ public class TflProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -40,7 +40,7 @@ public class VgsProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -83,7 +83,7 @@ public class VrnProviderLiveTest
@Test @Test
public void departures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -75,7 +75,7 @@ public class VrrProviderLiveTest
@Test @Test
public void departures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }

View file

@ -40,7 +40,7 @@ public class VvoProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.status + " " + result.departures.size() + " " + result.departures);
} }

View file

@ -40,7 +40,7 @@ public class VvsProviderLiveTest
@Test @Test
public void queryDepartures() throws Exception 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); System.out.println(result.departures.size() + " " + result.departures);
} }