From 23da0f645e323894e92e62c15f63620db0f6f6e1 Mon Sep 17 00:00:00 2001 From: "andreas.schildbach" Date: Wed, 1 Dec 2010 21:59:23 +0000 Subject: [PATCH] fare info in connection details git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@371 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- .../schildbach/pte/AbstractEfaProvider.java | 23 ++++++++- .../schildbach/pte/AbstractHafasProvider.java | 2 +- src/de/schildbach/pte/BahnProvider.java | 4 +- src/de/schildbach/pte/BvgProvider.java | 4 +- src/de/schildbach/pte/OebbProvider.java | 2 +- src/de/schildbach/pte/RmvProvider.java | 4 +- src/de/schildbach/pte/dto/Connection.java | 4 +- src/de/schildbach/pte/dto/Fare.java | 47 +++++++++++++++++++ src/de/schildbach/pte/util/XmlPullUtil.java | 7 ++- 9 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 src/de/schildbach/pte/dto/Fare.java diff --git a/src/de/schildbach/pte/AbstractEfaProvider.java b/src/de/schildbach/pte/AbstractEfaProvider.java index 25ef6e68..c20da1e1 100644 --- a/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/src/de/schildbach/pte/AbstractEfaProvider.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Calendar; +import java.util.Currency; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; @@ -38,6 +39,7 @@ import org.xmlpull.v1.XmlPullParserFactory; import de.schildbach.pte.dto.Connection; import de.schildbach.pte.dto.Departure; +import de.schildbach.pte.dto.Fare; import de.schildbach.pte.dto.GetConnectionDetailsResult; import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Location; @@ -1151,8 +1153,25 @@ public abstract class AbstractEfaProvider implements NetworkProvider XmlPullUtil.exit(pp, "itdPartialRouteList"); - connections - .add(new Connection(id, uri, firstDepartureTime, lastArrivalTime, null, null, 0, firstDeparture, 0, lastArrival, parts)); + Fare fare = null; + if (XmlPullUtil.test(pp, "itdFare") && !pp.isEmptyElementTag()) + { + XmlPullUtil.enter(pp, "itdFare"); + if (XmlPullUtil.test(pp, "itdSingleTicket")) + { + final String net = XmlPullUtil.attr(pp, "net"); + final Currency currency = Currency.getInstance(XmlPullUtil.attr(pp, "currency")); + final float fareAdult = XmlPullUtil.floatAttr(pp, "fareAdult"); + final float fareChild = XmlPullUtil.floatAttr(pp, "fareChild"); + final String unitName = XmlPullUtil.attr(pp, "unitName"); + final int unitsAdult = XmlPullUtil.intAttr(pp, "unitsAdult"); + final int unitsChild = XmlPullUtil.intAttr(pp, "unitsChild"); + fare = new Fare(net, currency, unitName, fareAdult, fareChild, unitsAdult, unitsChild); + } + XmlPullUtil.exit(pp, "itdFare"); + } + connections.add(new Connection(id, uri, firstDepartureTime, lastArrivalTime, null, null, 0, firstDeparture, 0, lastArrival, + parts, fare)); XmlPullUtil.exit(pp, "itdRoute"); } diff --git a/src/de/schildbach/pte/AbstractHafasProvider.java b/src/de/schildbach/pte/AbstractHafasProvider.java index f10ef789..df954463 100644 --- a/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/src/de/schildbach/pte/AbstractHafasProvider.java @@ -453,7 +453,7 @@ public abstract class AbstractHafasProvider implements NetworkProvider XmlPullUtil.exit(pp); connections.add(new Connection(id, null, firstDepartureTime, lastArrivalTime, null, null, departure.id, departure.name, arrival.id, - arrival.name, parts)); + arrival.name, parts, null)); } XmlPullUtil.exit(pp); diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index cb9c0d93..141fc55d 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -276,7 +276,7 @@ public final class BahnProvider extends AbstractHafasProvider else line = null; final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime, - line, line != null ? lineColors(line) : null, 0, from.name, 0, to.name, null); + line, line != null ? lineColors(line) : null, 0, from.name, 0, to.name, null, null); connections.add(connection); } else @@ -424,7 +424,7 @@ public final class BahnProvider extends AbstractHafasProvider throw new IllegalStateException("could not parse all parts of:\n" + page + "\n" + parts); return new GetConnectionDetailsResult(new Date(), new Connection(AbstractHafasProvider.extractConnectionId(uri), uri, firstDepartureTime, - lastArrivalTime, null, null, 0, firstDeparture, 0, lastArrival, parts)); + lastArrivalTime, null, null, 0, firstDeparture, 0, lastArrival, parts, null)); } else { diff --git a/src/de/schildbach/pte/BvgProvider.java b/src/de/schildbach/pte/BvgProvider.java index b6275758..d6d1ffa9 100644 --- a/src/de/schildbach/pte/BvgProvider.java +++ b/src/de/schildbach/pte/BvgProvider.java @@ -282,7 +282,7 @@ public final class BvgProvider implements NetworkProvider arrivalTime = ParserUtils.addDays(arrivalTime, 1); final String line = normalizeLine(ParserUtils.resolveEntities(mConFine.group(4))); final Connection connection = new Connection(AbstractHafasProvider.extractConnectionId(link), link, departureTime, arrivalTime, - line, line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null); + line, line != null ? LINES.get(line.charAt(0)) : null, 0, from.name, 0, to.name, null, null); connections.add(connection); } else @@ -429,7 +429,7 @@ public final class BvgProvider implements NetworkProvider if (firstDepartureTime != null && lastArrivalTime != null) return new GetConnectionDetailsResult(currentDate, new Connection(AbstractHafasProvider.extractConnectionId(uri), uri, - firstDepartureTime, lastArrivalTime, null, null, firstDepartureId, firstDeparture, lastArrivalId, lastArrival, parts)); + firstDepartureTime, lastArrivalTime, null, null, firstDepartureId, firstDeparture, lastArrivalId, lastArrival, parts, null)); else return new GetConnectionDetailsResult(currentDate, null); } diff --git a/src/de/schildbach/pte/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java index 1bc09d29..27489f49 100644 --- a/src/de/schildbach/pte/OebbProvider.java +++ b/src/de/schildbach/pte/OebbProvider.java @@ -373,7 +373,7 @@ public class OebbProvider extends AbstractHafasProvider final String link = allDetailsUri; // TODO use print link? final Connection connection = new Connection(id, link, overviewDepartureTime, overviewArrivalTime, null, null, 0, from.name, 0, - to.name, new ArrayList(1)); + to.name, new ArrayList(1), null); connections.add(connection); final Matcher mDetCoarse = P_CONNECTION_DETAILS_COARSE.matcher(details); diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java index 018d4bcd..3b8e961d 100644 --- a/src/de/schildbach/pte/RmvProvider.java +++ b/src/de/schildbach/pte/RmvProvider.java @@ -273,7 +273,7 @@ public class RmvProvider extends AbstractHafasProvider else line = null; final Connection connection = new Connection(extractConnectionId(link), link, departureTime, arrivalTime, line, - line != null ? lineColors(line) : null, 0, from.name, 0, to.name, null); + line != null ? lineColors(line) : null, 0, from.name, 0, to.name, null, null); connections.add(connection); } else @@ -387,7 +387,7 @@ public class RmvProvider extends AbstractHafasProvider } return new GetConnectionDetailsResult(currentDate, new Connection(extractConnectionId(uri), uri, firstDepartureTime, lastArrivalTime, - null, null, 0, firstDeparture, 0, lastArrival, parts)); + null, null, 0, firstDeparture, 0, lastArrival, parts, null)); } else { diff --git a/src/de/schildbach/pte/dto/Connection.java b/src/de/schildbach/pte/dto/Connection.java index 0d1cd9e5..329b1669 100644 --- a/src/de/schildbach/pte/dto/Connection.java +++ b/src/de/schildbach/pte/dto/Connection.java @@ -38,9 +38,10 @@ public final class Connection implements Serializable public final int toId; public final String to; public final List parts; + public final Fare fare; public Connection(final String id, final String link, final Date departureTime, final Date arrivalTime, final String line, - final int[] lineColors, final int fromId, final String from, final int toId, final String to, final List parts) + final int[] lineColors, final int fromId, final String from, final int toId, final String to, final List parts, final Fare fare) { this.id = id; this.link = link; @@ -53,6 +54,7 @@ public final class Connection implements Serializable this.toId = toId; this.to = to; this.parts = parts; + this.fare = fare; } @Override diff --git a/src/de/schildbach/pte/dto/Fare.java b/src/de/schildbach/pte/dto/Fare.java new file mode 100644 index 00000000..e0e5721d --- /dev/null +++ b/src/de/schildbach/pte/dto/Fare.java @@ -0,0 +1,47 @@ +/* + * Copyright 2010 the original author or authors. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.schildbach.pte.dto; + +import java.io.Serializable; +import java.util.Currency; + +/** + * @author Andreas Schildbach + */ +public final class Fare implements Serializable +{ + public final String network; + public final Currency currency; + public final String unitName; + public final float fareAdult; + public final float fareChild; + public final int unitsAdult; + public final int unitsChild; + + public Fare(final String network, final Currency currency, final String unitName, final float fareAdult, final float fareChild, + final int unitsAdult, final int unitsChild) + { + this.network = network; + this.currency = currency; + this.unitName = unitName; + this.fareAdult = fareAdult; + this.fareChild = fareChild; + this.unitsAdult = unitsAdult; + this.unitsChild = unitsChild; + } +} diff --git a/src/de/schildbach/pte/util/XmlPullUtil.java b/src/de/schildbach/pte/util/XmlPullUtil.java index b12f4fbe..3500cff1 100644 --- a/src/de/schildbach/pte/util/XmlPullUtil.java +++ b/src/de/schildbach/pte/util/XmlPullUtil.java @@ -104,7 +104,12 @@ public final class XmlPullUtil public static int intAttr(final XmlPullParser pp, final String attrName) { - return Integer.parseInt(pp.getAttributeValue(null, attrName)); + return Integer.parseInt(pp.getAttributeValue(null, attrName).trim()); + } + + public static float floatAttr(final XmlPullParser pp, final String attrName) + { + return Float.parseFloat(pp.getAttributeValue(null, attrName).trim()); } public static void requireAttr(final XmlPullParser pp, final String attrName, final String requiredValue)