diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index d0792f44..9bccd53f 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -1937,7 +1937,6 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final String productName = pp.getAttributeValue(null, "productName"); if ("IT".equals(partialRouteType) || "Fussweg".equals(productName) || "Taxi".equals(productName)) { - final int min = (int) (arrivalTime.getTime() - departureTime.getTime()) / 1000 / 60; final Trip.Individual.Type type = "Taxi".equals(productName) ? Trip.Individual.Type.TRANSFER : Trip.Individual.Type.WALK; XmlPullUtil.enter(pp, "itdMeansOfTransport"); @@ -1959,11 +1958,12 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider final Trip.Individual lastIndividual = (Trip.Individual) legs.remove(legs.size() - 1); if (path != null && lastIndividual.path != null) path.addAll(0, lastIndividual.path); - legs.add(new Trip.Individual(lastIndividual.min + min, distance, type, lastIndividual.departure, arrivalLocation, path)); + legs.add(new Trip.Individual(type, lastIndividual.departure, lastIndividual.departureTime, arrivalLocation, arrivalTime, + path, distance)); } else { - legs.add(new Trip.Individual(min, distance, type, departureLocation, arrivalLocation, path)); + legs.add(new Trip.Individual(type, departureLocation, departureTime, arrivalLocation, arrivalTime, path, distance)); } } else if ("gesicherter Anschluss".equals(productName) || "nicht umsteigen".equals(productName)) // type97 diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 2840847d..2f7a3898 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -1145,7 +1145,6 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider // journey final Line line; Location destination = null; - int min = 0; List intermediateStops = null; @@ -1253,9 +1252,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider { XmlPullUtil.enter(pp); XmlPullUtil.enter(pp, "Duration"); - XmlPullUtil.require(pp, "Time"); - min = parseDuration(XmlPullUtil.text(pp).substring(3, 8)); - XmlPullUtil.exit(pp); + XmlPullUtil.exit(pp, "Duration"); XmlPullUtil.exit(pp); line = null; @@ -1310,7 +1307,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider XmlPullUtil.exit(pp, "ConSection"); - if (min == 0 || line != null) + if (line != null) { final Stop departure = new Stop(sectionDepartureLocation, true, departureTime, null, departurePos, null); final Stop arrival = new Stop(sectionArrivalLocation, false, arrivalTime, null, arrivalPos, null); @@ -1322,12 +1319,13 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider if (legs.size() > 0 && legs.get(legs.size() - 1) instanceof Trip.Individual) { final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1); - legs.add(new Trip.Individual(lastIndividualLeg.min + min, 0, Trip.Individual.Type.WALK, lastIndividualLeg.departure, - sectionArrivalLocation, null)); + legs.add(new Trip.Individual(Trip.Individual.Type.WALK, lastIndividualLeg.departure, lastIndividualLeg.departureTime, + sectionArrivalLocation, arrivalTime, null, 0)); } else { - legs.add(new Trip.Individual(min, 0, Trip.Individual.Type.WALK, sectionDepartureLocation, sectionArrivalLocation, null)); + legs.add(new Trip.Individual(Trip.Individual.Type.WALK, sectionDepartureLocation, departureTime, sectionArrivalLocation, + arrivalTime, null, 0)); } } } @@ -1900,7 +1898,6 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Trip.Leg leg; if (type == 1 /* Fussweg */|| type == 3 /* Uebergang */|| type == 4 /* Uebergang */) { - final int min = (int) ((plannedArrivalTime - plannedDepartureTime) / 1000 / 60); final Trip.Individual.Type individualType; if (routingType == null) individualType = type == 1 ? Trip.Individual.Type.WALK : Trip.Individual.Type.TRANSFER; @@ -1917,12 +1914,13 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider if (lastLeg != null && lastLeg instanceof Trip.Individual && ((Trip.Individual) lastLeg).type == individualType) { final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1); - leg = new Trip.Individual(lastIndividualLeg.min + min, 0, individualType, lastIndividualLeg.departure, - arrivalLocation, null); + leg = new Trip.Individual(individualType, lastIndividualLeg.departure, lastIndividualLeg.departureTime, + arrivalLocation, new Date(plannedArrivalTime), null, 0); } else { - leg = new Trip.Individual(min, 0, individualType, departureLocation, arrivalLocation, null); + leg = new Trip.Individual(individualType, departureLocation, new Date(plannedDepartureTime), arrivalLocation, + new Date(plannedArrivalTime), null, 0); } } else if (type == 2) diff --git a/enabler/src/de/schildbach/pte/SadProvider.java b/enabler/src/de/schildbach/pte/SadProvider.java index 1815a79a..c0e02b13 100644 --- a/enabler/src/de/schildbach/pte/SadProvider.java +++ b/enabler/src/de/schildbach/pte/SadProvider.java @@ -416,9 +416,10 @@ public class SadProvider extends AbstractNetworkProvider { // Add footway to legs list if (isFootway) { // NOTE: path is set to null - legs.add(new Trip.Individual(Integer.parseInt(tratto.getPropertyAsString("durata").split(":")[1]), 0, Trip.Individual.Type.WALK, - soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), soapToLocation((SoapObject) tratto - .getProperty("nodo_arrivo")), null)); + throw new UnsupportedOperationException(); +// legs.add(new Trip.Individual(Integer.parseInt(tratto.getPropertyAsString("durata").split(":")[1]), 0, Trip.Individual.Type.WALK, +// soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), soapToLocation((SoapObject) tratto +// .getProperty("nodo_arrivo")), null)); } // Add trip to legs list diff --git a/enabler/src/de/schildbach/pte/dto/Trip.java b/enabler/src/de/schildbach/pte/dto/Trip.java index a9afc75a..9e4c1e1d 100644 --- a/enabler/src/de/schildbach/pte/dto/Trip.java +++ b/enabler/src/de/schildbach/pte/dto/Trip.java @@ -52,19 +52,10 @@ public final class Trip implements Serializable public Date getFirstDepartureTime() { - if (legs != null) - { - int mins = 0; - for (final Leg leg : legs) - { - if (leg instanceof Individual) - mins += ((Individual) leg).min; - else if (leg instanceof Public) - return new Date(((Public) leg).getDepartureTime().getTime() - 1000 * 60 * mins); - } - } - - return null; + if (legs != null && !legs.isEmpty()) + return legs.get(0).departureTime; + else + return null; } public Public getFirstPublicLeg() @@ -88,20 +79,10 @@ public final class Trip implements Serializable public Date getLastArrivalTime() { - if (legs != null) - { - int mins = 0; - for (int i = legs.size() - 1; i >= 0; i--) - { - final Leg leg = legs.get(i); - if (leg instanceof Individual) - mins += ((Individual) leg).min; - else if (leg instanceof Public) - return new Date(((Public) leg).getArrivalTime().getTime() + 1000 * 60 * mins); - } - } - - return null; + if (legs != null && !legs.isEmpty()) + return legs.get(legs.size() - 1).arrivalTime; + else + return null; } public Public getLastPublicLeg() @@ -207,14 +188,24 @@ public final class Trip implements Serializable private static final long serialVersionUID = 8498461220084523265L; public final Location departure; + public final Date departureTime; public final Location arrival; + public final Date arrivalTime; public List path; + public final int min; - public Leg(final Location departure, final Location arrival, final List path) + public Leg(final Location departure, final Date departureTime, final Location arrival, final Date arrivalTime, final List path) { this.departure = departure; + this.departureTime = departureTime; this.arrival = arrival; + this.arrivalTime = arrivalTime; this.path = path; + + if (arrivalTime != null && departureTime != null) + this.min = (int) ((arrivalTime.getTime() - departureTime.getTime()) / 1000 / 60); + else + this.min = 0; } } @@ -232,7 +223,7 @@ public final class Trip implements Serializable public Public(final Line line, final Location destination, final Stop departureStop, final Stop arrivalStop, final List intermediateStops, final List path, final String message) { - super(departureStop != null ? departureStop.location : null, arrivalStop != null ? arrivalStop.location : null, path); + super(departureStop.location, departureStop.getDepartureTime(), arrivalStop.location, arrivalStop.getArrivalTime(), path); this.line = line; this.destination = destination; @@ -323,39 +314,38 @@ public final class Trip implements Serializable public final static class Individual extends Leg { - private static final long serialVersionUID = -6651381862837233925L; - - public final int min; - public final int distance; - public final Type type; - public enum Type { WALK, BIKE, CAR, TRANSFER } - public Individual(final int min, final int distance, final Type type, final Location departure, final Location arrival, final List path) - { - super(departure, arrival, path); + private static final long serialVersionUID = -6651381862837233925L; + + public final Type type; + public final int distance; + + public Individual(final Type type, final Location departure, final Date departureTime, final Location arrival, final Date arrivalTime, + final List path, final int distance) + { + super(departure, departureTime, arrival, arrivalTime, path); - this.min = min; - this.distance = distance; this.type = type; + this.distance = distance; } @Override public String toString() { final StringBuilder builder = new StringBuilder(getClass().getName() + "["); - builder.append("min=").append(min); - builder.append(","); - builder.append("distance=").append(distance); - builder.append(","); builder.append("type=").append(type); builder.append(","); builder.append("departure=").append(departure.toDebugString()); builder.append(","); builder.append("arrival=").append(arrival.toDebugString()); + builder.append(","); + builder.append("distance=").append(distance); + builder.append(","); + builder.append("min=").append(min); builder.append("]"); return builder.toString(); }