diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index c94c4b03..e1372348 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -1878,7 +1878,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Position predictedDeparturePosition = normalizePosition(strings.read(is)); final Position predictedArrivalPosition = normalizePosition(strings.read(is)); - is.readInt(); + final int bits = is.readShortReverse(); + final boolean arrivalCancelled = (bits & 0x10) != 0; + final boolean departureCancelled = (bits & 0x20) != 0; + + is.readShort(); final int firstStopIndex = is.readShortReverse(); @@ -1914,7 +1918,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Position predictedStopDeparturePosition = normalizePosition(strings.read(is)); final Position predictedStopArrivalPosition = normalizePosition(strings.read(is)); - is.readInt(); + final int stopBits = is.readShortReverse(); + final boolean stopArrivalCancelled = (stopBits & 0x10) != 0; + final boolean stopDepartureCancelled = (stopBits & 0x20) != 0; + + is.readShort(); final Location stopLocation = stations.read(is); @@ -1923,8 +1931,9 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Stop stop = new Stop(stopLocation, plannedStopArrivalDate, validPredictedDate ? predictedStopArrivalDate : null, plannedStopArrivalPosition, - predictedStopArrivalPosition, plannedStopDepartureDate, validPredictedDate ? predictedStopDepartureDate - : null, plannedStopDeparturePosition, predictedStopDeparturePosition); + predictedStopArrivalPosition, stopArrivalCancelled, plannedStopDepartureDate, + validPredictedDate ? predictedStopDepartureDate : null, plannedStopDeparturePosition, + predictedStopDeparturePosition, stopDepartureCancelled); intermediateStops.add(stop); } @@ -1983,10 +1992,10 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Stop departure = new Stop(departureLocation, true, plannedDepartureTime != 0 ? new Date(plannedDepartureTime) : null, predictedDepartureTime != 0 ? new Date(predictedDepartureTime) : null, plannedDeparturePosition, - predictedDeparturePosition); + predictedDeparturePosition, departureCancelled); final Stop arrival = new Stop(arrivalLocation, false, plannedArrivalTime != 0 ? new Date(plannedArrivalTime) : null, predictedArrivalTime != 0 ? new Date(predictedArrivalTime) : null, plannedArrivalPosition, - predictedArrivalPosition); + predictedArrivalPosition, arrivalCancelled); leg = new Trip.Public(line, direction, departure, arrival, intermediateStops, null, null); } diff --git a/enabler/src/de/schildbach/pte/dto/Stop.java b/enabler/src/de/schildbach/pte/dto/Stop.java index 0642b98d..159abeb1 100644 --- a/enabler/src/de/schildbach/pte/dto/Stop.java +++ b/enabler/src/de/schildbach/pte/dto/Stop.java @@ -30,38 +30,59 @@ public final class Stop implements Serializable public final Date predictedArrivalTime; public final Position plannedArrivalPosition; public final Position predictedArrivalPosition; + public final boolean arrivalCancelled; public final Date plannedDepartureTime; public final Date predictedDepartureTime; public final Position plannedDeparturePosition; public final Position predictedDeparturePosition; + public final boolean departureCancelled; public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final Position plannedArrivalPosition, final Position predictedArrivalPosition, final Date plannedDepartureTime, final Date predictedDepartureTime, final Position plannedDeparturePosition, final Position predictedDeparturePosition) + { + this(location, plannedArrivalTime, predictedArrivalTime, plannedArrivalPosition, predictedArrivalPosition, false, plannedDepartureTime, + predictedDepartureTime, plannedDeparturePosition, predictedDeparturePosition, false); + } + + public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final Position plannedArrivalPosition, + final Position predictedArrivalPosition, final boolean arrivalCancelled, final Date plannedDepartureTime, + final Date predictedDepartureTime, final Position plannedDeparturePosition, final Position predictedDeparturePosition, + final boolean departureCancelled) { this.location = location; this.plannedArrivalTime = plannedArrivalTime; this.predictedArrivalTime = predictedArrivalTime; this.plannedArrivalPosition = plannedArrivalPosition; this.predictedArrivalPosition = predictedArrivalPosition; + this.arrivalCancelled = arrivalCancelled; this.plannedDepartureTime = plannedDepartureTime; this.predictedDepartureTime = predictedDepartureTime; this.plannedDeparturePosition = plannedDeparturePosition; this.predictedDeparturePosition = predictedDeparturePosition; + this.departureCancelled = departureCancelled; } public Stop(final Location location, final boolean departure, final Date plannedTime, final Date predictedTime, final Position plannedPosition, final Position predictedPosition) + { + this(location, departure, plannedTime, predictedTime, plannedPosition, predictedPosition, false); + } + + public Stop(final Location location, final boolean departure, final Date plannedTime, final Date predictedTime, final Position plannedPosition, + final Position predictedPosition, final boolean cancelled) { this.location = location; this.plannedArrivalTime = !departure ? plannedTime : null; this.predictedArrivalTime = !departure ? predictedTime : null; this.plannedArrivalPosition = !departure ? plannedPosition : null; this.predictedArrivalPosition = !departure ? predictedPosition : null; + this.arrivalCancelled = !departure ? cancelled : false; this.plannedDepartureTime = departure ? plannedTime : null; this.predictedDepartureTime = departure ? predictedTime : null; this.plannedDeparturePosition = departure ? plannedPosition : null; this.predictedDeparturePosition = departure ? predictedPosition : null; + this.departureCancelled = departure ? cancelled : false; } public Stop(final Location location, final Date plannedArrivalTime, final Position plannedArrivalPosition, final Date plannedDepartureTime, @@ -72,10 +93,12 @@ public final class Stop implements Serializable this.predictedArrivalTime = null; this.plannedArrivalPosition = plannedArrivalPosition; this.predictedArrivalPosition = null; + this.arrivalCancelled = false; this.plannedDepartureTime = plannedDepartureTime; this.predictedDepartureTime = null; this.plannedDeparturePosition = plannedDeparturePosition; this.predictedDeparturePosition = null; + this.departureCancelled = false; } public Date getArrivalTime() @@ -162,7 +185,7 @@ public final class Stop implements Serializable builder.append("', arr: "); builder.append(plannedArrivalTime != null ? plannedArrivalTime : "-"); builder.append("/"); - builder.append(predictedArrivalTime != null ? predictedArrivalTime : "-"); + builder.append(arrivalCancelled ? "cancelled" : (predictedArrivalTime != null ? predictedArrivalTime : "-")); builder.append(", "); builder.append(plannedArrivalPosition != null ? plannedArrivalPosition : "-"); builder.append("/"); @@ -170,7 +193,7 @@ public final class Stop implements Serializable builder.append(", dep: "); builder.append(plannedDepartureTime != null ? plannedDepartureTime : "-"); builder.append("/"); - builder.append(predictedDepartureTime != null ? predictedDepartureTime : "-"); + builder.append(departureCancelled ? "cancelled" : (predictedDepartureTime != null ? predictedDepartureTime : "-")); builder.append(", "); builder.append(plannedDeparturePosition != null ? plannedDeparturePosition : "-"); builder.append("/");