migrate Trip arrival and departure to Stop type

This commit is contained in:
Andreas Schildbach 2013-03-03 22:13:46 +01:00
parent cd78e7b809
commit 621e3b8add
5 changed files with 122 additions and 124 deletions

View file

@ -2057,8 +2057,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "itdPartialRouteList");
final List<Connection.Part> parts = new LinkedList<Connection.Part>();
Location firstDeparture = null;
Location lastArrival = null;
Location firstDepartureLocation = null;
Location lastArrivalLocation = null;
while (XmlPullUtil.test(pp, "itdPartialRoute"))
{
@ -2068,9 +2068,9 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.test(pp, "itdPoint");
if (!"departure".equals(pp.getAttributeValue(null, "usage")))
throw new IllegalStateException();
final Location departure = processItdPointAttributes(pp);
if (firstDeparture == null)
firstDeparture = departure;
final Location departureLocation = processItdPointAttributes(pp);
if (firstDepartureLocation == null)
firstDepartureLocation = departureLocation;
final String departurePosition;
if (!suppressPositions)
departurePosition = normalizePlatform(pp.getAttributeValue(null, "platform"), pp.getAttributeValue(null, "platformName"));
@ -2097,8 +2097,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.test(pp, "itdPoint");
if (!"arrival".equals(pp.getAttributeValue(null, "usage")))
throw new IllegalStateException();
final Location arrival = processItdPointAttributes(pp);
lastArrival = arrival;
final Location arrivalLocation = processItdPointAttributes(pp);
lastArrivalLocation = arrivalLocation;
final String arrivalPosition;
if (!suppressPositions)
arrivalPosition = normalizePlatform(pp.getAttributeValue(null, "platform"), pp.getAttributeValue(null, "platformName"));
@ -2148,11 +2148,11 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
if (path != null && lastFootway.path != null)
path.addAll(0, lastFootway.path);
parts.add(new Connection.Footway(lastFootway.min + min, distance, lastFootway.transfer || transfer,
lastFootway.departure, arrival, path));
lastFootway.departure, arrivalLocation, path));
}
else
{
parts.add(new Connection.Footway(min, distance, transfer, departure, arrival, path));
parts.add(new Connection.Footway(min, distance, transfer, departureLocation, arrivalLocation, path));
}
}
else if ("gesicherter Anschluss".equals(productName) || "nicht umsteigen".equals(productName)) // type97
@ -2268,11 +2268,11 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
final int size = intermediateStops.size();
if (size >= 2)
{
if (intermediateStops.get(size - 1).location.id != arrival.id)
if (intermediateStops.get(size - 1).location.id != arrivalLocation.id)
throw new IllegalStateException();
intermediateStops.remove(size - 1);
if (intermediateStops.get(0).location.id != departure.id)
if (intermediateStops.get(0).location.id != departureLocation.id)
throw new IllegalStateException();
intermediateStops.remove(0);
}
@ -2321,9 +2321,12 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
lineAttrs.add(Line.Attr.WHEEL_CHAIR_ACCESS);
final Line line = new Line(lineId, lineLabel, lineStyle(lineLabel), lineAttrs);
parts.add(new Connection.Trip(line, destination, departureTargetTime != null ? departureTargetTime : departureTime,
departureTargetTime, departurePosition, null, departure, arrivalTargetTime != null ? arrivalTargetTime : arrivalTime,
arrivalTargetTime, arrivalPosition, null, arrival, intermediateStops, path, message));
final Stop departure = new Stop(departureLocation, true, departureTargetTime != null ? departureTargetTime : departureTime,
departureTargetTime, departurePosition, null);
final Stop arrival = new Stop(arrivalLocation, false, arrivalTargetTime != null ? arrivalTargetTime : arrivalTime,
arrivalTargetTime, arrivalPosition, null);
parts.add(new Connection.Trip(line, destination, departure, arrival, intermediateStops, path, message));
}
XmlPullUtil.exit(pp, "itdPartialRoute");
@ -2385,7 +2388,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.next(pp);
}
}
connections.add(new Connection(id, firstDeparture, lastArrival, parts, fares.isEmpty() ? null : fares, null, numChanges));
connections.add(new Connection(id, firstDepartureLocation, lastArrivalLocation, parts, fares.isEmpty() ? null : fares, null,
numChanges));
XmlPullUtil.exit(pp, "itdRoute");
}

