finalized migration to Location objects

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@511 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach@gmail.com 2011-02-28 11:37:36 +00:00
parent 943f1c6016
commit 23a10a4de2
7 changed files with 87 additions and 127 deletions

View file

@ -1263,9 +1263,9 @@ public abstract class AbstractEfaProvider implements NetworkProvider
XmlPullUtil.enter(pp, "itdPartialRouteList"); XmlPullUtil.enter(pp, "itdPartialRouteList");
final List<Connection.Part> parts = new LinkedList<Connection.Part>(); final List<Connection.Part> parts = new LinkedList<Connection.Part>();
String firstDeparture = null; Location firstDeparture = null;
Date firstDepartureTime = null; Date firstDepartureTime = null;
String lastArrival = null; Location lastArrival = null;
Date lastArrivalTime = null; Date lastArrivalTime = null;
while (XmlPullUtil.test(pp, "itdPartialRoute")) while (XmlPullUtil.test(pp, "itdPartialRoute"))
@ -1276,7 +1276,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider
if (!"departure".equals(pp.getAttributeValue(null, "usage"))) if (!"departure".equals(pp.getAttributeValue(null, "usage")))
throw new IllegalStateException(); throw new IllegalStateException();
final int departureId = Integer.parseInt(pp.getAttributeValue(null, "stopID")); final int departureId = Integer.parseInt(pp.getAttributeValue(null, "stopID"));
final String departure = normalizeLocationName(pp.getAttributeValue(null, "name")); final String departureName = normalizeLocationName(pp.getAttributeValue(null, "name"));
final Location departure = new Location(LocationType.STATION, departureId, null, departureName);
if (firstDeparture == null) if (firstDeparture == null)
firstDeparture = departure; firstDeparture = departure;
final String departurePosition = normalizePlatform(pp.getAttributeValue(null, "platform"), final String departurePosition = normalizePlatform(pp.getAttributeValue(null, "platform"),
@ -1294,7 +1295,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider
if (!"arrival".equals(pp.getAttributeValue(null, "usage"))) if (!"arrival".equals(pp.getAttributeValue(null, "usage")))
throw new IllegalStateException(); throw new IllegalStateException();
final int arrivalId = Integer.parseInt(pp.getAttributeValue(null, "stopID")); final int arrivalId = Integer.parseInt(pp.getAttributeValue(null, "stopID"));
final String arrival = normalizeLocationName(pp.getAttributeValue(null, "name")); final String arrivalName = normalizeLocationName(pp.getAttributeValue(null, "name"));
final Location arrival = new Location(LocationType.STATION, arrivalId, null, arrivalName);
lastArrival = arrival; lastArrival = arrival;
final String arrivalPosition = normalizePlatform(pp.getAttributeValue(null, "platform"), final String arrivalPosition = normalizePlatform(pp.getAttributeValue(null, "platform"),
pp.getAttributeValue(null, "platformName")); pp.getAttributeValue(null, "platformName"));
@ -1327,12 +1329,11 @@ public abstract class AbstractEfaProvider implements NetworkProvider
final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1); final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
if (path != null && lastFootway.path != null) if (path != null && lastFootway.path != null)
path.addAll(0, lastFootway.path); path.addAll(0, lastFootway.path);
parts.add(new Connection.Footway(lastFootway.min + min, lastFootway.departureId, lastFootway.departure, arrivalId, parts.add(new Connection.Footway(lastFootway.min + min, lastFootway.departure, arrival, path));
arrival, path));
} }
else else
{ {
parts.add(new Connection.Footway(min, departureId, departure, arrivalId, arrival, path)); parts.add(new Connection.Footway(min, departure, arrival, path));
} }
} }
else if ("gesicherter Anschluss".equals(productName) || "nicht umsteigen".equals(productName)) // type97 else if ("gesicherter Anschluss".equals(productName) || "nicht umsteigen".equals(productName)) // type97
@ -1401,8 +1402,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider
if (XmlPullUtil.test(pp, "itdPathCoordinates")) if (XmlPullUtil.test(pp, "itdPathCoordinates"))
path = processItdPathCoordinates(pp); path = processItdPathCoordinates(pp);
parts.add(new Connection.Trip(line, destination, departureTime.getTime(), departurePosition, departureId, departure, parts.add(new Connection.Trip(line, destination, departureTime.getTime(), departurePosition, departure, arrivalTime
arrivalTime.getTime(), arrivalPosition, arrivalId, arrival, intermediateStops, path)); .getTime(), arrivalPosition, arrival, intermediateStops, path));
} }
XmlPullUtil.exit(pp, "itdPartialRoute"); XmlPullUtil.exit(pp, "itdPartialRoute");
@ -1447,8 +1448,8 @@ public abstract class AbstractEfaProvider implements NetworkProvider
} }
XmlPullUtil.exit(pp, "itdFare"); XmlPullUtil.exit(pp, "itdFare");
} }
connections.add(new Connection(id, uri, firstDepartureTime, lastArrivalTime, 0, firstDeparture, 0, lastArrival, parts, fares connections.add(new Connection(id, uri, firstDepartureTime, lastArrivalTime, firstDeparture, lastArrival, parts,
.isEmpty() ? null : fares)); fares.isEmpty() ? null : fares));
XmlPullUtil.exit(pp, "itdRoute"); XmlPullUtil.exit(pp, "itdRoute");
} }

