query history remembers whole Locations

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@250 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach 2010-10-09 09:09:45 +00:00
parent e282106c00
commit 9c7150956a
9 changed files with 53 additions and 45 deletions

View file

@ -102,8 +102,11 @@ public abstract class AbstractEfaProvider implements NetworkProvider
private Location processOdvNameElem(final XmlPullParser pp) throws XmlPullParserException, IOException private Location processOdvNameElem(final XmlPullParser pp) throws XmlPullParserException, IOException
{ {
final String type = pp.getAttributeValue(null, "anyType"); final String anyType = pp.getAttributeValue(null, "anyType");
int id = Integer.parseInt(pp.getAttributeValue(null, "id")); final String idStr = pp.getAttributeValue(null, "id");
int id = 0;
if (idStr != null)
id = Integer.parseInt(idStr);
if (id < 0) if (id < 0)
id = 0; id = 0;
int lat = 0, lon = 0; int lat = 0, lon = 0;
@ -113,7 +116,11 @@ public abstract class AbstractEfaProvider implements NetworkProvider
lon = Integer.parseInt(pp.getAttributeValue(null, "x")); lon = Integer.parseInt(pp.getAttributeValue(null, "x"));
} }
final String name = normalizeLocationName(pp.nextText()); final String name = normalizeLocationName(pp.nextText());
return new Location(type(type), id, lat, lon, name);
LocationType type = LocationType.ADDRESS;
if (anyType != null)
type = type(anyType);
return new Location(type, id, lat, lon, name);
} }
private Location processItdOdvAssignedStop(final XmlPullParser pp) private Location processItdOdvAssignedStop(final XmlPullParser pp)
@ -654,7 +661,7 @@ public abstract class AbstractEfaProvider implements NetworkProvider
// parse odv name elements // parse odv name elements
List<Location> ambiguousFrom = null, ambiguousTo = null, ambiguousVia = null; List<Location> ambiguousFrom = null, ambiguousTo = null, ambiguousVia = null;
String from = null, to = null; Location from = null, via = null, to = null;
XmlPullUtil.jumpToStartTag(pp, null, "itdOdv"); XmlPullUtil.jumpToStartTag(pp, null, "itdOdv");
if (!"origin".equals(pp.getAttributeValue(null, "usage"))) if (!"origin".equals(pp.getAttributeValue(null, "usage")))
@ -670,7 +677,7 @@ public abstract class AbstractEfaProvider implements NetworkProvider
else if ("identified".equals(originState)) else if ("identified".equals(originState))
{ {
XmlPullUtil.nextStartTagInsideTree(pp, null, "odvNameElem"); XmlPullUtil.nextStartTagInsideTree(pp, null, "odvNameElem");
from = pp.nextText(); from = processOdvNameElem(pp);
} }
XmlPullUtil.jumpToStartTag(pp, null, "itdOdv"); XmlPullUtil.jumpToStartTag(pp, null, "itdOdv");
@ -687,7 +694,7 @@ public abstract class AbstractEfaProvider implements NetworkProvider
else if ("identified".equals(destinationState)) else if ("identified".equals(destinationState))
{ {
XmlPullUtil.nextStartTagInsideTree(pp, null, "odvNameElem"); XmlPullUtil.nextStartTagInsideTree(pp, null, "odvNameElem");
to = pp.nextText(); to = processOdvNameElem(pp);
} }
XmlPullUtil.jumpToStartTag(pp, null, "itdOdv"); XmlPullUtil.jumpToStartTag(pp, null, "itdOdv");
@ -703,7 +710,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider
} }
else if ("identified".equals(viaState)) else if ("identified".equals(viaState))
{ {
// TODO parse identified name/id XmlPullUtil.nextStartTagInsideTree(pp, null, "odvNameElem");
via = processOdvNameElem(pp);
} }
if (ambiguousFrom != null || ambiguousTo != null || ambiguousVia != null) if (ambiguousFrom != null || ambiguousTo != null || ambiguousVia != null)
@ -779,7 +787,7 @@ public abstract class AbstractEfaProvider implements NetworkProvider
XmlPullUtil.skipRestOfTree(pp); XmlPullUtil.skipRestOfTree(pp);
} }
return new QueryConnectionsResult(uri, from, to, null, commandLink(sessionId, "tripPrev"), commandLink(sessionId, "tripNext"), return new QueryConnectionsResult(uri, from, via, to, commandLink(sessionId, "tripPrev"), commandLink(sessionId, "tripNext"),
connections); connections);
} }
else else

