File indexing completed on 2024-05-12 04:42:40
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KPUBLICTRANSPORT_OPENTRIPPLANNERPARSER_H 0008 #define KPUBLICTRANSPORT_OPENTRIPPLANNERPARSER_H 0009 0010 #include "kpublictransport_export.h" 0011 #include "opentripplannerrequestcontext.h" 0012 0013 #include <KPublicTransport/Location> 0014 #include <KPublicTransport/RentalVehicle> 0015 0016 #include <QHash> 0017 #include <QString> 0018 #include <QStringList> 0019 0020 #include <vector> 0021 0022 class QJsonArray; 0023 class QJsonObject; 0024 0025 namespace KPublicTransport { 0026 0027 class Journey; 0028 class JourneySection; 0029 class Line; 0030 class Route; 0031 class Stopover; 0032 0033 /** Parser for OTP responses as defined by the GraphQL files in the otp/ subdir. 0034 * @internal only exported for unit tests 0035 */ 0036 class KPUBLICTRANSPORT_EXPORT OpenTripPlannerParser 0037 { 0038 public: 0039 explicit OpenTripPlannerParser(const QString &identifierType, const QString &ifoptPrefix = {}); 0040 ~OpenTripPlannerParser(); 0041 void setKnownRentalVehicleNetworks(const QHash<QString, RentalVehicleNetwork> &networks); 0042 0043 std::vector<Location> parseLocationsByCoordinate(const QJsonObject &obj) const; 0044 std::vector<Location> parseLocationsByName(const QJsonObject &obj) const; 0045 std::vector<Location> parseLocationsArray(const QJsonArray &array) const; 0046 std::vector<Location> parseGeocodeResult(const QJsonArray &array) const; 0047 std::vector<Stopover> parseDepartures(const QJsonObject &obj) const; 0048 std::vector<Stopover> parseDeparturesArray(const QJsonArray &array) const; 0049 std::vector<Journey> parseJourneys(const QJsonObject &obj); 0050 0051 OpenTripPlannerRequestContext m_nextJourneyContext; 0052 OpenTripPlannerRequestContext m_prevJourneyContext; 0053 private: 0054 QVariant parseRentalVehicleData(const QJsonObject &obj) const; 0055 /// @return @c false for Location objects that should be discarded entirely 0056 bool parseLocationFragment(const QJsonObject &obj, Location &loc) const; 0057 Location parseLocation(const QJsonObject &obj) const; 0058 void parseAlerts(const QJsonArray &alertsArray) const; 0059 Line parseLine(const QJsonObject &obj) const; 0060 Route parseRoute(const QJsonObject &obj) const; 0061 Route parseInlineRoute(const QJsonObject &obj) const; 0062 Route detectAndParseRoute(const QJsonObject &obj) const; 0063 Stopover parseDeparture(const QJsonObject &obj) const; 0064 void parseDeparturesForStop(const QJsonObject &obj, std::vector<Stopover> &deps) const; 0065 JourneySection parseJourneySection(const QJsonObject &obj) const; 0066 Journey parseJourney(const QJsonObject &obj) const; 0067 0068 QString m_identifierType; 0069 QString m_ifoptPrefix; 0070 QHash<QString, RentalVehicleNetwork> m_rentalVehicleNetworks; 0071 mutable QStringList m_alerts; 0072 }; 0073 0074 } 0075 0076 #endif // KPUBLICTRANSPORT_OPENTRIPPLANNERPARSER_H