View file

@ -447,21 +447,19 @@ public abstract class AbstractHafasProvider implements NetworkProvider
if (min == 0 || line != null) if (min == 0 || line != null)
{ {
parts.add(new Connection.Trip(line, destination, departureTime, departurePos, sectionDeparture.id, sectionDeparture.name, parts.add(new Connection.Trip(line, destination, departureTime, departurePos, sectionDeparture, arrivalTime, arrivalPos,
arrivalTime, arrivalPos, sectionArrival.id, sectionArrival.name, null, null)); sectionArrival, null, null));
} }
else else
{ {
if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway) if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway)
{ {
final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1); final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
parts.add(new Connection.Footway(lastFootway.min + min, lastFootway.departureId, lastFootway.departure, parts.add(new Connection.Footway(lastFootway.min + min, lastFootway.departure, sectionArrival, null));
sectionArrival.id, sectionArrival.name, null));
} }
else else
{ {
parts.add(new Connection.Footway(min, sectionDeparture.id, sectionDeparture.name, sectionArrival.id, sectionArrival.name, parts.add(new Connection.Footway(min, sectionDeparture, sectionArrival, null));
null));
} }
} }
@ -474,8 +472,7 @@ public abstract class AbstractHafasProvider implements NetworkProvider
XmlPullUtil.exit(pp); XmlPullUtil.exit(pp);
connections.add(new Connection(id, null, firstDepartureTime, lastArrivalTime, departure.id, departure.name, arrival.id, arrival.name, connections.add(new Connection(id, null, firstDepartureTime, lastArrivalTime, departure, arrival, parts, null));
parts, null));
} }
XmlPullUtil.exit(pp); XmlPullUtil.exit(pp);

View file

