Refactor XmlPullParser.getAttributeValue() to use XmlPullUtil.attr() variants.

This commit is contained in:
Andreas Schildbach 2015-01-24 16:40:13 +01:00
parent 574dd9c9a8
commit 25c2eb6176
4 changed files with 116 additions and 87 deletions

View file

@ -559,12 +559,12 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
while (XmlPullUtil.test(pp, "coordInfoItem")) while (XmlPullUtil.test(pp, "coordInfoItem"))
{ {
if (!"STOP".equals(pp.getAttributeValue(null, "type"))) if (!"STOP".equals(XmlPullUtil.attr(pp, "type")))
throw new RuntimeException("unknown type"); throw new RuntimeException("unknown type");
final String id = XmlPullUtil.attr(pp, "id"); final String id = XmlPullUtil.attr(pp, "id");
final String name = normalizeLocationName(XmlPullUtil.optAttr(pp, "name", null)); final String name = normalizeLocationName(XmlPullUtil.optAttr(pp, "name", null));
final String place = normalizeLocationName(XmlPullUtil.attr(pp, "locality")); final String place = normalizeLocationName(XmlPullUtil.optAttr(pp, "locality", null));
XmlPullUtil.enter(pp, "coordInfoItem"); XmlPullUtil.enter(pp, "coordInfoItem");
@ -787,8 +787,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
if ("any".equals(type)) if ("any".equals(type))
type = XmlPullUtil.attr(pp, "anyType"); type = XmlPullUtil.attr(pp, "anyType");
final String id = XmlPullUtil.attr(pp, "stateless"); final String id = XmlPullUtil.attr(pp, "stateless");
final String locality = normalizeLocationName(pp.getAttributeValue(null, "locality")); final String locality = normalizeLocationName(XmlPullUtil.optAttr(pp, "locality", null));
final String objectName = normalizeLocationName(pp.getAttributeValue(null, "objectName")); final String objectName = normalizeLocationName(XmlPullUtil.optAttr(pp, "objectName", null));
final String buildingName = XmlPullUtil.optAttr(pp, "buildingName", null); final String buildingName = XmlPullUtil.optAttr(pp, "buildingName", null);
final String buildingNumber = XmlPullUtil.optAttr(pp, "buildingNumber", null); final String buildingNumber = XmlPullUtil.optAttr(pp, "buildingNumber", null);
final String postCode = XmlPullUtil.optAttr(pp, "postCode", null); final String postCode = XmlPullUtil.optAttr(pp, "postCode", null);
@ -856,9 +856,9 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
private Location processItdOdvAssignedStop(final XmlPullParser pp) throws XmlPullParserException, IOException private Location processItdOdvAssignedStop(final XmlPullParser pp) throws XmlPullParserException, IOException
{ {
final String id = pp.getAttributeValue(null, "stopID"); final String id = XmlPullUtil.attr(pp, "stopID");
final Point coord = processCoordAttr(pp); final Point coord = processCoordAttr(pp);
final String place = normalizeLocationName(XmlPullUtil.attr(pp, "place")); final String place = normalizeLocationName(XmlPullUtil.optAttr(pp, "place", null));
final String name = normalizeLocationName(XmlPullUtil.optValueTag(pp, "itdOdvAssignedStop", null)); final String name = normalizeLocationName(XmlPullUtil.optValueTag(pp, "itdOdvAssignedStop", null));
if (name != null) if (name != null)
@ -957,7 +957,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
private static final Pattern P_LINE_RE = Pattern.compile("RE ?\\d+"); private static final Pattern P_LINE_RE = Pattern.compile("RE ?\\d+");
private static final Pattern P_LINE_RB = Pattern.compile("RB ?\\d+"); private static final Pattern P_LINE_RB = Pattern.compile("RB ?\\d+");
private static final Pattern P_LINE_R = Pattern.compile("R ?\\d+"); private static final Pattern P_LINE_R = Pattern.compile("R ?\\d+");
private static final Pattern P_LINE_S = Pattern.compile("^(?:%)?(S\\d+)"); private static final Pattern P_LINE_S = Pattern.compile("S ?\\d+");
private static final Pattern P_LINE_NUMBER = Pattern.compile("\\d+"); private static final Pattern P_LINE_NUMBER = Pattern.compile("\\d+");
protected String parseLine(final String mot, String symbol, final String name, final String longName, final String trainType, protected String parseLine(final String mot, String symbol, final String name, final String longName, final String trainType,
@ -1314,7 +1314,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
return "SBSB"; return "SBSB";
if ("RSB".equals(trainType)) // Regionalschnellbahn, Wien if ("RSB".equals(trainType)) // Regionalschnellbahn, Wien
return "SRSB" + trainNum; return "SRSB" + trainNum;
if ("RER".equals(trainName) && symbol.length() == 1) // Réseau Express Régional, Frankreich if ("RER".equals(trainName) && symbol != null && symbol.length() == 1) // Réseau Express Régional,
// Frankreich
return 'S' + symbol; return 'S' + symbol;
if ("S".equals(trainType)) if ("S".equals(trainType))
return "SS" + trainNum; return "SS" + trainNum;
@ -1341,9 +1342,9 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
if ("ZUG".equals(trainType) && trainNum != null) if ("ZUG".equals(trainType) && trainNum != null)
return '?' + trainNum; return '?' + trainNum;
if (trainType == null && trainName == null && P_LINE_NUMBER.matcher(symbol).matches()) if (symbol != null && P_LINE_NUMBER.matcher(symbol).matches() && trainType == null && trainName == null)
return '?' + symbol; return '?' + symbol;
if ("N".equals(trainType) && trainName == null && symbol.length() == 0) if ("N".equals(trainType) && trainName == null && symbol == null)
return "?N" + trainNum; return "?N" + trainNum;
if ("Train".equals(trainName)) if ("Train".equals(trainName))
return "?"; return "?";
@ -1357,11 +1358,12 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
} }
else if ("1".equals(mot)) else if ("1".equals(mot))
{ {
final Matcher m = P_LINE_S.matcher(name); if (symbol != null && P_LINE_S.matcher(symbol).matches())
if (m.find()) return "S" + symbol;
return 'S' + m.group(1); if (name != null && P_LINE_S.matcher(name).matches())
else return "S" + name;
return 'S' + name; if ("S-Bahn".equals(trainName) && trainNum == null)
return "SS";
} }
else if ("2".equals(mot)) else if ("2".equals(mot))
{ {
@ -1373,7 +1375,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
} }
else if ("5".equals(mot) || "6".equals(mot) || "7".equals(mot) || "10".equals(mot)) else if ("5".equals(mot) || "6".equals(mot) || "7".equals(mot) || "10".equals(mot))
{ {
if (name.equals("Schienenersatzverkehr")) if ("Schienenersatzverkehr".equals(name))
return "BSEV"; return "BSEV";
else else
return 'B' + name; return 'B' + name;
@ -1500,8 +1502,8 @@ 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 = pp.getAttributeValue(null, "assignedStopID"); final String assignedStopId = XmlPullUtil.optAttr(pp, "assignedStopID", null);
final String destinationName = normalizeLocationName(pp.getAttributeValue(null, "direction")); final String destinationName = normalizeLocationName(XmlPullUtil.attr(pp, "direction"));
final String destinationId = XmlPullUtil.optAttr(pp, "destID", null); final String destinationId = XmlPullUtil.optAttr(pp, "destID", null);
final Location destination = new Location(destinationId != null ? LocationType.STATION : LocationType.ANY, destinationId, null, final Location destination = new Location(destinationId != null ? LocationType.STATION : LocationType.ANY, destinationId, null,
destinationName); destinationName);
@ -1562,8 +1564,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
XmlPullUtil.require(pp, "itdServingLine"); XmlPullUtil.require(pp, "itdServingLine");
final boolean isRealtime = pp.getAttributeValue(null, "realtime").equals("1"); final boolean isRealtime = XmlPullUtil.attr(pp, "realtime").equals("1");
final String destinationName = normalizeLocationName(pp.getAttributeValue(null, "direction")); final String destinationName = normalizeLocationName(XmlPullUtil.attr(pp, "direction"));
final String destinationIdStr = XmlPullUtil.optAttr(pp, "destID", null); final String destinationIdStr = XmlPullUtil.optAttr(pp, "destID", null);
final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null; final String destinationId = !"-1".equals(destinationIdStr) ? destinationIdStr : null;
final Location destination = new Location(destinationId != null ? LocationType.STATION : LocationType.ANY, destinationId, null, final Location destination = new Location(destinationId != null ? LocationType.STATION : LocationType.ANY, destinationId, null,
@ -1807,15 +1809,15 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
private Location processItdPointAttributes(final XmlPullParser pp) private Location processItdPointAttributes(final XmlPullParser pp)
{ {
final String id = pp.getAttributeValue(null, "stopID"); final String id = XmlPullUtil.attr(pp, "stopID");
String place = normalizeLocationName(pp.getAttributeValue(null, "locality")); String place = normalizeLocationName(XmlPullUtil.optAttr(pp, "locality", null));
if (place == null) if (place == null)
place = normalizeLocationName(pp.getAttributeValue(null, "place")); place = normalizeLocationName(XmlPullUtil.optAttr(pp, "place", null));
String name = normalizeLocationName(pp.getAttributeValue(null, "nameWO")); String name = normalizeLocationName(XmlPullUtil.optAttr(pp, "nameWO", null));
if (name == null) if (name == null)
name = normalizeLocationName(pp.getAttributeValue(null, "name")); name = normalizeLocationName(XmlPullUtil.optAttr(pp, "name", null));
final Point coord = processCoordAttr(pp); final Point coord = processCoordAttr(pp);
@ -1837,10 +1839,10 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
private boolean processItdDate(final XmlPullParser pp, final Calendar calendar) throws XmlPullParserException, IOException private boolean processItdDate(final XmlPullParser pp, final Calendar calendar) throws XmlPullParserException, IOException
{ {
XmlPullUtil.require(pp, "itdDate"); XmlPullUtil.require(pp, "itdDate");
final int year = Integer.parseInt(pp.getAttributeValue(null, "year")); final int year = XmlPullUtil.intAttr(pp, "year");
final int month = Integer.parseInt(pp.getAttributeValue(null, "month")) - 1; final int month = XmlPullUtil.intAttr(pp, "month") - 1;
final int day = Integer.parseInt(pp.getAttributeValue(null, "day")); final int day = XmlPullUtil.intAttr(pp, "day");
final int weekday = Integer.parseInt(pp.getAttributeValue(null, "weekday")); final int weekday = XmlPullUtil.intAttr(pp, "weekday");
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
if (weekday < 0) if (weekday < 0)
@ -1863,21 +1865,21 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
private void processItdTime(final XmlPullParser pp, final Calendar calendar) throws XmlPullParserException, IOException private void processItdTime(final XmlPullParser pp, final Calendar calendar) throws XmlPullParserException, IOException
{ {
XmlPullUtil.require(pp, "itdTime"); XmlPullUtil.require(pp, "itdTime");
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(pp.getAttributeValue(null, "hour"))); calendar.set(Calendar.HOUR_OF_DAY, XmlPullUtil.intAttr(pp, "hour"));
calendar.set(Calendar.MINUTE, Integer.parseInt(pp.getAttributeValue(null, "minute"))); calendar.set(Calendar.MINUTE, XmlPullUtil.intAttr(pp, "minute"));
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
} }
private Line processItdServingLine(final XmlPullParser pp) throws XmlPullParserException, IOException private Line processItdServingLine(final XmlPullParser pp) throws XmlPullParserException, IOException
{ {
XmlPullUtil.require(pp, "itdServingLine"); XmlPullUtil.require(pp, "itdServingLine");
final String slMotType = pp.getAttributeValue(null, "motType"); final String slMotType = XmlPullUtil.attr(pp, "motType");
final String slSymbol = pp.getAttributeValue(null, "symbol"); final String slSymbol = XmlPullUtil.optAttr(pp, "symbol", null);
final String slNumber = pp.getAttributeValue(null, "number"); final String slNumber = XmlPullUtil.optAttr(pp, "number", null);
final String slStateless = pp.getAttributeValue(null, "stateless"); final String slStateless = XmlPullUtil.optAttr(pp, "stateless", null);
final String slTrainType = pp.getAttributeValue(null, "trainType"); final String slTrainType = XmlPullUtil.optAttr(pp, "trainType", null);
final String slTrainName = pp.getAttributeValue(null, "trainName"); final String slTrainName = XmlPullUtil.optAttr(pp, "trainName", null);
final String slTrainNum = pp.getAttributeValue(null, "trainNum"); final String slTrainNum = XmlPullUtil.optAttr(pp, "trainNum", null);
XmlPullUtil.enter(pp, "itdServingLine"); XmlPullUtil.enter(pp, "itdServingLine");
String itdTrainName = null; String itdTrainName = null;
@ -1885,8 +1887,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
String itdMessage = null; String itdMessage = null;
if (XmlPullUtil.test(pp, "itdTrain")) if (XmlPullUtil.test(pp, "itdTrain"))
{ {
itdTrainName = pp.getAttributeValue(null, "name"); itdTrainName = XmlPullUtil.attr(pp, "name");
itdTrainType = pp.getAttributeValue(null, "type"); itdTrainType = XmlPullUtil.attr(pp, "type");
if (!pp.isEmptyElementTag()) if (!pp.isEmptyElementTag())
{ {
XmlPullUtil.enter(pp, "itdTrain"); XmlPullUtil.enter(pp, "itdTrain");
@ -1899,8 +1901,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
} }
if (XmlPullUtil.test(pp, "itdNoTrain")) if (XmlPullUtil.test(pp, "itdNoTrain"))
{ {
itdTrainName = pp.getAttributeValue(null, "name"); itdTrainName = XmlPullUtil.optAttr(pp, "name", null);
itdTrainType = pp.getAttributeValue(null, "type"); itdTrainType = XmlPullUtil.optAttr(pp, "type", null);
if (!pp.isEmptyElementTag()) if (!pp.isEmptyElementTag())
{ {
final String text = XmlPullUtil.valueTag(pp, "itdNoTrain"); final String text = XmlPullUtil.valueTag(pp, "itdNoTrain");
@ -2224,7 +2226,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
while (XmlPullUtil.test(pp, "itdOdv")) while (XmlPullUtil.test(pp, "itdOdv"))
{ {
final String usage = pp.getAttributeValue(null, "usage"); final String usage = XmlPullUtil.attr(pp, "usage");
final List<Location> locations = new ArrayList<Location>(); final List<Location> locations = new ArrayList<Location>();
final String nameState = processItdOdv(pp, usage, new ProcessItdOdvCallback() final String nameState = processItdOdv(pp, usage, new ProcessItdOdvCallback()
@ -2316,8 +2318,20 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
while (XmlPullUtil.test(pp, "itdRoute")) while (XmlPullUtil.test(pp, "itdRoute"))
{ {
final String id = useRouteIndexAsTripId ? pp.getAttributeValue(null, "routeIndex") + "-" final String id;
+ pp.getAttributeValue(null, "routeTripIndex") : null; if (useRouteIndexAsTripId)
{
final String routeIndex = XmlPullUtil.optAttr(pp, "routeIndex", null);
final String routeTripIndex = XmlPullUtil.optAttr(pp, "routeTripIndex", null);
if (routeIndex != null && routeTripIndex != null)
id = routeIndex + "-" + routeTripIndex;
else
id = null;
}
else
{
id = null;
}
final int numChanges = XmlPullUtil.intAttr(pp, "changes"); final int numChanges = XmlPullUtil.intAttr(pp, "changes");
XmlPullUtil.enter(pp, "itdRoute"); XmlPullUtil.enter(pp, "itdRoute");
@ -2340,7 +2354,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "itdPartialRoute"); XmlPullUtil.enter(pp, "itdPartialRoute");
XmlPullUtil.test(pp, "itdPoint"); XmlPullUtil.test(pp, "itdPoint");
if (!"departure".equals(pp.getAttributeValue(null, "usage"))) if (!"departure".equals(XmlPullUtil.attr(pp, "usage")))
throw new IllegalStateException(); throw new IllegalStateException();
final Location departureLocation = processItdPointAttributes(pp); final Location departureLocation = processItdPointAttributes(pp);
if (firstDepartureLocation == null) if (firstDepartureLocation == null)
@ -2365,7 +2379,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.skipExit(pp, "itdPoint"); XmlPullUtil.skipExit(pp, "itdPoint");
XmlPullUtil.test(pp, "itdPoint"); XmlPullUtil.test(pp, "itdPoint");
if (!"arrival".equals(pp.getAttributeValue(null, "usage"))) if (!"arrival".equals(XmlPullUtil.attr(pp, "usage")))
throw new IllegalStateException(); throw new IllegalStateException();
final Location arrivalLocation = processItdPointAttributes(pp); final Location arrivalLocation = processItdPointAttributes(pp);
lastArrivalLocation = arrivalLocation; lastArrivalLocation = arrivalLocation;
@ -2389,7 +2403,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
XmlPullUtil.skipExit(pp, "itdPoint"); XmlPullUtil.skipExit(pp, "itdPoint");
XmlPullUtil.test(pp, "itdMeansOfTransport"); XmlPullUtil.test(pp, "itdMeansOfTransport");
final String productName = pp.getAttributeValue(null, "productName"); final String productName = XmlPullUtil.optAttr(pp, "productName", null);
if ("IT".equals(partialRouteType) || "Fussweg".equals(productName) || "Taxi".equals(productName)) if ("IT".equals(partialRouteType) || "Fussweg".equals(productName) || "Taxi".equals(productName))
{ {
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;
@ -2430,23 +2444,23 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
} }
else if ("PT".equals(partialRouteType)) else if ("PT".equals(partialRouteType))
{ {
final String destinationName = normalizeLocationName(pp.getAttributeValue(null, "destination")); final String destinationName = normalizeLocationName(XmlPullUtil.attr(pp, "destination"));
final String destinationId = XmlPullUtil.optAttr(pp, "destID", null); final String destinationId = XmlPullUtil.optAttr(pp, "destID", null);
final Location destination = new Location(destinationId != null ? LocationType.STATION : LocationType.ANY, destinationId, final Location destination = new Location(destinationId != null ? LocationType.STATION : LocationType.ANY, destinationId,
null, destinationName); null, destinationName);
final String lineLabel; final String lineLabel;
final String motSymbol = pp.getAttributeValue(null, "symbol"); final String motSymbol = XmlPullUtil.optAttr(pp, "symbol", null);
if ("AST".equals(motSymbol)) if ("AST".equals(motSymbol))
{ {
lineLabel = "BAST"; lineLabel = "BAST";
} }
else else
{ {
final String motType = pp.getAttributeValue(null, "motType"); final String motType = XmlPullUtil.attr(pp, "motType");
final String motShortName = pp.getAttributeValue(null, "shortname"); final String motShortName = XmlPullUtil.optAttr(pp, "shortname", null);
final String motName = pp.getAttributeValue(null, "name"); final String motName = XmlPullUtil.attr(pp, "name");
final String motTrainName = pp.getAttributeValue(null, "trainName"); final String motTrainName = XmlPullUtil.optAttr(pp, "trainName", null);
final String motTrainType = pp.getAttributeValue(null, "trainType"); final String motTrainType = XmlPullUtil.optAttr(pp, "trainType", null);
lineLabel = parseLine(motType, motSymbol, motShortName, motName, motTrainType, motShortName, motTrainName); lineLabel = parseLine(motType, motSymbol, motShortName, motName, motTrainType, motShortName, motTrainName);
} }
@ -3071,14 +3085,15 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
private Point processCoordAttr(final XmlPullParser pp) private Point processCoordAttr(final XmlPullParser pp)
{ {
final String mapName = XmlPullUtil.optAttr(pp, "mapName", null); final String mapName = XmlPullUtil.optAttr(pp, "mapName", null);
if (mapName == null) final int x = (int) Math.round(XmlPullUtil.optFloatAttr(pp, "x", 0));
final int y = (int) Math.round(XmlPullUtil.optFloatAttr(pp, "y", 0));
if (mapName == null || (x == 0 && y == 0))
return null; return null;
if (!"WGS84".equals(mapName)) if (!"WGS84".equals(mapName))
throw new IllegalStateException("unknown mapName=" + mapName); throw new IllegalStateException("unknown mapName=" + mapName);
final int x = (int) Math.round(XmlPullUtil.floatAttr(pp, "x"));
final int y = (int) Math.round(XmlPullUtil.floatAttr(pp, "y"));
return new Point(y, x); return new Point(y, x);
} }

View file

@ -280,10 +280,10 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final String type = pp.getName(); final String type = pp.getName();
if ("Station".equals(type)) if ("Station".equals(type))
{ {
final String name = pp.getAttributeValue(null, "name").trim(); final String name = XmlPullUtil.attr(pp, "name");
final String id = pp.getAttributeValue(null, "externalStationNr"); final String id = XmlPullUtil.attr(pp, "externalStationNr");
final int x = Integer.parseInt(pp.getAttributeValue(null, "x")); final int x = XmlPullUtil.intAttr(pp, "x");
final int y = Integer.parseInt(pp.getAttributeValue(null, "y")); final int y = XmlPullUtil.intAttr(pp, "y");
final String[] placeAndName = splitStationName(name); final String[] placeAndName = splitStationName(name);
return new Location(LocationType.STATION, id, y, x, placeAndName[0], placeAndName[1]); return new Location(LocationType.STATION, id, y, x, placeAndName[0], placeAndName[1]);
@ -296,11 +296,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final String type = pp.getName(); final String type = pp.getName();
if ("Poi".equals(type)) if ("Poi".equals(type))
{ {
String name = pp.getAttributeValue(null, "name").trim(); String name = XmlPullUtil.attr(pp, "name");
if (name.equals("unknown")) if (name.equals("unknown"))
name = null; name = null;
final int x = Integer.parseInt(pp.getAttributeValue(null, "x")); final int x = XmlPullUtil.intAttr(pp, "x");
final int y = Integer.parseInt(pp.getAttributeValue(null, "y")); final int y = XmlPullUtil.intAttr(pp, "y");
return new Location(LocationType.POI, null, y, x, null, name); return new Location(LocationType.POI, null, y, x, null, name);
} }
throw new IllegalStateException("cannot handle: " + type); throw new IllegalStateException("cannot handle: " + type);
@ -311,11 +311,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final String type = pp.getName(); final String type = pp.getName();
if ("Address".equals(type)) if ("Address".equals(type))
{ {
String name = pp.getAttributeValue(null, "name").trim(); String name = XmlPullUtil.attr(pp, "name");
if (name.equals("unknown")) if (name.equals("unknown"))
name = null; name = null;
final int x = Integer.parseInt(pp.getAttributeValue(null, "x")); final int x = XmlPullUtil.intAttr(pp, "x");
final int y = Integer.parseInt(pp.getAttributeValue(null, "y")); final int y = XmlPullUtil.intAttr(pp, "y");
final String[] placeAndName = splitAddress(name); final String[] placeAndName = splitAddress(name);
return new Location(LocationType.ADDRESS, null, y, x, placeAndName[0], placeAndName[1]); return new Location(LocationType.ADDRESS, null, y, x, placeAndName[0], placeAndName[1]);
@ -329,7 +329,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
if ("ReqLoc".equals(type)) if ("ReqLoc".equals(type))
{ {
XmlPullUtil.requireAttr(pp, "type", "ADR"); XmlPullUtil.requireAttr(pp, "type", "ADR");
final String name = pp.getAttributeValue(null, "output").trim(); final String name = XmlPullUtil.attr(pp, "output");
final String[] placeAndName = splitAddress(name); final String[] placeAndName = splitAddress(name);
return new Location(LocationType.ADDRESS, null, placeAndName[0], placeAndName[1]); return new Location(LocationType.ADDRESS, null, placeAndName[0], placeAndName[1]);
@ -575,18 +575,18 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final String fpTime = XmlPullUtil.attr(pp, "fpTime"); final String fpTime = XmlPullUtil.attr(pp, "fpTime");
final String fpDate = XmlPullUtil.attr(pp, "fpDate"); final String fpDate = XmlPullUtil.attr(pp, "fpDate");
final String delay = XmlPullUtil.attr(pp, "delay"); final String delay = XmlPullUtil.attr(pp, "delay");
final String eDelay = pp.getAttributeValue(null, "e_delay"); final String eDelay = XmlPullUtil.optAttr(pp, "e_delay", null);
final String platform = pp.getAttributeValue(null, "platform"); final String platform = XmlPullUtil.optAttr(pp, "platform", null);
// TODO newpl // TODO newpl
final String targetLoc = pp.getAttributeValue(null, "targetLoc"); final String targetLoc = XmlPullUtil.optAttr(pp, "targetLoc", null);
// TODO hafasname // TODO hafasname
final String dirnr = pp.getAttributeValue(null, "dirnr"); final String dirnr = XmlPullUtil.optAttr(pp, "dirnr", null);
final String prod = XmlPullUtil.attr(pp, "prod"); final String prod = XmlPullUtil.attr(pp, "prod");
final String classStr = pp.getAttributeValue(null, "class"); final String classStr = XmlPullUtil.optAttr(pp, "class", null);
final String dir = pp.getAttributeValue(null, "dir"); final String dir = XmlPullUtil.optAttr(pp, "dir", null);
final String capacityStr = pp.getAttributeValue(null, "capacity"); final String capacityStr = XmlPullUtil.optAttr(pp, "capacity", null);
final String depStation = pp.getAttributeValue(null, "depStation"); final String depStation = XmlPullUtil.optAttr(pp, "depStation", null);
final String delayReason = pp.getAttributeValue(null, "delayReason"); final String delayReason = XmlPullUtil.optAttr(pp, "delayReason", null);
// TODO is_reachable // TODO is_reachable
// TODO disableTrainInfo // TODO disableTrainInfo
@ -1067,8 +1067,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
{ {
XmlPullUtil.enter(pp, "JourneyAttribute"); XmlPullUtil.enter(pp, "JourneyAttribute");
XmlPullUtil.require(pp, "Attribute"); XmlPullUtil.require(pp, "Attribute");
final String attrName = pp.getAttributeValue(null, "type"); final String attrName = XmlPullUtil.attr(pp, "type");
final String code = pp.getAttributeValue(null, "code"); final String code = XmlPullUtil.optAttr(pp, "code", null);
XmlPullUtil.enter(pp, "Attribute"); XmlPullUtil.enter(pp, "Attribute");
final Map<String, String> attributeVariants = parseAttributeVariants(pp); final Map<String, String> attributeVariants = parseAttributeVariants(pp);
XmlPullUtil.skipExit(pp, "Attribute"); XmlPullUtil.skipExit(pp, "Attribute");
@ -1172,8 +1172,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.enter(pp, "Polyline"); XmlPullUtil.enter(pp, "Polyline");
while (XmlPullUtil.test(pp, "Point")) while (XmlPullUtil.test(pp, "Point"))
{ {
final int x = Integer.parseInt(pp.getAttributeValue(null, "x")); final int x = XmlPullUtil.intAttr(pp, "x");
final int y = Integer.parseInt(pp.getAttributeValue(null, "y")); final int y = XmlPullUtil.intAttr(pp, "y");
path.add(new Point(y, x)); path.add(new Point(y, x));
XmlPullUtil.next(pp); XmlPullUtil.next(pp);
} }

View file

@ -55,11 +55,14 @@ public class KvvProvider extends AbstractEfaProvider
@Override @Override
protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType, protected String parseLine(final String mot, final String symbol, final String name, final String longName, final String trainType,
final String trainNum, final String trainName) final String trainNum, final String trainName)
{
if (name != null)
{ {
final Matcher m = P_LINE.matcher(name); final Matcher m = P_LINE.matcher(name);
if (m.matches()) if (m.matches())
return super.parseLine(mot, symbol, m.group(1), longName, trainType, trainNum, trainName); return super.parseLine(mot, symbol, m.group(1), longName, trainType, trainNum, trainName);
else }
return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName); return super.parseLine(mot, symbol, name, longName, trainType, trainNum, trainName);
// TODO check for " (Ersatzverkehr)" // TODO check for " (Ersatzverkehr)"
} }

View file

@ -170,4 +170,15 @@ public class NvbwProviderLiveTest extends AbstractProviderLiveTest
final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false); final QueryTripsResult earlierResult = queryMoreTrips(later2Result.context, false);
print(earlierResult); print(earlierResult);
} }
@Test
public void trip() throws Exception
{
final QueryTripsResult result = queryTrips(
new Location(LocationType.STATION, "6900037", 48063184, 7779532, "Buchheim (Breisgau)", "Fortuna"), null, new Location(
LocationType.STATION, "6906508", 47996616, 7840450, "Freiburg im Breisgau", "Freiburg im Breisgau, Hauptbahnhof"),
new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result);
assertEquals(QueryTripsResult.Status.OK, result.status);
}
} }