Parse bits for cancelled arrivals and departures.

This commit is contained in:
Andreas Schildbach 2014-06-17 10:43:42 +02:00
parent 12e08bbb40
commit a29fe3811e
2 changed files with 40 additions and 8 deletions

View file

@ -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);
}

View file

@ -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("/");