View file

@ -1057,7 +1057,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp);
final Location departure = parseLocation(pp);
final Location departureLocation = parseLocation(pp);
XmlPullUtil.enter(pp, "Dep");
XmlPullUtil.exit(pp, "Dep");
final int[] capacity;
@ -1094,7 +1094,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp);
final Location arrival = parseLocation(pp);
final Location arrivalLocation = parseLocation(pp);
XmlPullUtil.exit(pp, "BasicStop");
XmlPullUtil.exit(pp, "Arrival");
@ -1118,7 +1118,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp);
final Location sectionDeparture = parseLocation(pp);
final Location sectionDepartureLocation = parseLocation(pp);
XmlPullUtil.enter(pp, "Dep");
XmlPullUtil.require(pp, "Time");
time.setTimeInMillis(currentDate.getTimeInMillis());
@ -1192,7 +1192,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
while (XmlPullUtil.test(pp, "StAttrList"))
XmlPullUtil.next(pp);
final Location location = parseLocation(pp);
if (location.id != sectionDeparture.id)
if (location.id != sectionDepartureLocation.id)
{
Date stopArrivalTime = null;
Date stopDepartureTime = null;
@ -1278,7 +1278,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp);
final Location sectionArrival = parseLocation(pp);
final Location sectionArrivalLocation = parseLocation(pp);
XmlPullUtil.enter(pp, "Arr");
XmlPullUtil.require(pp, "Time");
time.setTimeInMillis(currentDate.getTimeInMillis());
@ -1293,26 +1293,28 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
// remove last intermediate
final int size = intermediateStops != null ? intermediateStops.size() : 0;
if (size >= 1)
if (intermediateStops.get(size - 1).location.id == sectionArrival.id)
if (intermediateStops.get(size - 1).location.id == sectionArrivalLocation.id)
intermediateStops.remove(size - 1);
XmlPullUtil.exit(pp, "ConSection");
if (min == 0 || line != null)
{
parts.add(new Connection.Trip(line, destination, departureTime, null, departurePos, null, sectionDeparture, arrivalTime,
null, arrivalPos, null, sectionArrival, intermediateStops, path, null));
final Stop departure = new Stop(sectionDepartureLocation, true, departureTime, null, departurePos, null);
final Stop arrival = new Stop(sectionArrivalLocation, false, arrivalTime, null, arrivalPos, null);
parts.add(new Connection.Trip(line, destination, departure, arrival, intermediateStops, path, null));
}
else
{
if (parts.size() > 0 && parts.get(parts.size() - 1) instanceof Connection.Footway)
{
final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
parts.add(new Connection.Footway(lastFootway.min + min, 0, false, lastFootway.departure, sectionArrival, null));
parts.add(new Connection.Footway(lastFootway.min + min, 0, false, lastFootway.departure, sectionArrivalLocation, null));
}
else
{
parts.add(new Connection.Footway(min, 0, false, sectionDeparture, sectionArrival, null));
parts.add(new Connection.Footway(min, 0, false, sectionDepartureLocation, sectionArrivalLocation, null));
}
}
}
@ -1321,7 +1323,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.exit(pp, "Connection");
connections.add(new Connection(id, departure, arrival, parts, null, capacity, numTransfers));
connections.add(new Connection(id, departureLocation, arrivalLocation, parts, null, capacity, numTransfers));
}
XmlPullUtil.exit(pp);
@ -1741,10 +1743,10 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
is.skipBytes(0x4a + partsOffset + iPart * 20);
final long plannedDepartureTime = time(is, resDate, connectionDayOffset);
final Location departure = stations.read(is);
final Location departureLocation = stations.read(is);
final long plannedArrivalTime = time(is, resDate, connectionDayOffset);
final Location arrival = stations.read(is);
final Location arrivalLocation = stations.read(is);
final int type = is.readShortReverse();
@ -1863,11 +1865,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
{
final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
part = new Connection.Footway(lastFootway.min + min, 0, lastFootway.transfer || transfer, lastFootway.departure,
arrival, null);
arrivalLocation, null);
}
else
{
part = new Connection.Footway(min, 0, transfer, departure, arrival, null);
part = new Connection.Footway(min, 0, transfer, departureLocation, arrivalLocation, null);
}
}
else if (type == 2)
@ -1881,11 +1883,14 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final Line line = newLine(lineProduct, normalizeLineName(lineName), lineAttrs.toArray(new Line.Attr[0]));
final Location direction = directionStr != null ? new Location(LocationType.ANY, 0, null, directionStr) : null;
part = new Connection.Trip(line, direction, plannedDepartureTime != 0 ? new Date(plannedDepartureTime) : null,
predictedDepartureTime != 0 ? new Date(predictedDepartureTime) : null, plannedDeparturePosition,
predictedDeparturePosition, departure, plannedArrivalTime != 0 ? new Date(plannedArrivalTime) : null,
final Stop departure = new Stop(departureLocation, true, plannedDepartureTime != 0 ? new Date(plannedDepartureTime)
: null, predictedDepartureTime != 0 ? new Date(predictedDepartureTime) : null, plannedDeparturePosition,
predictedDeparturePosition);
final Stop arrival = new Stop(arrivalLocation, false, plannedArrivalTime != 0 ? new Date(plannedArrivalTime) : null,
predictedArrivalTime != 0 ? new Date(predictedArrivalTime) : null, plannedArrivalPosition,
predictedArrivalPosition, arrival, intermediateStops, null, null);
predictedArrivalPosition);
part = new Connection.Trip(line, direction, departure, arrival, intermediateStops, null, null);
}
else
{

View file

@ -37,6 +37,7 @@ import de.schildbach.pte.dto.QueryConnectionsResult;
import de.schildbach.pte.dto.QueryConnectionsResult.Status;
import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.ResultHeader;
import de.schildbach.pte.dto.Stop;
import de.schildbach.pte.dto.Style;
public class SadProvider extends AbstractNetworkProvider {
@ -433,9 +434,13 @@ public class SadProvider extends AbstractNetworkProvider {
// predictedDepartureTime, departurePosition,
// predictedArrivalTime, arrivalPosition,
// intermediateStops, path
parts.add(new Trip(new Line(lineId, lineId, DEFAULT_STYLE), null, responseDate.get(0), null, null, null,
soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), responseDate.get(1), null, null, null,
soapToLocation((SoapObject) tratto.getProperty("nodo_arrivo")), null, null, null));
final Stop departure = new Stop(soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), true,
responseDate.get(0), null, null, null);
final Stop arrival = new Stop(soapToLocation((SoapObject) tratto.getProperty("nodo_arrivo")), false,
responseDate.get(1), null, null, null);
parts.add(new Trip(new Line(lineId, lineId, DEFAULT_STYLE), null, departure, arrival, null, null, null));
} catch (ParseException e) {
e.printStackTrace();
}

