individual legs have departure and arrival times, too

This commit is contained in:
Andreas Schildbach 2013-06-13 12:11:14 +02:00
parent 3aab4006d5
commit 871b08f13a
4 changed files with 51 additions and 62 deletions

View file

@ -1937,7 +1937,6 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
final String productName = pp.getAttributeValue(null, "productName"); final String productName = pp.getAttributeValue(null, "productName");
if ("IT".equals(partialRouteType) || "Fussweg".equals(productName) || "Taxi".equals(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; final Trip.Individual.Type type = "Taxi".equals(productName) ? Trip.Individual.Type.TRANSFER : Trip.Individual.Type.WALK;
XmlPullUtil.enter(pp, "itdMeansOfTransport"); 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); final Trip.Individual lastIndividual = (Trip.Individual) legs.remove(legs.size() - 1);
if (path != null && lastIndividual.path != null) if (path != null && lastIndividual.path != null)
path.addAll(0, lastIndividual.path); 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 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 else if ("gesicherter Anschluss".equals(productName) || "nicht umsteigen".equals(productName)) // type97

View file

@ -1145,7 +1145,6 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
// journey // journey
final Line line; final Line line;
Location destination = null; Location destination = null;
int min = 0;
List<Stop> intermediateStops = null; List<Stop> intermediateStops = null;
@ -1253,9 +1252,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
{ {
XmlPullUtil.enter(pp); XmlPullUtil.enter(pp);
XmlPullUtil.enter(pp, "Duration"); XmlPullUtil.enter(pp, "Duration");
XmlPullUtil.require(pp, "Time"); XmlPullUtil.exit(pp, "Duration");
min = parseDuration(XmlPullUtil.text(pp).substring(3, 8));
XmlPullUtil.exit(pp);
XmlPullUtil.exit(pp); XmlPullUtil.exit(pp);
line = null; line = null;
@ -1310,7 +1307,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.exit(pp, "ConSection"); 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 departure = new Stop(sectionDepartureLocation, true, departureTime, null, departurePos, null);
final Stop arrival = new Stop(sectionArrivalLocation, false, arrivalTime, null, arrivalPos, 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) if (legs.size() > 0 && legs.get(legs.size() - 1) instanceof Trip.Individual)
{ {
final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1); 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, legs.add(new Trip.Individual(Trip.Individual.Type.WALK, lastIndividualLeg.departure, lastIndividualLeg.departureTime,
sectionArrivalLocation, null)); sectionArrivalLocation, arrivalTime, null, 0));
} }
else 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; final Trip.Leg leg;
if (type == 1 /* Fussweg */|| type == 3 /* Uebergang */|| type == 4 /* Uebergang */) if (type == 1 /* Fussweg */|| type == 3 /* Uebergang */|| type == 4 /* Uebergang */)
{ {
final int min = (int) ((plannedArrivalTime - plannedDepartureTime) / 1000 / 60);
final Trip.Individual.Type individualType; final Trip.Individual.Type individualType;
if (routingType == null) if (routingType == null)
individualType = type == 1 ? Trip.Individual.Type.WALK : Trip.Individual.Type.TRANSFER; 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) if (lastLeg != null && lastLeg instanceof Trip.Individual && ((Trip.Individual) lastLeg).type == individualType)
{ {
final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1); final Trip.Individual lastIndividualLeg = (Trip.Individual) legs.remove(legs.size() - 1);
leg = new Trip.Individual(lastIndividualLeg.min + min, 0, individualType, lastIndividualLeg.departure, leg = new Trip.Individual(individualType, lastIndividualLeg.departure, lastIndividualLeg.departureTime,
arrivalLocation, null); arrivalLocation, new Date(plannedArrivalTime), null, 0);
} }
else 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) else if (type == 2)

View file

@ -416,9 +416,10 @@ public class SadProvider extends AbstractNetworkProvider {
// Add footway to legs list // Add footway to legs list
if (isFootway) { if (isFootway) {
// NOTE: path is set to null // NOTE: path is set to null
legs.add(new Trip.Individual(Integer.parseInt(tratto.getPropertyAsString("durata").split(":")[1]), 0, Trip.Individual.Type.WALK, throw new UnsupportedOperationException();
soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), soapToLocation((SoapObject) tratto // legs.add(new Trip.Individual(Integer.parseInt(tratto.getPropertyAsString("durata").split(":")[1]), 0, Trip.Individual.Type.WALK,
.getProperty("nodo_arrivo")), null)); // soapToLocation((SoapObject) tratto.getProperty("nodo_partenza")), soapToLocation((SoapObject) tratto
// .getProperty("nodo_arrivo")), null));
} }
// Add trip to legs list // Add trip to legs list

View file

@ -52,19 +52,10 @@ public final class Trip implements Serializable
public Date getFirstDepartureTime() public Date getFirstDepartureTime()
{ {
if (legs != null) if (legs != null && !legs.isEmpty())
{ return legs.get(0).departureTime;
int mins = 0; else
for (final Leg leg : legs) return null;
{
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;
} }
public Public getFirstPublicLeg() public Public getFirstPublicLeg()
@ -88,20 +79,10 @@ public final class Trip implements Serializable
public Date getLastArrivalTime() public Date getLastArrivalTime()
{ {
if (legs != null) if (legs != null && !legs.isEmpty())
{ return legs.get(legs.size() - 1).arrivalTime;
int mins = 0; else
for (int i = legs.size() - 1; i >= 0; i--) return null;
{
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;
} }
public Public getLastPublicLeg() public Public getLastPublicLeg()
@ -207,14 +188,24 @@ public final class Trip implements Serializable
private static final long serialVersionUID = 8498461220084523265L; private static final long serialVersionUID = 8498461220084523265L;
public final Location departure; public final Location departure;
public final Date departureTime;
public final Location arrival; public final Location arrival;
public final Date arrivalTime;
public List<Point> path; public List<Point> path;
public final int min;
public Leg(final Location departure, final Location arrival, final List<Point> path) public Leg(final Location departure, final Date departureTime, final Location arrival, final Date arrivalTime, final List<Point> path)
{ {
this.departure = departure; this.departure = departure;
this.departureTime = departureTime;
this.arrival = arrival; this.arrival = arrival;
this.arrivalTime = arrivalTime;
this.path = path; 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, public Public(final Line line, final Location destination, final Stop departureStop, final Stop arrivalStop,
final List<Stop> intermediateStops, final List<Point> path, final String message) final List<Stop> intermediateStops, final List<Point> 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.line = line;
this.destination = destination; this.destination = destination;
@ -323,39 +314,38 @@ public final class Trip implements Serializable
public final static class Individual extends Leg 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 public enum Type
{ {
WALK, BIKE, CAR, TRANSFER WALK, BIKE, CAR, TRANSFER
} }
public Individual(final int min, final int distance, final Type type, final Location departure, final Location arrival, final List<Point> path) private static final long serialVersionUID = -6651381862837233925L;
{
super(departure, arrival, path); 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<Point> path, final int distance)
{
super(departure, departureTime, arrival, arrivalTime, path);
this.min = min;
this.distance = distance;
this.type = type; this.type = type;
this.distance = distance;
} }
@Override @Override
public String toString() public String toString()
{ {
final StringBuilder builder = new StringBuilder(getClass().getName() + "["); 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("type=").append(type);
builder.append(","); builder.append(",");
builder.append("departure=").append(departure.toDebugString()); builder.append("departure=").append(departure.toDebugString());
builder.append(","); builder.append(",");
builder.append("arrival=").append(arrival.toDebugString()); builder.append("arrival=").append(arrival.toDebugString());
builder.append(",");
builder.append("distance=").append(distance);
builder.append(",");
builder.append("min=").append(min);
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }