From f505d2eda8eb1f604cbff945e555a846914d817c Mon Sep 17 00:00:00 2001 From: "andreas.schildbach" Date: Tue, 20 Jul 2010 14:47:13 +0000 Subject: [PATCH] locationId in QueryDeparturesResult git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@17 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- src/de/schildbach/pte/BahnProvider.java | 8 +++++++- src/de/schildbach/pte/MvvProvider.java | 8 +++++++- src/de/schildbach/pte/QueryDeparturesResult.java | 9 ++++++--- src/de/schildbach/pte/RmvProvider.java | 8 +++++++- src/de/schildbach/pte/VbbProvider.java | 8 +++++++- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index eebaceee..36cc4438 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -413,10 +413,16 @@ public final class BahnProvider implements NetworkProvider private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("
(.+?)
", Pattern.DOTALL); private static final Pattern P_DEPARTURES_FINE = Pattern.compile(".*?(.*?).*?" + ">>\\n?\\s*(.+?)\\s*\\n?
\\n?(\\d+:\\d+).*?", Pattern.DOTALL); + private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)"); public QueryDeparturesResult queryDepartures(final String uri) 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)); // parse page final Matcher mHead = P_DEPARTURES_HEAD.matcher(page); @@ -443,7 +449,7 @@ public final class BahnProvider implements NetworkProvider } } - return new QueryDeparturesResult(uri, location, currentTime, departures); + return new QueryDeparturesResult(uri, stationId, location, currentTime, departures); } else { diff --git a/src/de/schildbach/pte/MvvProvider.java b/src/de/schildbach/pte/MvvProvider.java index 845dd05a..410878ea 100644 --- a/src/de/schildbach/pte/MvvProvider.java +++ b/src/de/schildbach/pte/MvvProvider.java @@ -474,11 +474,17 @@ public class MvvProvider implements NetworkProvider + "\\s*([^<]*?)[\\xa0\\s]*(?:.*?)?" // line + "
\\s*(.*?)\\s*
.*?" // destination + ".*?", Pattern.DOTALL); + private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("nameInfo_dm=(\\d+)"); public QueryDeparturesResult queryDepartures(final String uri) 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 Matcher mHead = P_DEPARTURES_HEAD.matcher(page); if (mHead.matches()) { @@ -514,7 +520,7 @@ public class MvvProvider implements NetworkProvider } } - return new QueryDeparturesResult(uri, location, currentTime, departures); + return new QueryDeparturesResult(uri, stationId, location, currentTime, departures); } else { diff --git a/src/de/schildbach/pte/QueryDeparturesResult.java b/src/de/schildbach/pte/QueryDeparturesResult.java index 57541ac4..df7e8d87 100644 --- a/src/de/schildbach/pte/QueryDeparturesResult.java +++ b/src/de/schildbach/pte/QueryDeparturesResult.java @@ -25,17 +25,20 @@ import java.util.List; */ public final class QueryDeparturesResult { - public static final QueryDeparturesResult NO_INFO = new QueryDeparturesResult(null, null, null, null); - public static final QueryDeparturesResult SERVICE_DOWN = new QueryDeparturesResult(null, null, null, null); + public static final QueryDeparturesResult NO_INFO = new QueryDeparturesResult(null, 0, null, null, null); + public static final QueryDeparturesResult SERVICE_DOWN = new QueryDeparturesResult(null, 0, null, null, null); public final String uri; + public final int locationId; public final String location; public final Date currentTime; public final List departures; - public QueryDeparturesResult(final String uri, final String location, final Date currentTime, final List departures) + public QueryDeparturesResult(final String uri, final int locationId, final String location, final Date currentTime, + final List departures) { this.uri = uri; + this.locationId = locationId; this.location = location; this.currentTime = currentTime; this.departures = departures; diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java index 533cdc3a..890b285e 100644 --- a/src/de/schildbach/pte/RmvProvider.java +++ b/src/de/schildbach/pte/RmvProvider.java @@ -387,11 +387,17 @@ public class RmvProvider implements NetworkProvider + "
.*?" // + "(\\d+:\\d+).*?" // time + "(?:Gl\\. (\\d+)
.*?)?", Pattern.DOTALL); + private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)"); public QueryDeparturesResult queryDepartures(final String uri) 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)); + // parse page final Matcher mHead = P_DEPARTURES_HEAD.matcher(page); if (mHead.matches()) @@ -417,7 +423,7 @@ public class RmvProvider implements NetworkProvider } } - return new QueryDeparturesResult(uri, location, currentTime, departures); + return new QueryDeparturesResult(uri, stationId, location, currentTime, departures); } else { diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java index 5e00531d..b42b1339 100644 --- a/src/de/schildbach/pte/VbbProvider.java +++ b/src/de/schildbach/pte/VbbProvider.java @@ -401,11 +401,17 @@ public final class VbbProvider implements NetworkProvider + "\\s*\\s*(.*?)[\\s\\*]*.*?\\s*" // + "\\s*\\s*(.*?)\\s*
\\s*", 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 { 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)); + if (P_DEPARTURES_SERVICE_DOWN.matcher(page).find()) return QueryDeparturesResult.SERVICE_DOWN; @@ -435,7 +441,7 @@ public final class VbbProvider implements NetworkProvider } } - return new QueryDeparturesResult(uri, location, currentTime, departures); + return new QueryDeparturesResult(uri, stationId, location, currentTime, departures); } else {