@ -266,7 +266,7 @@ public final class BahnProvider extends AbstractHafasProvider
if (departureTime.after(arrivalTime)) if (departureTime.after(arrivalTime))
arrivalTime = ParserUtils.addDays(arrivalTime, 1); arrivalTime = ParserUtils.addDays(arrivalTime, 1);
final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime, final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime,
0, from.name, 0, to.name, null, null); from, to, null, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -325,9 +325,9 @@ public final class BahnProvider extends AbstractHafasProvider
final List<Connection.Part> parts = new ArrayList<Connection.Part>(4); final List<Connection.Part> parts = new ArrayList<Connection.Part>(4);
Date firstDepartureTime = null; Date firstDepartureTime = null;
String firstDeparture = null; Location firstDeparture = null;
Date lastArrivalTime = null; Date lastArrivalTime = null;
String lastArrival = null; Location lastArrival = null;
Connection.Trip lastTrip = null; Connection.Trip lastTrip = null;
final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(mHead.group(1)); final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(mHead.group(1));
@ -343,7 +343,7 @@ public final class BahnProvider extends AbstractHafasProvider
final Matcher mDetFine = P_CONNECTION_DETAILS_FINE.matcher(section); final Matcher mDetFine = P_CONNECTION_DETAILS_FINE.matcher(section);
if (mDetFine.matches()) if (mDetFine.matches())
{ {
final String departure = ParserUtils.resolveEntities(mDetFine.group(1)); final Location departure = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(1)));
if (departure != null && firstDeparture == null) if (departure != null && firstDeparture == null)
firstDeparture = departure; firstDeparture = departure;
@ -357,7 +357,7 @@ public final class BahnProvider extends AbstractHafasProvider
final Date departureDate = ParserUtils.parseDate(mDetFine.group(5)); final Date departureDate = ParserUtils.parseDate(mDetFine.group(5));
final String arrival = ParserUtils.resolveEntities(mDetFine.group(6)); final Location arrival = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(6)));
final Date arrivalTime = ParserUtils.parseTime(mDetFine.group(7)); final Date arrivalTime = ParserUtils.parseTime(mDetFine.group(7));
@ -367,8 +367,8 @@ public final class BahnProvider extends AbstractHafasProvider
final Date departureDateTime = ParserUtils.joinDateTime(departureDate, departureTime); final Date departureDateTime = ParserUtils.joinDateTime(departureDate, departureTime);
final Date arrivalDateTime = ParserUtils.joinDateTime(arrivalDate, arrivalTime); final Date arrivalDateTime = ParserUtils.joinDateTime(arrivalDate, arrivalTime);
lastTrip = new Connection.Trip(line, null, departureDateTime, departurePosition, 0, departure, arrivalDateTime, lastTrip = new Connection.Trip(line, null, departureDateTime, departurePosition, departure, arrivalDateTime,
arrivalPosition, 0, arrival, null, null); arrivalPosition, arrival, null, null);
parts.add(lastTrip); parts.add(lastTrip);
if (firstDepartureTime == null) if (firstDepartureTime == null)
@ -381,25 +381,25 @@ public final class BahnProvider extends AbstractHafasProvider
{ {
final String min = mDetFine.group(10); final String min = mDetFine.group(10);
final String arrival = ParserUtils.resolveEntities(mDetFine.group(11)); final Location arrival = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(11)));
if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway) if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway)
{ {
final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1); final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
parts.add(new Connection.Footway(lastFootway.min + Integer.parseInt(min), 0, lastFootway.departure, 0, arrival, null)); parts.add(new Connection.Footway(lastFootway.min + Integer.parseInt(min), lastFootway.departure, arrival, null));
} }
else else
{ {
parts.add(new Connection.Footway(Integer.parseInt(min), 0, departure, 0, arrival, null)); parts.add(new Connection.Footway(Integer.parseInt(min), departure, arrival, null));
} }
lastArrival = arrival; lastArrival = arrival;
} }
else else
{ {
final String arrival = ParserUtils.resolveEntities(mDetFine.group(12)); final Location arrival = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(12)));
parts.add(new Connection.Footway(0, 0, departure, 0, arrival, null)); parts.add(new Connection.Footway(0, departure, arrival, null));
} }
} }
else else
@ -414,7 +414,7 @@ public final class BahnProvider extends AbstractHafasProvider
throw new IllegalStateException("could not parse all parts of:\n" + mHead.group(1) + "\n" + parts); throw new IllegalStateException("could not parse all parts of:\n" + mHead.group(1) + "\n" + parts);
return new GetConnectionDetailsResult(new Date(), new Connection(AbstractHafasProvider.extractConnectionId(uri), uri, firstDepartureTime, return new GetConnectionDetailsResult(new Date(), new Connection(AbstractHafasProvider.extractConnectionId(uri), uri, firstDepartureTime,
lastArrivalTime, 0, firstDeparture, 0, lastArrival, parts, null)); lastArrivalTime, firstDeparture, lastArrival, parts, null));
} }
else else
{ {

View file

@ -421,7 +421,7 @@ public final class BvgProvider extends AbstractHafasProvider
if (departureTime.after(arrivalTime)) if (departureTime.after(arrivalTime))
arrivalTime = ParserUtils.addDays(arrivalTime, 1); arrivalTime = ParserUtils.addDays(arrivalTime, 1);
final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime, final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime,
0, from.name, 0, to.name, null, null); from, to, null, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -471,11 +471,9 @@ public final class BvgProvider extends AbstractHafasProvider
final List<Connection.Part> parts = new ArrayList<Connection.Part>(4); final List<Connection.Part> parts = new ArrayList<Connection.Part>(4);
Date firstDepartureTime = null; Date firstDepartureTime = null;
String firstDeparture = null; Location firstDeparture = null;
int firstDepartureId = 0;
Date lastArrivalTime = null; Date lastArrivalTime = null;
String lastArrival = null; Location lastArrival = null;
int lastArrivalId = 0;
final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(page); final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(page);
while (mDetCoarse.find()) while (mDetCoarse.find())
@ -483,23 +481,20 @@ public final class BvgProvider extends AbstractHafasProvider
final Matcher mDetFine = P_CONNECTION_DETAILS_FINE.matcher(mDetCoarse.group(1)); final Matcher mDetFine = P_CONNECTION_DETAILS_FINE.matcher(mDetCoarse.group(1));
if (mDetFine.matches()) if (mDetFine.matches())
{ {
int departureId = 0; final String departureName = ParserUtils.resolveEntities(mDetFine.group(2));
String departure = ParserUtils.resolveEntities(mDetFine.group(2)); final Location departure;
if (departure == null) if (departureName != null)
{ {
departure = lastArrival; final int departureId = Integer.parseInt(mDetFine.group(1));
departureId = lastArrivalId; departure = new Location(departureId != 0 ? LocationType.STATION : LocationType.ANY, departureId, null, departureName);
} }
else else
{ {
departureId = Integer.parseInt(mDetFine.group(1)); departure = lastArrival;
} }
if (departure != null && firstDeparture == null) if (departure != null && firstDeparture == null)
{
firstDeparture = departure; firstDeparture = departure;
firstDepartureId = departureId;
}
final String min = mDetFine.group(11); final String min = mDetFine.group(11);
if (min == null) if (min == null)
@ -522,43 +517,42 @@ public final class BvgProvider extends AbstractHafasProvider
final int arrivalId = Integer.parseInt(mDetFine.group(9)); final int arrivalId = Integer.parseInt(mDetFine.group(9));
final String arrival = ParserUtils.resolveEntities(mDetFine.group(10)); final Location arrival = new Location(LocationType.STATION, arrivalId, null, ParserUtils.resolveEntities(mDetFine.group(10)));
parts.add(new Connection.Trip(line, destination, departureTime, departurePosition, departureId, departure, arrivalTime, parts.add(new Connection.Trip(line, destination, departureTime, departurePosition, departure, arrivalTime, arrivalPosition,
arrivalPosition, arrivalId, arrival, null, null)); arrival, null, null));
if (firstDepartureTime == null) if (firstDepartureTime == null)
firstDepartureTime = departureTime; firstDepartureTime = departureTime;
lastArrival = arrival; lastArrival = arrival;
lastArrivalId = arrivalId;
lastArrivalTime = arrivalTime; lastArrivalTime = arrivalTime;
} }
else else
{ {
final int arrivalId = mDetFine.group(12) != null ? Integer.parseInt(mDetFine.group(12)) : 0; final int arrivalId = mDetFine.group(12) != null ? Integer.parseInt(mDetFine.group(12)) : 0;
final String arrival = ParserUtils.resolveEntities(ParserUtils.selectNotNull(mDetFine.group(13), mDetFine.group(16),
mDetFine.group(17)));
final int arrivalLon = mDetFine.group(14) != null ? Integer.parseInt(mDetFine.group(14)) : 0; final int arrivalLon = mDetFine.group(14) != null ? Integer.parseInt(mDetFine.group(14)) : 0;
final int arrivalLat = mDetFine.group(15) != null ? Integer.parseInt(mDetFine.group(15)) : 0; final int arrivalLat = mDetFine.group(15) != null ? Integer.parseInt(mDetFine.group(15)) : 0;
final String arrivalName = ParserUtils.resolveEntities(ParserUtils.selectNotNull(mDetFine.group(13), mDetFine.group(16),
mDetFine.group(17)));
final Location arrival = new Location(arrivalId != 0 ? LocationType.STATION : LocationType.ANY, arrivalId, arrivalLat,
arrivalLon, null, arrivalName);
if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway) if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway)
{ {
final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1); final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
parts.add(new Connection.Footway(lastFootway.min + Integer.parseInt(min), lastFootway.departureId, lastFootway.departure, parts.add(new Connection.Footway(lastFootway.min + Integer.parseInt(min), lastFootway.departure, arrival, null));
arrivalId, arrival, arrivalLat, arrivalLon, null));
} }
else else
{ {
parts.add(new Connection.Footway(Integer.parseInt(min), departureId, departure, arrivalId, arrival, arrivalLat, parts.add(new Connection.Footway(Integer.parseInt(min), departure, arrival, null));
arrivalLon, null));
} }
lastArrival = arrival; lastArrival = arrival;
lastArrivalId = arrivalId;
} }
} }
else else
@ -569,7 +563,7 @@ public final class BvgProvider extends AbstractHafasProvider
if (firstDepartureTime != null && lastArrivalTime != null) if (firstDepartureTime != null && lastArrivalTime != null)
return new GetConnectionDetailsResult(currentDate, new Connection(AbstractHafasProvider.extractConnectionId(uri), uri, return new GetConnectionDetailsResult(currentDate, new Connection(AbstractHafasProvider.extractConnectionId(uri), uri,
firstDepartureTime, lastArrivalTime, firstDepartureId, firstDeparture, lastArrivalId, lastArrival, parts, null)); firstDepartureTime, lastArrivalTime, firstDeparture, lastArrival, parts, null));
else else
return new GetConnectionDetailsResult(currentDate, null); return new GetConnectionDetailsResult(currentDate, null);
} }

View file

@ -410,7 +410,7 @@ 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, 0, from.name, 0, to.name, final Connection connection = new Connection(id, link, overviewDepartureTime, overviewArrivalTime, from, to,
new ArrayList<Connection.Part>(1), null); new ArrayList<Connection.Part>(1), null);
connections.add(connection); connections.add(connection);
@ -424,7 +424,8 @@ public class OebbProvider extends AbstractHafasProvider
{ {
final int departureId = mDetFine.group(1) != null ? Integer.parseInt(mDetFine.group(1)) : 0; final int departureId = mDetFine.group(1) != null ? Integer.parseInt(mDetFine.group(1)) : 0;
final String departure = ParserUtils.resolveEntities(mDetFine.group(2)); final Location departure = new Location(departureId != 0 ? LocationType.STATION : LocationType.ANY, departureId, null,
ParserUtils.resolveEntities(mDetFine.group(2)));
Date detailsDepartureDate = mDetFine.group(3) != null ? ParserUtils.parseDate(mDetFine.group(3)) : lastDate; Date detailsDepartureDate = mDetFine.group(3) != null ? ParserUtils.parseDate(mDetFine.group(3)) : lastDate;
if (detailsDepartureDate != null) if (detailsDepartureDate != null)
@ -437,7 +438,8 @@ public class OebbProvider extends AbstractHafasProvider
final int arrivalId = mDetFine.group(8) != null ? Integer.parseInt(mDetFine.group(8)) : 0; final int arrivalId = mDetFine.group(8) != null ? Integer.parseInt(mDetFine.group(8)) : 0;
final String arrival = ParserUtils.resolveEntities(mDetFine.group(9)); final Location arrival = new Location(arrivalId != 0 ? LocationType.STATION : LocationType.ANY, arrivalId, null,
ParserUtils.resolveEntities(mDetFine.group(9)));
Date detailsArrivalDate = mDetFine.group(10) != null ? ParserUtils.parseDate(mDetFine.group(10)) : lastDate; Date detailsArrivalDate = mDetFine.group(10) != null ? ParserUtils.parseDate(mDetFine.group(10)) : lastDate;
if (detailsArrivalDate != null) if (detailsArrivalDate != null)
@ -464,14 +466,14 @@ public class OebbProvider extends AbstractHafasProvider
ParserUtils.resolveEntities(mDetFine.group(13))) : null; ParserUtils.resolveEntities(mDetFine.group(13))) : null;
final Connection.Trip trip = new Connection.Trip(line, destination, detailsDepartureDateTime, departurePosition, final Connection.Trip trip = new Connection.Trip(line, destination, detailsDepartureDateTime, departurePosition,
departureId, departure, detailsArrivalDateTime, arrivalPosition, arrivalId, arrival, null, null); departure, detailsArrivalDateTime, arrivalPosition, arrival, null, null);
connection.parts.add(trip); connection.parts.add(trip);
} }
else else
{ {
final int min = (int) (detailsArrivalDateTime.getTime() - detailsDepartureDateTime.getTime()) / 1000 / 60; final int min = (int) (detailsArrivalDateTime.getTime() - detailsDepartureDateTime.getTime()) / 1000 / 60;
final Connection.Footway footway = new Connection.Footway(min, departureId, departure, arrivalId, arrival, null); final Connection.Footway footway = new Connection.Footway(min, departure, arrival, null);
connection.parts.add(footway); connection.parts.add(footway);
} }
} }