View file

@ -154,8 +154,8 @@ public final class Connection implements Serializable
else if (part instanceof Trip)
{
final Trip trip = (Trip) part;
builder.append(trip.departureTime.getTime()).append('-');
builder.append(trip.arrivalTime.getTime()).append('-');
builder.append(trip.departureStop.plannedDepartureTime.getTime()).append('-');
builder.append(trip.arrivalStop.plannedArrivalTime.getTime()).append('-');
builder.append(trip.line.label);
}
@ -224,112 +224,82 @@ public final class Connection implements Serializable
public final Line line;
public final Location destination;
public final Date departureTime; // TODO rename to plannedDepartureTime
public final Date predictedDepartureTime;
public final String departurePosition; // TODO rename to plannedDeparturePosition
public final String predictedDeparturePosition;
public final Date arrivalTime; // TODO rename to plannedArrivalTime
public final Date predictedArrivalTime;
public final String arrivalPosition; // TODO rename to plannedArrivalPosition
public final String predictedArrivalPosition;
public final Stop departureStop;
public final Stop arrivalStop;
public final List<Stop> intermediateStops;
public final String message;
public Trip(final Line line, final Location destination, final Date plannedDepartureTime, final Date predictedDepartureTime,
final String departurePosition, final String predictedDeparturePosition, final Location departure, final Date plannedArrivalTime,
final Date predictedArrivalTime, final String arrivalPosition, final String predictedArrivalPosition, final Location arrival,
public Trip(final Line line, final Location destination, final Stop departureStop, final Stop arrivalStop,
final List<Stop> intermediateStops, final List<Point> path, final String message)
{
super(departure, arrival, path);
super(departureStop != null ? departureStop.location : null, arrivalStop != null ? arrivalStop.location : null, path);
this.line = line;
this.destination = destination;
this.departureTime = plannedDepartureTime;
this.predictedDepartureTime = predictedDepartureTime;
this.departurePosition = departurePosition;
this.predictedDeparturePosition = predictedDeparturePosition;
this.arrivalTime = plannedArrivalTime;
this.predictedArrivalTime = predictedArrivalTime;
this.arrivalPosition = arrivalPosition;
this.predictedArrivalPosition = predictedArrivalPosition;
this.departureStop = departureStop;
this.arrivalStop = arrivalStop;
this.intermediateStops = intermediateStops;
this.message = message;
}
public Date getDepartureTime()
{
if (predictedDepartureTime != null)
return predictedDepartureTime;
else if (departureTime != null)
return departureTime;
else
final Date departureTime = departureStop.getDepartureTime();
if (departureTime == null)
throw new IllegalStateException();
return departureTime;
}
public boolean isDepartureTimePredicted()
{
return predictedDepartureTime != null;
return departureStop.isDepartureTimePredicted();
}
public Long getDepartureDelay()
{
if (departureTime != null && predictedDepartureTime != null)
return predictedDepartureTime.getTime() - departureTime.getTime();
else
return null;
return departureStop.getDepartureDelay();
}
public String getDeparturePosition()
{
if (predictedDeparturePosition != null)
return predictedDeparturePosition;
else if (departurePosition != null)
return departurePosition;
else
return null;
return departureStop.getDeparturePosition();
}
public boolean isDeparturePositionPredicted()
{
return predictedDeparturePosition != null;
return departureStop.isDeparturePositionPredicted();
}
public Date getArrivalTime()
{
if (predictedArrivalTime != null)
return predictedArrivalTime;
else if (arrivalTime != null)
return arrivalTime;
else
final Date arrivalTime = arrivalStop.getArrivalTime();
if (arrivalTime == null)
throw new IllegalStateException();
return arrivalTime;
}
public boolean isArrivalTimePredicted()
{
return predictedArrivalTime != null;
return arrivalStop.isArrivalTimePredicted();
}
public Long getArrivalDelay()
{
if (arrivalTime != null && predictedArrivalTime != null)
return predictedArrivalTime.getTime() - arrivalTime.getTime();
else
return null;
return arrivalStop.getArrivalDelay();
}
public String getArrivalPosition()
{
if (predictedArrivalPosition != null)
return predictedArrivalPosition;
else if (arrivalPosition != null)
return arrivalPosition;
else
return null;
return arrivalStop.getArrivalPosition();
}
public boolean isArrivalPositionPredicted()
{
return predictedArrivalPosition != null;
return arrivalStop.isArrivalPositionPredicted();
}
@Override
@ -343,9 +313,9 @@ public final class Connection implements Serializable
builder.append("destination=").append(destination.toDebugString());
}
builder.append(",");
builder.append("departure=").append(departureTime).append("/").append(departurePosition).append("/").append(departure.toDebugString());
builder.append("departure=").append(departureStop);
builder.append(",");
builder.append("arrival=").append(arrivalTime).append("/").append(arrivalPosition).append("/").append(arrival.toDebugString());
builder.append("arrival=").append(arrivalStop);
builder.append("]");
return builder.toString();
}

