diff --git a/src/de/schildbach/pte/AbstractEfaProvider.java b/src/de/schildbach/pte/AbstractEfaProvider.java index c69b094b..4ebac77b 100644 --- a/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/src/de/schildbach/pte/AbstractEfaProvider.java @@ -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 { diff --git a/src/de/schildbach/pte/AvvProvider.java b/src/de/schildbach/pte/AvvProvider.java index ed808755..cff924d9 100644 --- a/src/de/schildbach/pte/AvvProvider.java +++ b/src/de/schildbach/pte/AvvProvider.java @@ -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"); diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index 173eb603..0310f05f 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -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("\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); } } diff --git a/src/de/schildbach/pte/NetworkProvider.java b/src/de/schildbach/pte/NetworkProvider.java index dbb0ee3e..589d2149 100644 --- a/src/de/schildbach/pte/NetworkProvider.java +++ b/src/de/schildbach/pte/NetworkProvider.java @@ -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 diff --git a/src/de/schildbach/pte/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java index 0c65d036..558312de 100644 --- a/src/de/schildbach/pte/OebbProvider.java +++ b/src/de/schildbach/pte/OebbProvider.java @@ -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 departures = new ArrayList(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); } } diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java index 3c12c59e..35fcc399 100644 --- a/src/de/schildbach/pte/RmvProvider.java +++ b/src/de/schildbach/pte/RmvProvider.java @@ -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 + "(?:\"\"\n[^<]*\n
\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); } } diff --git a/src/de/schildbach/pte/SbbProvider.java b/src/de/schildbach/pte/SbbProvider.java index 850abe5f..e981d22e 100644 --- a/src/de/schildbach/pte/SbbProvider.java +++ b/src/de/schildbach/pte/SbbProvider.java @@ -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); } } diff --git a/src/de/schildbach/pte/SncbProvider.java b/src/de/schildbach/pte/SncbProvider.java index 74d51398..1f919c99 100644 --- a/src/de/schildbach/pte/SncbProvider.java +++ b/src/de/schildbach/pte/SncbProvider.java @@ -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 + "(?:([+-]?\\d+|Ausfall)\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); } } diff --git a/src/de/schildbach/pte/SvvProvider.java b/src/de/schildbach/pte/SvvProvider.java index e1c44355..68045cae 100644 --- a/src/de/schildbach/pte/SvvProvider.java +++ b/src/de/schildbach/pte/SvvProvider.java @@ -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"); diff --git a/src/de/schildbach/pte/TflProvider.java b/src/de/schildbach/pte/TflProvider.java index bdb0b5a4..0a20af90 100644 --- a/src/de/schildbach/pte/TflProvider.java +++ b/src/de/schildbach/pte/TflProvider.java @@ -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"); diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java index 2d29e1d5..35f1bbf2 100644 --- a/src/de/schildbach/pte/VbbProvider.java +++ b/src/de/schildbach/pte/VbbProvider.java @@ -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*.*?" // 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)); } } diff --git a/src/de/schildbach/pte/VgsProvider.java b/src/de/schildbach/pte/VgsProvider.java index 6cd6a3ee..571aab9e 100644 --- a/src/de/schildbach/pte/VgsProvider.java +++ b/src/de/schildbach/pte/VgsProvider.java @@ -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 + "(?:\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); } } diff --git a/src/de/schildbach/pte/VrnProvider.java b/src/de/schildbach/pte/VrnProvider.java index 0630adee..7b95ac68 100644 --- a/src/de/schildbach/pte/VrnProvider.java +++ b/src/de/schildbach/pte/VrnProvider.java @@ -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"); diff --git a/src/de/schildbach/pte/VrrProvider.java b/src/de/schildbach/pte/VrrProvider.java index 3393f735..44173454 100644 --- a/src/de/schildbach/pte/VrrProvider.java +++ b/src/de/schildbach/pte/VrrProvider.java @@ -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"); diff --git a/src/de/schildbach/pte/VvoProvider.java b/src/de/schildbach/pte/VvoProvider.java index 90b0eba1..23783913 100644 --- a/src/de/schildbach/pte/VvoProvider.java +++ b/src/de/schildbach/pte/VvoProvider.java @@ -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"); diff --git a/src/de/schildbach/pte/VvsProvider.java b/src/de/schildbach/pte/VvsProvider.java index f1367ed9..6614c835 100644 --- a/src/de/schildbach/pte/VvsProvider.java +++ b/src/de/schildbach/pte/VvsProvider.java @@ -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"); diff --git a/src/de/schildbach/pte/dto/QueryDeparturesResult.java b/src/de/schildbach/pte/dto/QueryDeparturesResult.java index 59b97082..f2b687d7 100644 --- a/src/de/schildbach/pte/dto/QueryDeparturesResult.java +++ b/src/de/schildbach/pte/dto/QueryDeparturesResult.java @@ -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 departures; - public QueryDeparturesResult(final String uri, final int locationId, final String location, final List departures) + public QueryDeparturesResult(final int locationId, final String location, final List 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; } diff --git a/test/de/schildbach/pte/live/AvvProviderLiveTest.java b/test/de/schildbach/pte/live/AvvProviderLiveTest.java index a9b6d945..3a1f0d96 100644 --- a/test/de/schildbach/pte/live/AvvProviderLiveTest.java +++ b/test/de/schildbach/pte/live/AvvProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/BahnProviderLiveTest.java b/test/de/schildbach/pte/live/BahnProviderLiveTest.java index d61a728d..7dba4ebe 100644 --- a/test/de/schildbach/pte/live/BahnProviderLiveTest.java +++ b/test/de/schildbach/pte/live/BahnProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/BvbProviderLiveTest.java b/test/de/schildbach/pte/live/BvbProviderLiveTest.java index bcc9a880..0dc552e4 100644 --- a/test/de/schildbach/pte/live/BvbProviderLiveTest.java +++ b/test/de/schildbach/pte/live/BvbProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/LinzProviderLiveTest.java b/test/de/schildbach/pte/live/LinzProviderLiveTest.java index 061a60eb..e2234e28 100644 --- a/test/de/schildbach/pte/live/LinzProviderLiveTest.java +++ b/test/de/schildbach/pte/live/LinzProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/NasaProviderLiveTest.java b/test/de/schildbach/pte/live/NasaProviderLiveTest.java index 97d0358f..22b24d35 100644 --- a/test/de/schildbach/pte/live/NasaProviderLiveTest.java +++ b/test/de/schildbach/pte/live/NasaProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/SbbProviderLiveTest.java b/test/de/schildbach/pte/live/SbbProviderLiveTest.java index 5aec87e7..9ade30d1 100644 --- a/test/de/schildbach/pte/live/SbbProviderLiveTest.java +++ b/test/de/schildbach/pte/live/SbbProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/SvvProviderLiveTest.java b/test/de/schildbach/pte/live/SvvProviderLiveTest.java index ef6d44e7..ab7f3c51 100644 --- a/test/de/schildbach/pte/live/SvvProviderLiveTest.java +++ b/test/de/schildbach/pte/live/SvvProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/TflProviderLiveTest.java b/test/de/schildbach/pte/live/TflProviderLiveTest.java index ea56a4fc..c3a869e8 100644 --- a/test/de/schildbach/pte/live/TflProviderLiveTest.java +++ b/test/de/schildbach/pte/live/TflProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/VgsProviderLiveTest.java b/test/de/schildbach/pte/live/VgsProviderLiveTest.java index da86fa38..907a0907 100644 --- a/test/de/schildbach/pte/live/VgsProviderLiveTest.java +++ b/test/de/schildbach/pte/live/VgsProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/VrnProviderLiveTest.java b/test/de/schildbach/pte/live/VrnProviderLiveTest.java index e84374c0..f1ce499f 100644 --- a/test/de/schildbach/pte/live/VrnProviderLiveTest.java +++ b/test/de/schildbach/pte/live/VrnProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/VrrProviderLiveTest.java b/test/de/schildbach/pte/live/VrrProviderLiveTest.java index 9a37418a..f01c8260 100644 --- a/test/de/schildbach/pte/live/VrrProviderLiveTest.java +++ b/test/de/schildbach/pte/live/VrrProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/VvoProviderLiveTest.java b/test/de/schildbach/pte/live/VvoProviderLiveTest.java index 29625a72..3bbcf4b5 100644 --- a/test/de/schildbach/pte/live/VvoProviderLiveTest.java +++ b/test/de/schildbach/pte/live/VvoProviderLiveTest.java @@ -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); } diff --git a/test/de/schildbach/pte/live/VvsProviderLiveTest.java b/test/de/schildbach/pte/live/VvsProviderLiveTest.java index e512ae87..69cede48 100644 --- a/test/de/schildbach/pte/live/VvsProviderLiveTest.java +++ b/test/de/schildbach/pte/live/VvsProviderLiveTest.java @@ -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); }