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

View file

@ -1057,7 +1057,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop"); XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList")) while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
final Location departure = parseLocation(pp); final Location departureLocation = parseLocation(pp);
XmlPullUtil.enter(pp, "Dep"); XmlPullUtil.enter(pp, "Dep");
XmlPullUtil.exit(pp, "Dep"); XmlPullUtil.exit(pp, "Dep");
final int[] capacity; final int[] capacity;
@ -1094,7 +1094,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop"); XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList")) while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
final Location arrival = parseLocation(pp); final Location arrivalLocation = parseLocation(pp);
XmlPullUtil.exit(pp, "BasicStop"); XmlPullUtil.exit(pp, "BasicStop");
XmlPullUtil.exit(pp, "Arrival"); XmlPullUtil.exit(pp, "Arrival");
@ -1118,7 +1118,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop"); XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList")) while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
final Location sectionDeparture = parseLocation(pp); final Location sectionDepartureLocation = parseLocation(pp);
XmlPullUtil.enter(pp, "Dep"); XmlPullUtil.enter(pp, "Dep");
XmlPullUtil.require(pp, "Time"); XmlPullUtil.require(pp, "Time");
time.setTimeInMillis(currentDate.getTimeInMillis()); time.setTimeInMillis(currentDate.getTimeInMillis());
@ -1192,7 +1192,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
while (XmlPullUtil.test(pp, "StAttrList")) while (XmlPullUtil.test(pp, "StAttrList"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
final Location location = parseLocation(pp); final Location location = parseLocation(pp);
if (location.id != sectionDeparture.id) if (location.id != sectionDepartureLocation.id)
{ {
Date stopArrivalTime = null; Date stopArrivalTime = null;
Date stopDepartureTime = null; Date stopDepartureTime = null;
@ -1278,7 +1278,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "BasicStop"); XmlPullUtil.enter(pp, "BasicStop");
while (pp.getName().equals("StAttrList")) while (pp.getName().equals("StAttrList"))
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
final Location sectionArrival = parseLocation(pp); final Location sectionArrivalLocation = parseLocation(pp);
XmlPullUtil.enter(pp, "Arr"); XmlPullUtil.enter(pp, "Arr");
XmlPullUtil.require(pp, "Time"); XmlPullUtil.require(pp, "Time");
time.setTimeInMillis(currentDate.getTimeInMillis()); time.setTimeInMillis(currentDate.getTimeInMillis());
@ -1293,26 +1293,28 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
// remove last intermediate // remove last intermediate
final int size = intermediateStops != null ? intermediateStops.size() : 0; final int size = intermediateStops != null ? intermediateStops.size() : 0;
if (size >= 1) 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); intermediateStops.remove(size - 1);
XmlPullUtil.exit(pp, "ConSection"); XmlPullUtil.exit(pp, "ConSection");
if (min == 0 || line != null) if (min == 0 || line != null)
{ {
parts.add(new Connection.Trip(line, destination, departureTime, null, departurePos, null, sectionDeparture, arrivalTime, final Stop departure = new Stop(sectionDepartureLocation, true, departureTime, null, departurePos, null);
null, arrivalPos, null, sectionArrival, intermediateStops, path, 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 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, 0, false, lastFootway.departure, sectionArrival, null)); parts.add(new Connection.Footway(lastFootway.min + min, 0, false, lastFootway.departure, sectionArrivalLocation, null));
} }
else 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"); 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); XmlPullUtil.exit(pp);
@ -1741,10 +1743,10 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
is.skipBytes(0x4a + partsOffset + iPart * 20); is.skipBytes(0x4a + partsOffset + iPart * 20);
final long plannedDepartureTime = time(is, resDate, connectionDayOffset); 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 long plannedArrivalTime = time(is, resDate, connectionDayOffset);
final Location arrival = stations.read(is); final Location arrivalLocation = stations.read(is);
final int type = is.readShortReverse(); 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); final Connection.Footway lastFootway = (Connection.Footway) parts.remove(parts.size() - 1);
part = new Connection.Footway(lastFootway.min + min, 0, lastFootway.transfer || transfer, lastFootway.departure, part = new Connection.Footway(lastFootway.min + min, 0, lastFootway.transfer || transfer, lastFootway.departure,
arrival, null); arrivalLocation, null);
} }
else 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) 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 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; 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, final Stop departure = new Stop(departureLocation, true, plannedDepartureTime != 0 ? new Date(plannedDepartureTime)
predictedDepartureTime != 0 ? new Date(predictedDepartureTime) : null, plannedDeparturePosition, : null, predictedDepartureTime != 0 ? new Date(predictedDepartureTime) : null, plannedDeparturePosition,
predictedDeparturePosition, departure, plannedArrivalTime != 0 ? new Date(plannedArrivalTime) : null, predictedDeparturePosition);
final Stop arrival = new Stop(arrivalLocation, false, plannedArrivalTime != 0 ? new Date(plannedArrivalTime) : null,
predictedArrivalTime != 0 ? new Date(predictedArrivalTime) : null, plannedArrivalPosition, 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 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.QueryConnectionsResult.Status;
import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult;
import de.schildbach.pte.dto.ResultHeader; import de.schildbach.pte.dto.ResultHeader;
import de.schildbach.pte.dto.Stop;
import de.schildbach.pte.dto.Style; import de.schildbach.pte.dto.Style;
public class SadProvider extends AbstractNetworkProvider { public class SadProvider extends AbstractNetworkProvider {
@ -433,9 +434,13 @@ public class SadProvider extends AbstractNetworkProvider {
// predictedDepartureTime, departurePosition, // predictedDepartureTime, departurePosition,
// predictedArrivalTime, arrivalPosition, // predictedArrivalTime, arrivalPosition,
// intermediateStops, path // 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, final Stop departure = new Stop(soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), true,
soapToLocation((SoapObject) tratto.getProperty("nodo_arrivo")), null, null, null)); 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) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }

View file

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

View file

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