mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-07 06:08:52 +00:00
AbstractHafasClientInterfaceProvider: support fare references of type FS (fare set)
This commit is contained in:
parent
f2617c20a6
commit
11b3908135
2 changed files with 40 additions and 15 deletions
|
@ -781,13 +781,11 @@ public abstract class AbstractHafasClientInterfaceProvider extends AbstractHafas
|
||||||
for (int i = 0; i < ovwTrfRefList.length(); i++) {
|
for (int i = 0; i < ovwTrfRefList.length(); i++) {
|
||||||
final JSONObject ovwTrfRef = ovwTrfRefList.getJSONObject(i);
|
final JSONObject ovwTrfRef = ovwTrfRefList.getJSONObject(i);
|
||||||
final String type = ovwTrfRef.getString("type");
|
final String type = ovwTrfRef.getString("type");
|
||||||
final int fareSetX = ovwTrfRef.getInt("fareSetX");
|
final JSONObject jsonFareSet = fareSetList.getJSONObject(ovwTrfRef.getInt("fareSetX"));
|
||||||
final int fareX = ovwTrfRef.getInt("fareX");
|
|
||||||
final JSONObject jsonFareSet = fareSetList.getJSONObject(fareSetX);
|
|
||||||
final JSONObject jsonFare = jsonFareSet.getJSONArray("fareL").getJSONObject(fareX);
|
|
||||||
final String fareName = jsonFare.getString("name");
|
|
||||||
final Fare fare;
|
|
||||||
if (type.equals("T")) { // ticket
|
if (type.equals("T")) { // ticket
|
||||||
|
final JSONObject jsonFare =
|
||||||
|
jsonFareSet.getJSONArray("fareL").getJSONObject(ovwTrfRef.getInt("fareX"));
|
||||||
|
final String fareName = jsonFare.getString("name");
|
||||||
final int ticketX = ovwTrfRef.getInt("ticketX");
|
final int ticketX = ovwTrfRef.getInt("ticketX");
|
||||||
final JSONObject jsonTicket = jsonFare.getJSONArray("ticketL").getJSONObject(ticketX);
|
final JSONObject jsonTicket = jsonFare.getJSONArray("ticketL").getJSONObject(ticketX);
|
||||||
final String ticketName = jsonTicket.getString("name");
|
final String ticketName = jsonTicket.getString("name");
|
||||||
|
@ -795,26 +793,41 @@ public abstract class AbstractHafasClientInterfaceProvider extends AbstractHafas
|
||||||
if (!Strings.isNullOrEmpty(currencyStr)) {
|
if (!Strings.isNullOrEmpty(currencyStr)) {
|
||||||
final Currency currency = Currency.getInstance(currencyStr);
|
final Currency currency = Currency.getInstance(currencyStr);
|
||||||
final float price = jsonTicket.getInt("prc") / 100f;
|
final float price = jsonTicket.getInt("prc") / 100f;
|
||||||
fare = new Fare(normalizeFareName(fareName) + '\n' + ticketName,
|
final Fare fare = new Fare(normalizeFareName(fareName) + '\n' + ticketName,
|
||||||
normalizeFareType(ticketName), currency, price, null, null);
|
normalizeFareType(ticketName), currency, price, null, null);
|
||||||
} else {
|
if (!hideFare(fare))
|
||||||
fare = null;
|
fares.add(fare);
|
||||||
}
|
}
|
||||||
} else if (type.equals("F")) { // fare
|
} else if (type.equals("F")) { // fare
|
||||||
|
final JSONObject jsonFare =
|
||||||
|
jsonFareSet.getJSONArray("fareL").getJSONObject(ovwTrfRef.getInt("fareX"));
|
||||||
|
final String fareName = jsonFare.getString("name");
|
||||||
final String currencyStr = jsonFare.optString("cur");
|
final String currencyStr = jsonFare.optString("cur");
|
||||||
if (!Strings.isNullOrEmpty(currencyStr)) {
|
if (!Strings.isNullOrEmpty(currencyStr)) {
|
||||||
final Currency currency = ParserUtils.getCurrency(currencyStr);
|
final Currency currency = ParserUtils.getCurrency(currencyStr);
|
||||||
final float price = jsonFare.getInt("prc") / 100f;
|
final float price = jsonFare.getInt("prc") / 100f;
|
||||||
fare = new Fare(normalizeFareName(fareName), normalizeFareType(fareName), currency,
|
final Fare fare = new Fare(normalizeFareName(fareName), normalizeFareType(fareName),
|
||||||
price, null, null);
|
currency, price, null, null);
|
||||||
} else {
|
if (!hideFare(fare))
|
||||||
fare = null;
|
fares.add(fare);
|
||||||
|
}
|
||||||
|
} else if (type.equals("FS")) { // fare set
|
||||||
|
final String fareSetName = jsonFareSet.getString("name");
|
||||||
|
final JSONArray fareList = jsonFareSet.getJSONArray("fareL");
|
||||||
|
for (int iFare = 0; iFare < fareList.length(); iFare++) {
|
||||||
|
final JSONObject jsonFare = fareList.getJSONObject(iFare);
|
||||||
|
final String fareName = jsonFare.getString("name");
|
||||||
|
final String currencyStr = jsonFare.optString("cur");
|
||||||
|
final Currency currency = ParserUtils.getCurrency(currencyStr);
|
||||||
|
final float price = jsonFare.getInt("prc") / 100f;
|
||||||
|
final Fare fare = new Fare(normalizeFareName(fareSetName), normalizeFareType(fareName),
|
||||||
|
currency, price, null, null);
|
||||||
|
if (!hideFare(fare))
|
||||||
|
fares.add(fare);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException("cannot handle type: " + type);
|
throw new IllegalArgumentException("cannot handle type: " + type);
|
||||||
}
|
}
|
||||||
if (fare != null && !hideFare(fare))
|
|
||||||
fares.add(fare);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fares = null;
|
fares = null;
|
||||||
|
|
|
@ -149,6 +149,18 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest {
|
||||||
print(earlierResult);
|
print(earlierResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void tripBeelitzPotsdam() throws Exception {
|
||||||
|
final Location from = new Location(LocationType.STATION, "900220005", "Beelitz", "Bahnhof");
|
||||||
|
final Location to = new Location(LocationType.STATION, "900220010", "Potsdam", "Golm");
|
||||||
|
final QueryTripsResult result = queryTrips(from, null, to, new Date(), true, null);
|
||||||
|
print(result);
|
||||||
|
final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
|
||||||
|
print(laterResult);
|
||||||
|
final QueryTripsResult earlierResult = queryMoreTrips(laterResult.context, false);
|
||||||
|
print(earlierResult);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shortFootwayTrip() throws Exception {
|
public void shortFootwayTrip() throws Exception {
|
||||||
final Location from = new Location(LocationType.ADDRESS, null, Point.from1E6(52435193, 13473409),
|
final Location from = new Location(LocationType.ADDRESS, null, Point.from1E6(52435193, 13473409),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue