mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-18 16:29:51 +00:00
AbstractEfaProvider: Parse delay in <itdTrain> and <itdNoTrain>.
This commit is contained in:
parent
1b10571183
commit
f7a5a77b2f
1 changed files with 51 additions and 45 deletions
|
@ -1499,21 +1499,10 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
|
||||||
XmlPullUtil.enter(pp, "itdServingLines");
|
XmlPullUtil.enter(pp, "itdServingLines");
|
||||||
while (XmlPullUtil.test(pp, "itdServingLine")) {
|
while (XmlPullUtil.test(pp, "itdServingLine")) {
|
||||||
final String assignedStopId = XmlPullUtil.optAttr(pp, "assignedStopID", null);
|
final String assignedStopId = XmlPullUtil.optAttr(pp, "assignedStopID", null);
|
||||||
final String destinationName = normalizeLocationName(
|
final LineDestinationAndCancelled lineDestinationAndCancelled = processItdServingLine(
|
||||||
XmlPullUtil.optAttr(pp, "direction", null));
|
pp);
|
||||||
final String destinationIdStr = XmlPullUtil.optAttr(pp, "destID", null);
|
final LineDestination lineDestination = new LineDestination(
|
||||||
final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null;
|
lineDestinationAndCancelled.line, lineDestinationAndCancelled.destination);
|
||||||
final Location destination;
|
|
||||||
if (destinationId != null)
|
|
||||||
destination = new Location(LocationType.STATION, destinationId, null,
|
|
||||||
destinationName);
|
|
||||||
else if (destinationId == null && destinationName != null)
|
|
||||||
destination = new Location(LocationType.ANY, null, null, destinationName);
|
|
||||||
else
|
|
||||||
destination = null;
|
|
||||||
|
|
||||||
final LineDestination line = new LineDestination(processItdServingLine(pp),
|
|
||||||
destination);
|
|
||||||
|
|
||||||
StationDepartures assignedStationDepartures;
|
StationDepartures assignedStationDepartures;
|
||||||
if (assignedStopId == null)
|
if (assignedStopId == null)
|
||||||
|
@ -1529,8 +1518,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
|
||||||
|
|
||||||
final List<LineDestination> assignedStationDeparturesLines = checkNotNull(
|
final List<LineDestination> assignedStationDeparturesLines = checkNotNull(
|
||||||
assignedStationDepartures.lines);
|
assignedStationDepartures.lines);
|
||||||
if (!assignedStationDeparturesLines.contains(line))
|
if (!assignedStationDeparturesLines.contains(lineDestination))
|
||||||
assignedStationDeparturesLines.add(line);
|
assignedStationDeparturesLines.add(lineDestination);
|
||||||
}
|
}
|
||||||
XmlPullUtil.skipExit(pp, "itdServingLines");
|
XmlPullUtil.skipExit(pp, "itdServingLines");
|
||||||
} else {
|
} else {
|
||||||
|
@ -1578,29 +1567,21 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
|
||||||
|
|
||||||
XmlPullUtil.require(pp, "itdServingLine");
|
XmlPullUtil.require(pp, "itdServingLine");
|
||||||
final boolean isRealtime = XmlPullUtil.attr(pp, "realtime").equals("1");
|
final boolean isRealtime = XmlPullUtil.attr(pp, "realtime").equals("1");
|
||||||
final String destinationName = normalizeLocationName(
|
final LineDestinationAndCancelled lineDestinationAndCancelled = processItdServingLine(pp);
|
||||||
XmlPullUtil.optAttr(pp, "direction", null));
|
|
||||||
final String destinationIdStr = XmlPullUtil.optAttr(pp, "destID", null);
|
|
||||||
final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null;
|
|
||||||
final Location destination;
|
|
||||||
if (destinationId != null)
|
|
||||||
destination = new Location(LocationType.STATION, destinationId, null, destinationName);
|
|
||||||
else if (destinationId == null && destinationName != null)
|
|
||||||
destination = new Location(LocationType.ANY, null, null, destinationName);
|
|
||||||
else
|
|
||||||
destination = null;
|
|
||||||
final Line line = processItdServingLine(pp);
|
|
||||||
|
|
||||||
if (isRealtime && !predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY))
|
if (isRealtime && !predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY))
|
||||||
predictedDepartureTime.setTimeInMillis(plannedDepartureTime.getTimeInMillis());
|
predictedDepartureTime.setTimeInMillis(plannedDepartureTime.getTimeInMillis());
|
||||||
|
|
||||||
XmlPullUtil.skipExit(pp, "itdDeparture");
|
XmlPullUtil.skipExit(pp, "itdDeparture");
|
||||||
|
|
||||||
final Departure departure = new Departure(plannedDepartureTime.getTime(),
|
if (!lineDestinationAndCancelled.cancelled) {
|
||||||
predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY)
|
final Departure departure = new Departure(plannedDepartureTime.getTime(),
|
||||||
? predictedDepartureTime.getTime() : null,
|
predictedDepartureTime.isSet(Calendar.HOUR_OF_DAY)
|
||||||
line, position, destination, null, null);
|
? predictedDepartureTime.getTime() : null,
|
||||||
assignedStationDepartures.departures.add(departure);
|
lineDestinationAndCancelled.line, position,
|
||||||
|
lineDestinationAndCancelled.destination, null, null);
|
||||||
|
assignedStationDepartures.departures.add(departure);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XmlPullUtil.skipExit(pp, "itdDepartureList");
|
XmlPullUtil.skipExit(pp, "itdDepartureList");
|
||||||
|
@ -1875,8 +1856,33 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
|
||||||
XmlPullUtil.next(pp);
|
XmlPullUtil.next(pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Line processItdServingLine(final XmlPullParser pp) throws XmlPullParserException, IOException {
|
private static class LineDestinationAndCancelled {
|
||||||
|
public final Line line;
|
||||||
|
public final Location destination;
|
||||||
|
public final boolean cancelled;
|
||||||
|
|
||||||
|
public LineDestinationAndCancelled(final Line line, final Location destination, final boolean cancelled) {
|
||||||
|
this.line = line;
|
||||||
|
this.destination = destination;
|
||||||
|
this.cancelled = cancelled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private LineDestinationAndCancelled processItdServingLine(final XmlPullParser pp)
|
||||||
|
throws XmlPullParserException, IOException {
|
||||||
XmlPullUtil.require(pp, "itdServingLine");
|
XmlPullUtil.require(pp, "itdServingLine");
|
||||||
|
|
||||||
|
final String destinationName = normalizeLocationName(XmlPullUtil.optAttr(pp, "direction", null));
|
||||||
|
final String destinationIdStr = XmlPullUtil.optAttr(pp, "destID", null);
|
||||||
|
final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null;
|
||||||
|
final Location destination;
|
||||||
|
if (destinationId != null)
|
||||||
|
destination = new Location(LocationType.STATION, destinationId, null, destinationName);
|
||||||
|
else if (destinationId == null && destinationName != null)
|
||||||
|
destination = new Location(LocationType.ANY, null, null, destinationName);
|
||||||
|
else
|
||||||
|
destination = null;
|
||||||
|
|
||||||
final String slMotType = XmlPullUtil.attr(pp, "motType");
|
final String slMotType = XmlPullUtil.attr(pp, "motType");
|
||||||
final String slSymbol = XmlPullUtil.optAttr(pp, "symbol", null);
|
final String slSymbol = XmlPullUtil.optAttr(pp, "symbol", null);
|
||||||
final String slNumber = XmlPullUtil.optAttr(pp, "number", null);
|
final String slNumber = XmlPullUtil.optAttr(pp, "number", null);
|
||||||
|
@ -1889,19 +1895,17 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
|
||||||
String itdTrainName = null;
|
String itdTrainName = null;
|
||||||
String itdTrainType = null;
|
String itdTrainType = null;
|
||||||
String itdMessage = null;
|
String itdMessage = null;
|
||||||
|
String itdDelay = null;
|
||||||
if (XmlPullUtil.test(pp, "itdTrain")) {
|
if (XmlPullUtil.test(pp, "itdTrain")) {
|
||||||
itdTrainName = XmlPullUtil.optAttr(pp, "name", null);
|
itdTrainName = XmlPullUtil.optAttr(pp, "name", null);
|
||||||
itdTrainType = XmlPullUtil.attr(pp, "type");
|
itdTrainType = XmlPullUtil.attr(pp, "type");
|
||||||
if (!pp.isEmptyElementTag()) {
|
itdDelay = XmlPullUtil.optAttr(pp, "delay", null);
|
||||||
XmlPullUtil.enter(pp, "itdTrain");
|
XmlPullUtil.requireSkip(pp, "itdTrain");
|
||||||
XmlPullUtil.skipExit(pp, "itdTrain");
|
|
||||||
} else {
|
|
||||||
XmlPullUtil.next(pp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (XmlPullUtil.test(pp, "itdNoTrain")) {
|
if (XmlPullUtil.test(pp, "itdNoTrain")) {
|
||||||
itdTrainName = XmlPullUtil.optAttr(pp, "name", null);
|
itdTrainName = XmlPullUtil.optAttr(pp, "name", null);
|
||||||
itdTrainType = XmlPullUtil.optAttr(pp, "type", null);
|
itdTrainType = XmlPullUtil.optAttr(pp, "type", null);
|
||||||
|
itdDelay = XmlPullUtil.optAttr(pp, "delay", null);
|
||||||
if (!pp.isEmptyElementTag()) {
|
if (!pp.isEmptyElementTag()) {
|
||||||
final String text = XmlPullUtil.valueTag(pp, "itdNoTrain");
|
final String text = XmlPullUtil.valueTag(pp, "itdNoTrain");
|
||||||
if (itdTrainName != null && itdTrainName.toLowerCase().contains("ruf"))
|
if (itdTrainName != null && itdTrainName.toLowerCase().contains("ruf"))
|
||||||
|
@ -1920,11 +1924,13 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
|
||||||
|
|
||||||
final String trainType = ParserUtils.firstNotEmpty(slTrainType, itdTrainType);
|
final String trainType = ParserUtils.firstNotEmpty(slTrainType, itdTrainType);
|
||||||
final String trainName = ParserUtils.firstNotEmpty(slTrainName, itdTrainName);
|
final String trainName = ParserUtils.firstNotEmpty(slTrainName, itdTrainName);
|
||||||
|
final Line slLine = parseLine(slStateless, divaNetwork, slMotType, slSymbol, slNumber, slNumber, trainType,
|
||||||
final Line line = parseLine(slStateless, divaNetwork, slMotType, slSymbol, slNumber, slNumber, trainType,
|
|
||||||
slTrainNum, trainName);
|
slTrainNum, trainName);
|
||||||
return new Line(line.id, line.network, line.product, line.label,
|
|
||||||
lineStyle(line.network, line.product, line.label), itdMessage);
|
final Line line = new Line(slLine.id, slLine.network, slLine.product, slLine.label,
|
||||||
|
lineStyle(slLine.network, slLine.product, slLine.label), itdMessage);
|
||||||
|
final boolean cancelled = "-9999".equals(itdDelay);
|
||||||
|
return new LineDestinationAndCancelled(line, destination, cancelled);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Pattern P_STATION_NAME_WHITESPACE = Pattern.compile("\\s+");
|
private static final Pattern P_STATION_NAME_WHITESPACE = Pattern.compile("\\s+");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue