From 3b01c1a94171131fc8fc58c0e1be4cf89bfc3030 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 1 Aug 2012 13:33:19 +0200 Subject: [PATCH] arrival positions and predicted positions --- .../schildbach/pte/AbstractEfaProvider.java | 6 +- .../schildbach/pte/AbstractHafasProvider.java | 34 +++++---- .../src/de/schildbach/pte/BvgProvider.java | 6 +- .../src/de/schildbach/pte/SadProvider.java | 4 +- .../src/de/schildbach/pte/dto/Connection.java | 43 ++++++++++-- enabler/src/de/schildbach/pte/dto/Stop.java | 69 +++++++++++++++++-- 6 files changed, 129 insertions(+), 33 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index fd5a760c..a918dfd9 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -2046,7 +2046,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider XmlPullUtil.exit(pp, "itdPoint"); if (success1 || success2) - intermediateStops.add(new Stop(stopLocation, stopPosition, null, null, stopTime, null)); + intermediateStops.add(new Stop(stopLocation, null, null, stopTime, stopPosition)); } XmlPullUtil.exit(pp, "itdStopSeq"); @@ -2094,8 +2094,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final Line line = new Line(lineId, lineLabel, lineStyle(lineLabel), lineAttrs); parts.add(new Connection.Trip(line, destination, departureTargetTime != null ? departureTargetTime : departureTime, - departureTargetTime, departurePosition, departure, arrivalTargetTime != null ? arrivalTargetTime : arrivalTime, - arrivalTargetTime, arrivalPosition, arrival, intermediateStops, path)); + departureTargetTime, departurePosition, null, departure, arrivalTargetTime != null ? arrivalTargetTime : arrivalTime, + arrivalTargetTime, arrivalPosition, null, arrival, intermediateStops, path)); } XmlPullUtil.exit(pp, "itdPartialRoute"); diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index cd2fb60f..86d0a01c 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -1161,7 +1161,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider { Date stopArrivalTime = null; Date stopDepartureTime = null; - String stopPosition = null; + String stopArrivalPosition = null; + String stopDeparturePosition = null; if (XmlPullUtil.test(pp, "Arr")) { @@ -1170,7 +1171,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider time.setTimeInMillis(currentDate.getTimeInMillis()); parseTime(time, XmlPullUtil.text(pp)); stopArrivalTime = time.getTime(); - stopPosition = parsePlatform(pp); + stopArrivalPosition = parsePlatform(pp); XmlPullUtil.exit(pp, "Arr"); } @@ -1181,11 +1182,12 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider time.setTimeInMillis(currentDate.getTimeInMillis()); parseTime(time, XmlPullUtil.text(pp)); stopDepartureTime = time.getTime(); - stopPosition = parsePlatform(pp); + stopDeparturePosition = parsePlatform(pp); XmlPullUtil.exit(pp, "Dep"); } - intermediateStops.add(new Stop(location, stopPosition, stopArrivalTime, null, stopDepartureTime, null)); + intermediateStops.add(new Stop(location, stopArrivalTime, stopArrivalPosition, stopDepartureTime, + stopDeparturePosition)); } XmlPullUtil.exit(pp, "BasicStop"); } @@ -1263,8 +1265,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider if (min == 0 || line != null) { - parts.add(new Connection.Trip(line, destination, departureTime, null, departurePos, sectionDeparture, arrivalTime, null, - arrivalPos, sectionArrival, intermediateStops, path)); + parts.add(new Connection.Trip(line, destination, departureTime, null, departurePos, null, sectionDeparture, arrivalTime, + null, arrivalPos, null, sectionArrival, intermediateStops, path)); } else { @@ -1753,8 +1755,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider /* final long predictedDepartureTime = */time(is, resDate, connectionDayOffset); /* final long predictedArrivalTime = */time(is, resDate, connectionDayOffset); - /* final String predictedDeparturePosition = */normalizePosition(strings.read(is)); - /* final String predictedArrivalPosition = */normalizePosition(strings.read(is)); + final String predictedDeparturePosition = normalizePosition(strings.read(is)); + final String predictedArrivalPosition = normalizePosition(strings.read(is)); is.readInt(); @@ -1781,7 +1783,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final long plannedStopArrivalTime = time(is, resDate, connectionDayOffset); final Date plannedStopArrivalDate = plannedStopArrivalTime != 0 ? new Date(plannedStopArrivalTime) : null; final String plannedStopDeparturePosition = normalizePosition(strings.read(is)); - /* final String plannedStopArrivalPosition = */normalizePosition(strings.read(is)); + final String plannedStopArrivalPosition = normalizePosition(strings.read(is)); is.readInt(); @@ -1789,15 +1791,16 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Date predictedStopDepartureDate = predictedStopDepartureTime != 0 ? new Date(predictedStopDepartureTime) : null; final long predictedStopArrivalTime = time(is, resDate, connectionDayOffset); final Date predictedStopArrivalDate = predictedStopArrivalTime != 0 ? new Date(predictedStopArrivalTime) : null; - /* final String predictedStopDeparturePosition = */normalizePosition(strings.read(is)); - /* final String predictedStopArrivalPosition = */normalizePosition(strings.read(is)); + final String predictedStopDeparturePosition = normalizePosition(strings.read(is)); + final String predictedStopArrivalPosition = normalizePosition(strings.read(is)); is.readInt(); final Location stopLocation = stations.read(is); - final Stop stop = new Stop(stopLocation, plannedStopDeparturePosition, plannedStopArrivalDate, predictedStopArrivalDate, - plannedStopDepartureDate, predictedStopDepartureDate); + final Stop stop = new Stop(stopLocation, plannedStopArrivalDate, predictedStopArrivalDate, plannedStopArrivalPosition, + predictedStopArrivalPosition, plannedStopDepartureDate, predictedStopDepartureDate, plannedStopDeparturePosition, + predictedStopDeparturePosition); intermediateStops.add(stop); } @@ -1825,8 +1828,9 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider 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, null, - plannedDeparturePosition, departure, plannedArrivalTime != 0 ? new Date(plannedArrivalTime) : null, null, - plannedArrivalPosition, arrival, intermediateStops, null); + plannedDeparturePosition, predictedDeparturePosition, departure, plannedArrivalTime != 0 ? new Date( + plannedArrivalTime) : null, null, plannedArrivalPosition, predictedArrivalPosition, arrival, + intermediateStops, null); } else { diff --git a/enabler/src/de/schildbach/pte/BvgProvider.java b/enabler/src/de/schildbach/pte/BvgProvider.java index 0db53c15..5a3ec848 100644 --- a/enabler/src/de/schildbach/pte/BvgProvider.java +++ b/enabler/src/de/schildbach/pte/BvgProvider.java @@ -793,7 +793,7 @@ public final class BvgProvider extends AbstractHafasProvider if (lastTime != null && time.getTime().before(lastTime)) time.add(Calendar.DAY_OF_YEAR, 1); lastTime = time.getTime(); - intermediateStops.add(new Stop(location(tStop), null, null, null, time.getTime(), null)); + intermediateStops.add(new Stop(location(tStop), null, null, time.getTime(), null)); } final Location arrival = location(tArr); @@ -821,8 +821,8 @@ public final class BvgProvider extends AbstractHafasProvider destination = null; } - parts.add(new Connection.Trip(line, destination, departureTime, null, departurePosition, departure, arrivalTime, null, - arrivalPosition, arrival, intermediateStops, null)); + parts.add(new Connection.Trip(line, destination, departureTime, null, departurePosition, null, departure, arrivalTime, + null, arrivalPosition, null, arrival, intermediateStops, null)); numTrips++; } } diff --git a/enabler/src/de/schildbach/pte/SadProvider.java b/enabler/src/de/schildbach/pte/SadProvider.java index 9bbf13e0..3189595f 100644 --- a/enabler/src/de/schildbach/pte/SadProvider.java +++ b/enabler/src/de/schildbach/pte/SadProvider.java @@ -433,8 +433,8 @@ 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, - soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), responseDate.get(1), null, null, + 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)); } catch (ParseException e) { e.printStackTrace(); diff --git a/enabler/src/de/schildbach/pte/dto/Connection.java b/enabler/src/de/schildbach/pte/dto/Connection.java index cf293b9e..3b584942 100644 --- a/enabler/src/de/schildbach/pte/dto/Connection.java +++ b/enabler/src/de/schildbach/pte/dto/Connection.java @@ -185,15 +185,18 @@ public final class Connection implements Serializable public final Location destination; public final Date departureTime; // TODO rename to plannedDepartureTime public final Date predictedDepartureTime; - public final String departurePosition; + 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; + public final String arrivalPosition; // TODO rename to plannedArrivalPosition + public final String predictedArrivalPosition; public final List intermediateStops; public Trip(final Line line, final Location destination, final Date plannedDepartureTime, final Date predictedDepartureTime, - final String departurePosition, final Location departure, final Date plannedArrivalTime, final Date predictedArrivalTime, - final String arrivalPosition, final Location arrival, final List intermediateStops, final List path) + 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 intermediateStops, final List path) { super(departure, arrival, path); @@ -202,9 +205,11 @@ public final class Connection implements Serializable 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.intermediateStops = intermediateStops; } @@ -223,6 +228,21 @@ public final class Connection implements Serializable return predictedDepartureTime != null; } + public String getDeparturePosition() + { + if (predictedDeparturePosition != null) + return predictedDeparturePosition; + else if (departurePosition != null) + return departurePosition; + else + return null; + } + + public boolean isDeparturePositionPredicted() + { + return predictedDeparturePosition != null; + } + public Date getArrivalTime() { if (predictedArrivalTime != null) @@ -238,6 +258,21 @@ public final class Connection implements Serializable return predictedArrivalTime != null; } + public String getArrivalPosition() + { + if (predictedArrivalPosition != null) + return predictedArrivalPosition; + else if (arrivalPosition != null) + return arrivalPosition; + else + return null; + } + + public boolean isArrivalPositionPredicted() + { + return predictedArrivalPosition != null; + } + @Override public String toString() { diff --git a/enabler/src/de/schildbach/pte/dto/Stop.java b/enabler/src/de/schildbach/pte/dto/Stop.java index 855f166d..1f5ef9a5 100644 --- a/enabler/src/de/schildbach/pte/dto/Stop.java +++ b/enabler/src/de/schildbach/pte/dto/Stop.java @@ -26,21 +26,42 @@ import java.util.Date; public final class Stop implements Serializable { public final Location location; - public final String position; public final Date plannedArrivalTime; public final Date predictedArrivalTime; + public final String plannedArrivalPosition; + public final String predictedArrivalPosition; public final Date time; // TODO rename to plannedDepartureTime public final Date predictedDepartureTime; + public final String position; // TODO rename to plannedPosition + public final String predictedDeparturePosition; - public Stop(final Location location, final String position, final Date plannedArrivalTime, final Date predictedArrivalTime, - final Date plannedDepartureTime, final Date predictedDepartureTime) + public Stop(final Location location, final Date plannedArrivalTime, final Date predictedArrivalTime, final String plannedArrivalPosition, + final String predictedArrivalPosition, final Date plannedDepartureTime, final Date predictedDepartureTime, + final String plannedDeparturePosition, final String predictedDeparturePosition) { this.location = location; - this.position = position; this.plannedArrivalTime = plannedArrivalTime; this.predictedArrivalTime = predictedArrivalTime; + this.plannedArrivalPosition = plannedArrivalPosition; + this.predictedArrivalPosition = predictedArrivalPosition; this.time = plannedDepartureTime; this.predictedDepartureTime = predictedDepartureTime; + this.position = plannedDeparturePosition; + this.predictedDeparturePosition = predictedDeparturePosition; + } + + public Stop(final Location location, final Date plannedArrivalTime, final String plannedArrivalPosition, final Date plannedDepartureTime, + final String plannedDeparturePosition) + { + this.location = location; + this.plannedArrivalTime = plannedArrivalTime; + this.predictedArrivalTime = null; + this.plannedArrivalPosition = plannedArrivalPosition; + this.predictedArrivalPosition = null; + this.time = plannedDepartureTime; + this.predictedDepartureTime = null; + this.position = plannedDeparturePosition; + this.predictedDeparturePosition = null; } public Date getArrivalTime() @@ -58,6 +79,21 @@ public final class Stop implements Serializable return predictedArrivalTime != null; } + public String getArrivalPosition() + { + if (predictedArrivalPosition != null) + return predictedArrivalPosition; + else if (plannedArrivalPosition != null) + return plannedArrivalPosition; + else + return null; + } + + public boolean isArrivalPositionPredicted() + { + return predictedArrivalPosition != null; + } + public Date getDepartureTime() { if (predictedDepartureTime != null) @@ -73,21 +109,42 @@ public final class Stop implements Serializable return predictedDepartureTime != null; } + public String getDeparturePosition() + { + if (predictedDeparturePosition != null) + return predictedDeparturePosition; + else if (position != null) + return position; + else + return null; + } + + public boolean isDeparturePositionPredicted() + { + return predictedDeparturePosition != null; + } + @Override public String toString() { StringBuilder builder = new StringBuilder("Stop("); builder.append(location); builder.append(","); - builder.append(position != null ? position : "null"); - 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(")"); return builder.toString(); }