View file

@ -30,9 +30,9 @@ public final class Stop implements Serializable
public final Date predictedArrivalTime;
public final String plannedArrivalPosition;
public final String predictedArrivalPosition;
public final Date time; // TODO rename to plannedDepartureTime
public final Date plannedDepartureTime;
public final Date predictedDepartureTime;
public final String position; // TODO rename to plannedPosition
public final String plannedDeparturePosition;
public final String predictedDeparturePosition;
public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final String plannedArrivalPosition,
@ -44,12 +44,26 @@ public final class Stop implements Serializable
this.predictedArrivalTime = predictedArrivalTime;
this.plannedArrivalPosition = plannedArrivalPosition;
this.predictedArrivalPosition = predictedArrivalPosition;
this.time = plannedDepartureTime;
this.plannedDepartureTime = plannedDepartureTime;
this.predictedDepartureTime = predictedDepartureTime;
this.position = plannedDeparturePosition;
this.plannedDeparturePosition = plannedDeparturePosition;
this.predictedDeparturePosition = predictedDeparturePosition;
}
public Stop(final Location location, final boolean departure, final Date plannedTime, final Date predictedTime, final String plannedPosition,
final String predictedPosition)
{
this.location = location;
this.plannedArrivalTime = !departure ? plannedTime : null;
this.predictedArrivalTime = !departure ? predictedTime : null;
this.plannedArrivalPosition = !departure ? plannedPosition : null;
this.predictedArrivalPosition = !departure ? predictedPosition : null;
this.plannedDepartureTime = departure ? plannedTime : null;
this.predictedDepartureTime = departure ? predictedTime : null;
this.plannedDeparturePosition = departure ? plannedPosition : null;
this.predictedDeparturePosition = departure ? predictedPosition : null;
}
public Stop(final Location location, final Date plannedArrivalTime, final String plannedArrivalPosition, final Date plannedDepartureTime,
final String plannedDeparturePosition)
{
@ -58,9 +72,9 @@ public final class Stop implements Serializable
this.predictedArrivalTime = null;
this.plannedArrivalPosition = plannedArrivalPosition;
this.predictedArrivalPosition = null;
this.time = plannedDepartureTime;
this.plannedDepartureTime = plannedDepartureTime;
this.predictedDepartureTime = null;
this.position = plannedDeparturePosition;
this.plannedDeparturePosition = plannedDeparturePosition;
this.predictedDeparturePosition = null;
}
@ -106,8 +120,8 @@ public final class Stop implements Serializable
{
if (predictedDepartureTime != null)
return predictedDepartureTime;
else if (time != null)
return time;
else if (plannedDepartureTime != null)
return plannedDepartureTime;
else
return null;
}
@ -119,8 +133,8 @@ public final class Stop implements Serializable
public Long getDepartureDelay()
{
if (time != null && predictedDepartureTime != null)
return predictedDepartureTime.getTime() - time.getTime();
if (plannedDepartureTime != null && predictedDepartureTime != null)
return predictedDepartureTime.getTime() - plannedDepartureTime.getTime();
else
return null;
}
@ -129,8 +143,8 @@ public final class Stop implements Serializable
{
if (predictedDeparturePosition != null)
return predictedDeparturePosition;
else if (position != null)
return position;
else if (plannedDeparturePosition != null)
return plannedDeparturePosition;
else
return null;
}
@ -143,24 +157,24 @@ public final class Stop implements Serializable
@Override
public String toString()
{
StringBuilder builder = new StringBuilder("Stop(");
StringBuilder builder = new StringBuilder("Stop('");
builder.append(location);
builder.append(",");
builder.append(plannedArrivalTime != null ? plannedArrivalTime : "null");
builder.append(",");
builder.append(predictedArrivalTime != null ? predictedArrivalTime : "null");
builder.append(",");
builder.append(plannedArrivalPosition != null ? plannedArrivalPosition : "null");
builder.append(",");
builder.append(predictedArrivalPosition != null ? predictedArrivalPosition : "null");
builder.append(",");
builder.append(time != null ? time : "null");
builder.append(",");
builder.append(predictedDepartureTime != null ? predictedDepartureTime : "null");
builder.append(",");
builder.append(position != null ? position : "null");
builder.append(",");
builder.append(predictedDeparturePosition != null ? predictedDeparturePosition : "null");
builder.append("', arr: ");
builder.append(plannedArrivalTime != null ? plannedArrivalTime : "-");
builder.append("/");
builder.append(predictedArrivalTime != null ? predictedArrivalTime : "-");
builder.append(", ");
builder.append(plannedArrivalPosition != null ? plannedArrivalPosition : "-");
builder.append("/");
builder.append(predictedArrivalPosition != null ? predictedArrivalPosition : "-");
builder.append(", dep: ");
builder.append(plannedDepartureTime != null ? plannedDepartureTime : "-");
builder.append("/");
builder.append(predictedDepartureTime != null ? predictedDepartureTime : "-");
builder.append(", ");
builder.append(plannedDeparturePosition != null ? plannedDeparturePosition : "-");
builder.append("/");
builder.append(predictedDeparturePosition != null ? predictedDeparturePosition : "-");
builder.append(")");
return builder.toString();
}