View file

@ -285,8 +285,7 @@ public class RmvProvider extends AbstractHafasProvider
Date arrivalTime = ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mConFine.group(3))); Date arrivalTime = ParserUtils.joinDateTime(currentDate, ParserUtils.parseTime(mConFine.group(3)));
if (departureTime.after(arrivalTime)) if (departureTime.after(arrivalTime))
arrivalTime = ParserUtils.addDays(arrivalTime, 1); arrivalTime = ParserUtils.addDays(arrivalTime, 1);
final Connection connection = new Connection(extractConnectionId(link), link, departureTime, arrivalTime, 0, from.name, 0, final Connection connection = new Connection(extractConnectionId(link), link, departureTime, arrivalTime, from, to, null, null);
to.name, null, null);
connections.add(connection); connections.add(connection);
} }
else else
@ -334,7 +333,7 @@ public class RmvProvider extends AbstractHafasProvider
final Matcher mHead = P_CONNECTION_DETAILS_HEAD.matcher(page); final Matcher mHead = P_CONNECTION_DETAILS_HEAD.matcher(page);
if (mHead.matches()) if (mHead.matches())
{ {
final String firstDeparture = ParserUtils.resolveEntities(mHead.group(1)); final Location firstDeparture = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mHead.group(1)));
final Date currentDate = ParserUtils.parseDate(mHead.group(2)); final Date currentDate = ParserUtils.parseDate(mHead.group(2));
final List<Connection.Part> parts = new ArrayList<Connection.Part>(4); final List<Connection.Part> parts = new ArrayList<Connection.Part>(4);
@ -342,7 +341,7 @@ public class RmvProvider extends AbstractHafasProvider
Date firstDepartureTime = null; Date firstDepartureTime = null;
Date lastArrivalTime = null; Date lastArrivalTime = null;
String lastArrival = null; Location lastArrival = null;
Connection.Trip lastTrip = null; Connection.Trip lastTrip = null;
final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(page); final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(page);
@ -351,9 +350,9 @@ public class RmvProvider extends AbstractHafasProvider
final Matcher mDetFine = P_CONNECTION_DETAILS_FINE.matcher(mDetCoarse.group(1)); final Matcher mDetFine = P_CONNECTION_DETAILS_FINE.matcher(mDetCoarse.group(1));
if (mDetFine.matches()) if (mDetFine.matches())
{ {
final String departure = lastArrival != null ? lastArrival : firstDeparture; final Location departure = lastArrival != null ? lastArrival : firstDeparture;
final String arrival = ParserUtils.resolveEntities(mDetFine.group(8)); final Location arrival = new Location(LocationType.ANY, 0, null, ParserUtils.resolveEntities(mDetFine.group(8)));
lastArrival = arrival; lastArrival = arrival;
final String min = mDetFine.group(7); final String min = mDetFine.group(7);
@ -371,8 +370,8 @@ public class RmvProvider extends AbstractHafasProvider
final String arrivalPosition = ParserUtils.resolveEntities(mDetFine.group(6)); final String arrivalPosition = ParserUtils.resolveEntities(mDetFine.group(6));
lastTrip = new Connection.Trip(line, destination, departureTime, departurePosition, 0, departure, arrivalTime, lastTrip = new Connection.Trip(line, destination, departureTime, departurePosition, departure, arrivalTime, arrivalPosition,
arrivalPosition, 0, arrival, null, null); arrival, null, null);
parts.add(lastTrip); parts.add(lastTrip);
if (firstDepartureTime == null) if (firstDepartureTime == null)
@ -385,11 +384,11 @@ public class RmvProvider extends AbstractHafasProvider
if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway) if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway)
{ {
final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1); final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
parts.add(new Connection.Footway(lastFootway.min + Integer.parseInt(min), 0, lastFootway.departure, 0, arrival, null)); parts.add(new Connection.Footway(lastFootway.min + Integer.parseInt(min), lastFootway.departure, arrival, null));
} }
else else
{ {
parts.add(new Connection.Footway(Integer.parseInt(min), 0, departure, 0, arrival, null)); parts.add(new Connection.Footway(Integer.parseInt(min), departure, arrival, null));
} }
} }
} }
@ -399,8 +398,8 @@ public class RmvProvider extends AbstractHafasProvider
} }
} }
return new GetConnectionDetailsResult(currentDate, new Connection(extractConnectionId(uri), uri, firstDepartureTime, lastArrivalTime, 0, return new GetConnectionDetailsResult(currentDate, new Connection(extractConnectionId(uri), uri, firstDepartureTime, lastArrivalTime,
firstDeparture, 0, lastArrival, parts, null)); firstDeparture, lastArrival, parts, null));
} }
else else
{ {

View file

@ -31,23 +31,19 @@ public final class Connection implements Serializable
public final String link; public final String link;
public final Date departureTime; public final Date departureTime;
public final Date arrivalTime; public final Date arrivalTime;
public final int fromId; public final Location from;
public final String from; public final Location to;
public final int toId;
public final String to;
public final List<Part> parts; public final List<Part> parts;
public final List<Fare> fares; public final List<Fare> fares;
public Connection(final String id, final String link, final Date departureTime, final Date arrivalTime, final int fromId, final String from, public Connection(final String id, final String link, final Date departureTime, final Date arrivalTime, final Location from, final Location to,
final int toId, final String to, final List<Part> parts, final List<Fare> fares) final List<Part> parts, final List<Fare> fares)
{ {
this.id = id; this.id = id;
this.link = link; this.link = link;
this.departureTime = departureTime; this.departureTime = departureTime;
this.arrivalTime = arrivalTime; this.arrivalTime = arrivalTime;
this.fromId = fromId;
this.from = from; this.from = from;
this.toId = toId;
this.to = to; this.to = to;
this.parts = parts; this.parts = parts;
this.fares = fares; this.fares = fares;
@ -79,10 +75,14 @@ public final class Connection implements Serializable
public static class Part implements Serializable public static class Part implements Serializable
{ {
public final Location departure;
public final Location arrival;
public final List<Point> path; public final List<Point> path;
public Part(final List<Point> path) public Part(final Location departure, final Location arrival, final List<Point> path)
{ {
this.departure = departure;
this.arrival = arrival;
this.path = path; this.path = path;
} }
} }
@ -93,30 +93,22 @@ public final class Connection implements Serializable
public final Location destination; public final Location destination;
public final Date departureTime; public final Date departureTime;
public final String departurePosition; public final String departurePosition;
public final int departureId;
public final String departure;
public final Date arrivalTime; public final Date arrivalTime;
public final String arrivalPosition; public final String arrivalPosition;
public final int arrivalId;
public final String arrival;
public final List<Stop> intermediateStops; public final List<Stop> intermediateStops;
public Trip(final String line, final Location destination, final Date departureTime, final String departurePosition, final int departureId, public Trip(final String line, final Location destination, final Date departureTime, final String departurePosition,
final String departure, final Date arrivalTime, final String arrivalPosition, final int arrivalId, final String arrival, final Location departure, final Date arrivalTime, final String arrivalPosition, final Location arrival,
final List<Stop> intermediateStops, final List<Point> path) final List<Stop> intermediateStops, final List<Point> path)
{ {
super(path); super(departure, arrival, path);
this.line = line; this.line = line;
this.destination = destination; this.destination = destination;
this.departureTime = departureTime; this.departureTime = departureTime;
this.departurePosition = departurePosition; this.departurePosition = departurePosition;
this.departureId = departureId;
this.departure = departure;
this.arrivalTime = arrivalTime; this.arrivalTime = arrivalTime;
this.arrivalPosition = arrivalPosition; this.arrivalPosition = arrivalPosition;
this.arrivalId = arrivalId;
this.arrival = arrival;
this.intermediateStops = intermediateStops; this.intermediateStops = intermediateStops;
} }
@ -128,10 +120,10 @@ public final class Connection implements Serializable
builder.append(","); builder.append(",");
builder.append("destination=").append(destination).append("/").append(destination.id); builder.append("destination=").append(destination).append("/").append(destination.id);
builder.append(","); builder.append(",");
builder.append("departure=").append(departureTime).append("/").append(departurePosition).append("/").append(departureId).append("/") builder.append("departure=").append(departureTime).append("/").append(departurePosition).append("/").append(departure).append("/")
.append(departure); .append(departure);
builder.append(","); builder.append(",");
builder.append("arrival=").append(arrivalTime).append("/").append(arrivalPosition).append("/").append(arrivalId).append("/") builder.append("arrival=").append(arrivalTime).append("/").append(arrivalPosition).append("/").append(arrival).append("/")
.append(arrival); .append(arrival);
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
@ -141,37 +133,12 @@ public final class Connection implements Serializable
public final static class Footway extends Part public final static class Footway extends Part
{ {
public final int min; public final int min;
public final int departureId;
public final String departure;
public final int arrivalId;
public final String arrival;
public final int arrivalLat, arrivalLon;
public Footway(final int min, final int departureId, final String departure, final int arrivalId, final String arrival, final int arrivalLat, public Footway(final int min, final Location departure, final Location arrival, final List<Point> path)
final int arrivalLon, final List<Point> path)
{ {
super(path); super(departure, arrival, path);
this.min = min; this.min = min;
this.departureId = departureId;
this.departure = departure;
this.arrivalId = arrivalId;
this.arrival = arrival;
this.arrivalLat = arrivalLat;
this.arrivalLon = arrivalLon;
}
public Footway(final int min, final int departureId, final String departure, final int arrivalId, final String arrival, final List<Point> path)
{
super(path);
this.min = min;
this.departureId = departureId;
this.departure = departure;
this.arrivalId = arrivalId;
this.arrival = arrival;
this.arrivalLat = 0;
this.arrivalLon = 0;
} }
@Override @Override
@ -180,9 +147,9 @@ public final class Connection implements Serializable
final StringBuilder builder = new StringBuilder(getClass().getName() + "["); final StringBuilder builder = new StringBuilder(getClass().getName() + "[");
builder.append("min=").append(min); builder.append("min=").append(min);
builder.append(","); builder.append(",");
builder.append("departure=").append(departureId).append("/").append(departure); builder.append("departure=").append(departure);
builder.append(","); builder.append(",");
builder.append("arrival=").append(arrivalId).append("/").append(arrival).append("/").append(arrivalLat).append(",").append(arrivalLon); builder.append("arrival=").append(arrival);
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }