mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-18 00:09:55 +00:00
dynamically determine first trip departure time and last trip arrival time of connection
git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@840 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
parent
b089e441e3
commit
db3510f3d6
5 changed files with 33 additions and 63 deletions
|
@ -1731,9 +1731,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
|
|||
XmlPullUtil.enter(pp, "itdPartialRouteList");
|
||||
final List<Connection.Part> parts = new LinkedList<Connection.Part>();
|
||||
Location firstDeparture = null;
|
||||
Date firstDepartureTime = null;
|
||||
Location lastArrival = null;
|
||||
Date lastArrivalTime = null;
|
||||
|
||||
while (XmlPullUtil.test(pp, "itdPartialRoute"))
|
||||
{
|
||||
|
@ -1753,8 +1751,6 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
|
|||
XmlPullUtil.require(pp, "itdDateTime");
|
||||
processItdDateTime(pp, time);
|
||||
final Date departureTime = time.getTime();
|
||||
if (firstDepartureTime == null)
|
||||
firstDepartureTime = departureTime;
|
||||
final Date departureTargetTime;
|
||||
if (XmlPullUtil.test(pp, "itdDateTimeTarget"))
|
||||
{
|
||||
|
@ -1780,7 +1776,6 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
|
|||
XmlPullUtil.require(pp, "itdDateTime");
|
||||
processItdDateTime(pp, time);
|
||||
final Date arrivalTime = time.getTime();
|
||||
lastArrivalTime = arrivalTime;
|
||||
final Date arrivalTargetTime;
|
||||
if (XmlPullUtil.test(pp, "itdDateTimeTarget"))
|
||||
{
|
||||
|
@ -1970,8 +1965,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
|
|||
}
|
||||
XmlPullUtil.exit(pp, "itdFare");
|
||||
}
|
||||
connections.add(new Connection(id, uri, firstDepartureTime, lastArrivalTime, firstDeparture, lastArrival, parts,
|
||||
fares.isEmpty() ? null : fares, null));
|
||||
connections.add(new Connection(id, uri, firstDeparture, lastArrival, parts, fares.isEmpty() ? null : fares, null));
|
||||
XmlPullUtil.exit(pp, "itdRoute");
|
||||
}
|
||||
|
||||
|
|
|
@ -832,8 +832,6 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
|
|||
XmlPullUtil.exit(pp, "Overview");
|
||||
|
||||
final List<Connection.Part> parts = new ArrayList<Connection.Part>(4);
|
||||
Date firstDepartureTime = null;
|
||||
Date lastArrivalTime = null;
|
||||
|
||||
XmlPullUtil.enter(pp, "ConSectionList");
|
||||
|
||||
|
@ -1009,17 +1007,13 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
|
|||
parts.add(new Connection.Footway(min, sectionDeparture, sectionArrival, null));
|
||||
}
|
||||
}
|
||||
|
||||
if (firstDepartureTime == null)
|
||||
firstDepartureTime = departureTime;
|
||||
lastArrivalTime = arrivalTime;
|
||||
}
|
||||
|
||||
XmlPullUtil.exit(pp, "ConSectionList");
|
||||
|
||||
XmlPullUtil.exit(pp, "Connection");
|
||||
|
||||
connections.add(new Connection(id, null, firstDepartureTime, lastArrivalTime, departure, arrival, parts, null, capacity));
|
||||
connections.add(new Connection(id, null, departure, arrival, parts, null, capacity));
|
||||
}
|
||||
|
||||
XmlPullUtil.exit(pp);
|
||||
|
|
|
@ -48,8 +48,6 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
public static final String OLD_NETWORK_ID = "mobile.bahn.de";
|
||||
private static final String API_BASE = "http://mobile.bahn.de/bin/mobil/";
|
||||
|
||||
private static final long PARSER_DAY_ROLLOVER_THRESHOLD_MS = 12 * 60 * 60 * 1000;
|
||||
|
||||
public BahnProvider()
|
||||
{
|
||||
super("http://reiseauskunft.bahn.de/bin/extxml.exe", 14, null);
|
||||
|
@ -353,24 +351,7 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
if (mConFine.matches())
|
||||
{
|
||||
final String link = ParserUtils.resolveEntities(mConFine.group(1));
|
||||
final Calendar departureTime = new GregorianCalendar(timeZone());
|
||||
departureTime.setTimeInMillis(currentDate.getTimeInMillis());
|
||||
ParserUtils.parseEuropeanTime(departureTime, mConFine.group(2));
|
||||
if (!connections.isEmpty())
|
||||
{
|
||||
final long diff = departureTime.getTimeInMillis() - connections.get(connections.size() - 1).departureTime.getTime();
|
||||
if (diff > PARSER_DAY_ROLLOVER_THRESHOLD_MS)
|
||||
departureTime.add(Calendar.DAY_OF_YEAR, -1);
|
||||
else if (diff < -PARSER_DAY_ROLLOVER_THRESHOLD_MS)
|
||||
departureTime.add(Calendar.DAY_OF_YEAR, 1);
|
||||
}
|
||||
final Calendar arrivalTime = new GregorianCalendar(timeZone());
|
||||
arrivalTime.setTimeInMillis(currentDate.getTimeInMillis());
|
||||
ParserUtils.parseEuropeanTime(arrivalTime, mConFine.group(3));
|
||||
if (departureTime.after(arrivalTime))
|
||||
arrivalTime.add(Calendar.DAY_OF_YEAR, 1);
|
||||
final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime.getTime(),
|
||||
arrivalTime.getTime(), from, to, null, null, null);
|
||||
final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, from, to, null, null, null);
|
||||
connections.add(connection);
|
||||
}
|
||||
else
|
||||
|
@ -429,9 +410,7 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
{
|
||||
final List<Connection.Part> parts = new ArrayList<Connection.Part>(4);
|
||||
|
||||
Date firstDepartureTime = null;
|
||||
Location firstDeparture = null;
|
||||
Date lastArrivalTime = null;
|
||||
Location lastArrival = null;
|
||||
|
||||
final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(mHead.group(1));
|
||||
|
@ -474,11 +453,7 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
parts.add(new Connection.Trip(line, null, departureTime.getTime(), null, departurePosition, departure, arrivalTime
|
||||
.getTime(), null, arrivalPosition, arrival, null, null));
|
||||
|
||||
if (firstDepartureTime == null)
|
||||
firstDepartureTime = departureTime.getTime();
|
||||
|
||||
lastArrival = arrival;
|
||||
lastArrivalTime = arrivalTime.getTime();
|
||||
}
|
||||
else if (mDetFine.group(10) != null)
|
||||
{
|
||||
|
@ -512,13 +487,8 @@ public final class BahnProvider extends AbstractHafasProvider
|
|||
}
|
||||
}
|
||||
|
||||
// verify
|
||||
if (firstDepartureTime == null || lastArrivalTime == null)
|
||||
throw new IllegalStateException("could not parse all parts of:\n" + mHead.group(1) + "\n" + parts);
|
||||
|
||||
return new GetConnectionDetailsResult(new GregorianCalendar(timeZone()).getTime(), new Connection(
|
||||
AbstractHafasProvider.extractConnectionId(uri), uri, firstDepartureTime, lastArrivalTime, firstDeparture, lastArrival, parts,
|
||||
null, null));
|
||||
AbstractHafasProvider.extractConnectionId(uri), uri, firstDeparture, lastArrival, parts, null, null));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -741,9 +741,6 @@ public final class BvgProvider extends AbstractHafasProvider
|
|||
ParserUtils.parseGermanDate(time, mConFine.group(1));
|
||||
Date lastTime = null;
|
||||
|
||||
Date firstDepartureTime = null;
|
||||
Date lastArrivalTime = null;
|
||||
|
||||
final String id = mConFine.group(2);
|
||||
|
||||
final String[] trackParts = mConFine.group(3).split("\\*");
|
||||
|
@ -788,8 +785,6 @@ public final class BvgProvider extends AbstractHafasProvider
|
|||
time.add(Calendar.DAY_OF_YEAR, 1);
|
||||
lastTime = time.getTime();
|
||||
final Date departureTime = time.getTime();
|
||||
if (firstDepartureTime == null)
|
||||
firstDepartureTime = departureTime;
|
||||
|
||||
final String[] tArr2 = track.size() == 1 ? tracks.get(iTrack + 1).get(0) : tArr;
|
||||
|
||||
|
@ -800,7 +795,6 @@ public final class BvgProvider extends AbstractHafasProvider
|
|||
time.add(Calendar.DAY_OF_YEAR, 1);
|
||||
lastTime = time.getTime();
|
||||
final Date arrivalTime = time.getTime();
|
||||
lastArrivalTime = arrivalTime;
|
||||
|
||||
final int mins = (int) ((arrivalTime.getTime() - departureTime.getTime()) / 1000 / 60);
|
||||
|
||||
|
@ -813,8 +807,6 @@ public final class BvgProvider extends AbstractHafasProvider
|
|||
time.add(Calendar.DAY_OF_YEAR, 1);
|
||||
lastTime = time.getTime();
|
||||
final Date departureTime = time.getTime();
|
||||
if (firstDepartureTime == null)
|
||||
firstDepartureTime = departureTime;
|
||||
|
||||
final List<Stop> intermediateStops = new LinkedList<Stop>();
|
||||
for (final String[] tStop : track.subList(1, track.size() - 1))
|
||||
|
@ -833,7 +825,6 @@ public final class BvgProvider extends AbstractHafasProvider
|
|||
time.add(Calendar.DAY_OF_YEAR, 1);
|
||||
lastTime = time.getTime();
|
||||
final Date arrivalTime = time.getTime();
|
||||
lastArrivalTime = arrivalTime;
|
||||
|
||||
final String arrivalPosition = !mDetails.group(4).equals(" ") ? ParserUtils.resolveEntities(mDetails.group(4))
|
||||
: null;
|
||||
|
@ -857,7 +848,7 @@ public final class BvgProvider extends AbstractHafasProvider
|
|||
}
|
||||
}
|
||||
|
||||
connections.add(new Connection(id, firstUri, firstDepartureTime, lastArrivalTime, from, to, parts, null, null));
|
||||
connections.add(new Connection(id, firstUri, from, to, parts, null, null));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -31,21 +31,17 @@ public final class Connection implements Serializable
|
|||
|
||||
public final String id;
|
||||
public final String link;
|
||||
public final Date departureTime;
|
||||
public final Date arrivalTime;
|
||||
public final Location from;
|
||||
public final Location to;
|
||||
public final List<Part> parts;
|
||||
public final List<Fare> fares;
|
||||
public final int[] capacity;
|
||||
|
||||
public Connection(final String id, final String link, final Date departureTime, final Date arrivalTime, final Location from, final Location to,
|
||||
final List<Part> parts, final List<Fare> fares, final int[] capacity)
|
||||
public Connection(final String id, final String link, final Location from, final Location to, final List<Part> parts, final List<Fare> fares,
|
||||
final int[] capacity)
|
||||
{
|
||||
this.id = id;
|
||||
this.link = link;
|
||||
this.departureTime = departureTime;
|
||||
this.arrivalTime = arrivalTime;
|
||||
this.from = from;
|
||||
this.to = to;
|
||||
this.parts = parts;
|
||||
|
@ -53,11 +49,36 @@ public final class Connection implements Serializable
|
|||
this.capacity = capacity;
|
||||
}
|
||||
|
||||
public Date getFirstTripDepartureTime()
|
||||
{
|
||||
if (parts != null)
|
||||
for (final Part part : parts)
|
||||
if (part instanceof Trip)
|
||||
return ((Trip) part).getDepartureTime();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public Date getFirstTripArrivalTime()
|
||||
{
|
||||
if (parts != null)
|
||||
{
|
||||
for (int i = parts.size() - 1; i >= 0; i--)
|
||||
{
|
||||
final Part part = parts.get(i);
|
||||
if (part instanceof Trip)
|
||||
return ((Trip) part).getArrivalTime();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
final SimpleDateFormat FORMAT = new SimpleDateFormat("E HH:mm");
|
||||
return id + " " + FORMAT.format(departureTime) + "-" + FORMAT.format(arrivalTime);
|
||||
return id + " " + FORMAT.format(getFirstTripDepartureTime()) + "-" + FORMAT.format(getFirstTripArrivalTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue