introduce query uri in QueryDeparturesResult and

remove maxDepartures parameter from queryDepartures()

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@11 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach 2010-07-15 15:46:08 +00:00
parent 0388466320
commit c92b4f73e8
6 changed files with 22 additions and 22 deletions

View file

@ -414,7 +414,7 @@ public final class BahnProvider implements NetworkProvider
private static final Pattern P_DEPARTURES_FINE = Pattern.compile(".*?<span class=\"bold\">(.*?)</span>.*?" private static final Pattern P_DEPARTURES_FINE = Pattern.compile(".*?<span class=\"bold\">(.*?)</span>.*?"
+ "&gt;&gt;\\n?\\s*(.+?)\\s*\\n?<br />\\n?<span class=\"bold\">(\\d+:\\d+)</span>.*?", Pattern.DOTALL); + "&gt;&gt;\\n?\\s*(.+?)\\s*\\n?<br />\\n?<span class=\"bold\">(\\d+:\\d+)</span>.*?", Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri, final int maxDepartures) throws IOException public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{ {
final CharSequence page = ParserUtils.scrape(uri); final CharSequence page = ParserUtils.scrape(uri);
@ -424,11 +424,11 @@ public final class BahnProvider implements NetworkProvider
{ {
final String location = ParserUtils.resolveEntities(mHead.group(1)); final String location = ParserUtils.resolveEntities(mHead.group(1));
final Date currentTime = ParserUtils.joinDateTime(ParserUtils.parseDate(mHead.group(3)), ParserUtils.parseTime(mHead.group(2))); final Date currentTime = ParserUtils.joinDateTime(ParserUtils.parseDate(mHead.group(3)), ParserUtils.parseTime(mHead.group(2)));
final List<Departure> departures = new ArrayList<Departure>(maxDepartures); final List<Departure> departures = new ArrayList<Departure>(8);
// choose matcher // choose matcher
final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page); final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page);
while (mDepCoarse.find() && (maxDepartures == 0 || departures.size() < maxDepartures)) while (mDepCoarse.find())
{ {
final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1)); final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1));
if (mDepFine.matches()) if (mDepFine.matches())
@ -443,7 +443,7 @@ public final class BahnProvider implements NetworkProvider
} }
} }
return new QueryDeparturesResult(location, currentTime, departures); return new QueryDeparturesResult(uri, location, currentTime, departures);
} }
else else
{ {

View file

@ -473,7 +473,7 @@ public class MvvProvider implements NetworkProvider
+ "<br />\\s*(.*?)\\s*<br />.*?" // destination + "<br />\\s*(.*?)\\s*<br />.*?" // destination
+ "</td>.*?", Pattern.DOTALL); + "</td>.*?", Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri, final int maxDepartures) throws IOException public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{ {
final CharSequence page = ParserUtils.scrape(uri); final CharSequence page = ParserUtils.scrape(uri);
@ -482,12 +482,12 @@ public class MvvProvider implements NetworkProvider
{ {
final String location = ParserUtils.resolveEntities(mHead.group(1)); final String location = ParserUtils.resolveEntities(mHead.group(1));
final Date currentTime = parseDate(mHead.group(2), mHead.group(3), mHead.group(4)); final Date currentTime = parseDate(mHead.group(2), mHead.group(3), mHead.group(4));
final List<Departure> departures = new ArrayList<Departure>(maxDepartures); final List<Departure> departures = new ArrayList<Departure>(8);
final Calendar calendar = new GregorianCalendar(); final Calendar calendar = new GregorianCalendar();
final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page); final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page);
while (mDepCoarse.find() && (maxDepartures == 0 || departures.size() < maxDepartures)) while (mDepCoarse.find())
{ {
final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1)); final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1));
if (mDepFine.matches()) if (mDepFine.matches())
@ -512,7 +512,7 @@ public class MvvProvider implements NetworkProvider
} }
} }
return new QueryDeparturesResult(location, currentTime, departures); return new QueryDeparturesResult(uri, location, currentTime, departures);
} }
else else
{ {

View file

@ -125,10 +125,8 @@ public interface NetworkProvider
* *
* @param queryUri * @param queryUri
* uri constructed by {@link NetworkProvider#departuresQueryUri} * uri constructed by {@link NetworkProvider#departuresQueryUri}
* @param maxDepartures
* maximum number of departures to return or {@code 0}
* @return result object containing the departures * @return result object containing the departures
* @throws IOException * @throws IOException
*/ */
QueryDeparturesResult queryDepartures(String queryUri, int maxDepartures) throws IOException; QueryDeparturesResult queryDepartures(String queryUri) throws IOException;
} }

View file

@ -25,15 +25,17 @@ import java.util.List;
*/ */
public final class QueryDeparturesResult public final class QueryDeparturesResult
{ {
public static final QueryDeparturesResult NO_INFO = new QueryDeparturesResult(null, null, null); public static final QueryDeparturesResult NO_INFO = new QueryDeparturesResult(null, null, null, null);
public static final QueryDeparturesResult SERVICE_DOWN = new QueryDeparturesResult(null, null, null); public static final QueryDeparturesResult SERVICE_DOWN = new QueryDeparturesResult(null, null, null, null);
public final String uri;
public final String location; public final String location;
public final Date currentTime; public final Date currentTime;
public final List<Departure> departures; public final List<Departure> departures;
public QueryDeparturesResult(final String location, final Date currentTime, final List<Departure> departures) public QueryDeparturesResult(final String uri, final String location, final Date currentTime, final List<Departure> departures)
{ {
this.uri = uri;
this.location = location; this.location = location;
this.currentTime = currentTime; this.currentTime = currentTime;
this.departures = departures; this.departures = departures;

View file

@ -388,7 +388,7 @@ public class RmvProvider implements NetworkProvider
+ "<b>(\\d+:\\d+)</b>.*?" // time + "<b>(\\d+:\\d+)</b>.*?" // time
+ "(?:Gl\\. (\\d+)<br />.*?)?", Pattern.DOTALL); + "(?:Gl\\. (\\d+)<br />.*?)?", Pattern.DOTALL);
public QueryDeparturesResult queryDepartures(final String uri, final int maxDepartures) throws IOException public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{ {
final CharSequence page = ParserUtils.scrape(uri); final CharSequence page = ParserUtils.scrape(uri);
@ -398,11 +398,11 @@ public class RmvProvider implements NetworkProvider
{ {
final String location = ParserUtils.resolveEntities(mHead.group(1)); final String location = ParserUtils.resolveEntities(mHead.group(1));
final Date currentTime = ParserUtils.joinDateTime(ParserUtils.parseDate(mHead.group(3)), ParserUtils.parseTime(mHead.group(2))); final Date currentTime = ParserUtils.joinDateTime(ParserUtils.parseDate(mHead.group(3)), ParserUtils.parseTime(mHead.group(2)));
final List<Departure> departures = new ArrayList<Departure>(maxDepartures); final List<Departure> departures = new ArrayList<Departure>(8);
// choose matcher // choose matcher
final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page); final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page);
while (mDepCoarse.find() && (maxDepartures == 0 || departures.size() < maxDepartures)) while (mDepCoarse.find())
{ {
final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1)); final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1));
if (mDepFine.matches()) if (mDepFine.matches())
@ -417,7 +417,7 @@ public class RmvProvider implements NetworkProvider
} }
} }
return new QueryDeparturesResult(location, currentTime, departures); return new QueryDeparturesResult(uri, location, currentTime, departures);
} }
else else
{ {

View file

@ -377,7 +377,7 @@ public final class VbbProvider implements NetworkProvider
+ "<td>\\s*<a.*?>\\s*(.*?)\\s*</a>\\s*</td>", Pattern.DOTALL); + "<td>\\s*<a.*?>\\s*(.*?)\\s*</a>\\s*</td>", Pattern.DOTALL);
private static final Pattern P_DEPARTURES_SERVICE_DOWN = Pattern.compile("Wartungsarbeiten"); private static final Pattern P_DEPARTURES_SERVICE_DOWN = Pattern.compile("Wartungsarbeiten");
public QueryDeparturesResult queryDepartures(final String uri, final int maxDepartures) throws IOException public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{ {
final CharSequence page = ParserUtils.scrape(uri); final CharSequence page = ParserUtils.scrape(uri);
@ -390,11 +390,11 @@ public final class VbbProvider implements NetworkProvider
{ {
final String location = ParserUtils.resolveEntities(mHead.group(1)); final String location = ParserUtils.resolveEntities(mHead.group(1));
final Date currentTime = parseDate(mHead.group(2)); final Date currentTime = parseDate(mHead.group(2));
final List<Departure> departures = new ArrayList<Departure>(maxDepartures); final List<Departure> departures = new ArrayList<Departure>(8);
// choose matcher // choose matcher
final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page); final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(page);
while (mDepCoarse.find() && (maxDepartures == 0 || departures.size() < maxDepartures)) while (mDepCoarse.find())
{ {
final boolean live = uri.contains("IstAbfahrtzeiten"); final boolean live = uri.contains("IstAbfahrtzeiten");
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));
@ -410,7 +410,7 @@ public final class VbbProvider implements NetworkProvider
} }
} }
return new QueryDeparturesResult(location, currentTime, departures); return new QueryDeparturesResult(uri, location, currentTime, departures);
} }
else else
{ {