View file

@ -253,8 +253,8 @@ public final class BahnProvider implements NetworkProvider
final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page); final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page);
if (mHead.matches()) if (mHead.matches())
{ {
final String from = ParserUtils.resolveEntities(mHead.group(1)); final Location from = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(1)));
final String to = ParserUtils.resolveEntities(mHead.group(2)); final Location to = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(2)));
final Date currentDate = ParserUtils.parseDate(mHead.group(3)); final Date currentDate = ParserUtils.parseDate(mHead.group(3));
final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null; final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null;
final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null; final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null;
@ -285,7 +285,7 @@ public final class BahnProvider implements NetworkProvider
else else
line = null; line = null;
final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, line, final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, line,
line != null ? LINES.get(line.charAt(0)) : null, 0, from, 0, to, null); line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -294,7 +294,7 @@ public final class BahnProvider implements NetworkProvider
} }
} }
return new QueryConnectionsResult(uri, from, to, currentDate, linkEarlier, linkLater, connections); return new QueryConnectionsResult(uri, from, null, to, linkEarlier, linkLater, connections);
} }
else else
{ {

View file

@ -352,9 +352,9 @@ public class MvvProvider extends AbstractEfaProvider
final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page); final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page);
if (mHead.matches()) if (mHead.matches())
{ {
final String from = ParserUtils.resolveEntities(mHead.group(1)); final Location from = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(1)));
final String to = ParserUtils.resolveEntities(mHead.group(2)); final Location to = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(2)));
// final String via = ParserUtils.resolveEntities(mHead.group(3)); final Location via = mHead.group(3) != null ? new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(3))) : null;
final Date currentDate = parseDate(mHead.group(4), mHead.group(5), mHead.group(6)); final Date currentDate = parseDate(mHead.group(4), mHead.group(5), mHead.group(6));
final String linkEarlier = mHead.group(7) != null ? API_BASE + ParserUtils.resolveEntities(mHead.group(7)) : null; final String linkEarlier = mHead.group(7) != null ? API_BASE + ParserUtils.resolveEntities(mHead.group(7)) : null;
final String linkLater = mHead.group(8) != null ? API_BASE + ParserUtils.resolveEntities(mHead.group(8)) : null; final String linkLater = mHead.group(8) != null ? API_BASE + ParserUtils.resolveEntities(mHead.group(8)) : null;
@ -388,7 +388,7 @@ public class MvvProvider extends AbstractEfaProvider
if (departureTime.after(arrivalTime)) if (departureTime.after(arrivalTime))
arrivalTime = ParserUtils.addDays(arrivalTime, 1); arrivalTime = ParserUtils.addDays(arrivalTime, 1);
final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, null, null, 0, final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, null, null, 0,
from, 0, to, null); from.name, 0, to.name, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -399,7 +399,7 @@ public class MvvProvider extends AbstractEfaProvider
calendar.add(Calendar.MINUTE, min); calendar.add(Calendar.MINUTE, min);
final Date arrivalTime = calendar.getTime(); final Date arrivalTime = calendar.getTime();
final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, null, null, 0, final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, null, null, 0,
from, 0, to, null); from.name, 0, to.name, null);
connections.add(connection); connections.add(connection);
} }
} }
@ -409,7 +409,7 @@ public class MvvProvider extends AbstractEfaProvider
} }
} }
return new QueryConnectionsResult(uri, from, to, currentDate, linkEarlier, linkLater, connections); return new QueryConnectionsResult(uri, from, via, to, linkEarlier, linkLater, connections);
} }
else else
{ {

View file

@ -370,8 +370,8 @@ public class OebbProvider extends AbstractHafasProvider
final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page); final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page);
if (mHead.matches()) if (mHead.matches())
{ {
final String from = ParserUtils.resolveEntities(mHead.group(1)); final Location from = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(1)));
final String to = ParserUtils.resolveEntities(mHead.group(2)); final Location to = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(2)));
final Date currentDate = ParserUtils.parseDate(mHead.group(3)); final Date currentDate = ParserUtils.parseDate(mHead.group(3));
final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null; final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null;
final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null; final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null;
@ -396,8 +396,8 @@ public class OebbProvider extends AbstractHafasProvider
: overviewDepartureDate, ParserUtils.parseTime(mConFine.group(4))); : overviewDepartureDate, ParserUtils.parseTime(mConFine.group(4)));
final String link = allDetailsUri; // TODO use print link? final String link = allDetailsUri; // TODO use print link?
final Connection connection = new Connection(id, link, overviewDepartureTime, overviewArrivalTime, null, null, 0, from, 0, to, final Connection connection = new Connection(id, link, overviewDepartureTime, overviewArrivalTime, null, null, 0, from.name, 0,
new ArrayList<Connection.Part>(1)); to.name, new ArrayList<Connection.Part>(1));
connections.add(connection); connections.add(connection);
final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(details); final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(details);
@ -471,7 +471,7 @@ public class OebbProvider extends AbstractHafasProvider
} }
return new QueryConnectionsResult(allDetailsUri, from, to, currentDate, linkEarlier, linkLater, connections); return new QueryConnectionsResult(allDetailsUri, from, null, to, linkEarlier, linkLater, connections);
} }
else else
{ {

View file

@ -251,8 +251,8 @@ public class RmvProvider extends AbstractHafasProvider
final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page); final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page);
if (mHead.matches()) if (mHead.matches())
{ {
final String from = ParserUtils.resolveEntities(mHead.group(1)); final Location from = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(1)));
final String to = ParserUtils.resolveEntities(mHead.group(2)); final Location to = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(2)));
final Date currentDate = ParserUtils.parseDate(mHead.group(3)); final Date currentDate = ParserUtils.parseDate(mHead.group(3));
final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null; final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null;
final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null; final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null;
@ -283,7 +283,7 @@ public class RmvProvider extends AbstractHafasProvider
else else
line = null; line = null;
final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, line, final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, line,
line != null ? lineColors(line) : null, 0, from, 0, to, null); line != null ? lineColors(line) : null, 0, from.name, 0, to.name, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -292,7 +292,7 @@ public class RmvProvider extends AbstractHafasProvider
} }
} }
return new QueryConnectionsResult(uri, from, to, currentDate, linkEarlier, linkLater, connections); return new QueryConnectionsResult(uri, from, null, to, linkEarlier, linkLater, connections);
} }
else else
{ {

View file

@ -258,9 +258,8 @@ public class SbbProvider extends AbstractHafasProvider
final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page); final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page);
if (mHead.matches()) if (mHead.matches())
{ {
final String from = ParserUtils.resolveEntities(mHead.group(1)); final Location from = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(1)));
final Date currentDate = ParserUtils.parseDate(mHead.group(2)); final Location to = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(3)));
final String to = ParserUtils.resolveEntities(mHead.group(3));
final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null; final String linkEarlier = mHead.group(4) != null ? ParserUtils.resolveEntities(mHead.group(4)) : null;
final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null; final String linkLater = mHead.group(5) != null ? ParserUtils.resolveEntities(mHead.group(5)) : null;
final List<Connection> connections = new ArrayList<Connection>(); final List<Connection> connections = new ArrayList<Connection>();
@ -287,7 +286,7 @@ public class SbbProvider extends AbstractHafasProvider
.parseTime(mConFine.group(5))); .parseTime(mConFine.group(5)));
final String link = uri + "#" + id; // TODO use print link? final String link = uri + "#" + id; // TODO use print link?
final Connection connection = new Connection(id, link, departureTime, arrivalTime, null, null, 0, from, 0, to, final Connection connection = new Connection(id, link, departureTime, arrivalTime, null, null, 0, from.name, 0, to.name,
new ArrayList<Connection.Part>(1)); new ArrayList<Connection.Part>(1));
connections.add(connection); connections.add(connection);
} }
@ -368,7 +367,7 @@ public class SbbProvider extends AbstractHafasProvider
} }
} }
return new QueryConnectionsResult(uri, from, to, currentDate, linkEarlier, linkLater, connections); return new QueryConnectionsResult(uri, from, null, to, linkEarlier, linkLater, connections);
} }
else else
{ {

View file

@ -266,8 +266,8 @@ public final class VbbProvider implements NetworkProvider
final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page); final Matcher mHead = P_CONNECTIONS_HEAD.matcher(page);
if (mHead.matches()) if (mHead.matches())
{ {
final String from = ParserUtils.resolveEntities(mHead.group(1)); final Location from = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(1)));
final String to = ParserUtils.resolveEntities(mHead.group(2)); final Location to = new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mHead.group(2)));
final Date currentDate = ParserUtils.parseDate(mHead.group(3)); final Date currentDate = ParserUtils.parseDate(mHead.group(3));
final String linkEarlier = mHead.group(4) != null ? BVG_BASE_URL + ParserUtils.resolveEntities(mHead.group(4)) : null; final String linkEarlier = mHead.group(4) != null ? BVG_BASE_URL + ParserUtils.resolveEntities(mHead.group(4)) : null;
final String linkLater = mHead.group(5) != null ? BVG_BASE_URL + ParserUtils.resolveEntities(mHead.group(5)) : null; final String linkLater = mHead.group(5) != null ? BVG_BASE_URL + ParserUtils.resolveEntities(mHead.group(5)) : null;
@ -294,7 +294,7 @@ public final class VbbProvider implements NetworkProvider
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(ParserUtils.extractId(link), link, departureTime, arrivalTime, line, final Connection connection = new Connection(ParserUtils.extractId(link), link, departureTime, arrivalTime, line,
line != null ? LINES.get(line.charAt(0)) : null, 0, from, 0, to, null); line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -303,7 +303,7 @@ public final class VbbProvider implements NetworkProvider
} }
} }
return new QueryConnectionsResult(uri, from, to, currentDate, linkEarlier, linkLater, connections); return new QueryConnectionsResult(uri, from, null, to, linkEarlier, linkLater, connections);
} }
else else
{ {

View file

@ -16,10 +16,12 @@
*/ */
package de.schildbach.pte.dto; package de.schildbach.pte.dto;
import java.io.Serializable;
/** /**
* @author Andreas Schildbach * @author Andreas Schildbach
*/ */
public final class Location public final class Location implements Serializable
{ {
public final LocationType type; public final LocationType type;
public final int id; public final int id;

View file

@ -18,7 +18,6 @@
package de.schildbach.pte.dto; package de.schildbach.pte.dto;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -42,21 +41,21 @@ public final class QueryConnectionsResult implements Serializable
public final List<Location> ambiguousTo; public final List<Location> ambiguousTo;
public final String queryUri; public final String queryUri;
public final String from; public final Location from;
public final String to; public final Location via;
public final Date currentDate; public final Location to;
public final String linkEarlier; public final String linkEarlier;
public final String linkLater; public final String linkLater;
public final List<Connection> connections; public final List<Connection> connections;
public QueryConnectionsResult(final String queryUri, final String from, final String to, final Date currentDate, final String linkEarlier, public QueryConnectionsResult(final String queryUri, final Location from, final Location via, final Location to, final String linkEarlier,
final String linkLater, final List<Connection> connections) final String linkLater, final List<Connection> connections)
{ {
this.status = Status.OK; this.status = Status.OK;
this.queryUri = queryUri; this.queryUri = queryUri;
this.from = from; this.from = from;
this.via = via;
this.to = to; this.to = to;
this.currentDate = currentDate;
this.linkEarlier = linkEarlier; this.linkEarlier = linkEarlier;
this.linkLater = linkLater; this.linkLater = linkLater;
this.connections = connections; this.connections = connections;
@ -75,8 +74,8 @@ public final class QueryConnectionsResult implements Serializable
this.queryUri = null; this.queryUri = null;
this.from = null; this.from = null;
this.via = null;
this.to = null; this.to = null;
this.currentDate = null;
this.linkEarlier = null; this.linkEarlier = null;
this.linkLater = null; this.linkLater = null;
this.connections = null; this.connections = null;
@ -91,8 +90,8 @@ public final class QueryConnectionsResult implements Serializable
this.ambiguousTo = null; this.ambiguousTo = null;
this.queryUri = null; this.queryUri = null;
this.from = null; this.from = null;
this.via = null;
this.to = null; this.to = null;
this.currentDate = null;
this.linkEarlier = null; this.linkEarlier = null;
this.linkLater = null; this.linkLater = null;
this.connections = null; this.connections = null;