File indexing completed on 2024-05-12 04:42:39
0001 /* 0002 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KPUBLICTRANSPORT_OPENJOURNEYPLANNERPARSER_H 0008 #define KPUBLICTRANSPORT_OPENJOURNEYPLANNERPARSER_H 0009 0010 #include "kpublictransport_export.h" 0011 0012 #include <KPublicTransport/Line> 0013 0014 #include <QDateTime> 0015 #include <QHash> 0016 #include <QString> 0017 0018 #include <vector> 0019 0020 class QPointF; 0021 0022 namespace KPublicTransport { 0023 0024 class Journey; 0025 class JourneySection; 0026 class Location; 0027 class Path; 0028 class PathSection; 0029 class Route; 0030 class ScopedXmlStreamReader; 0031 class Stopover; 0032 0033 /** Parser for Open Journey Planner / TRIAS responses. 0034 * @internal exported for testing only 0035 */ 0036 class KPUBLICTRANSPORT_EXPORT OpenJourneyPlannerParser 0037 { 0038 public: 0039 std::vector<Location> parseLocationInformationResponse(const QByteArray &responseData); 0040 std::vector<Stopover> parseStopEventResponse(const QByteArray &responseData); 0041 std::vector<Journey> parseTripResponse(const QByteArray &responseData); 0042 0043 bool hasError() const; 0044 QString errorMessage() const; 0045 0046 void setLocationIdentifierType(const QString &idType); 0047 void setUicLocationIdentifierType(const QString &uicIdType); 0048 0049 private: 0050 std::vector<Location> parseLocationInformationDelivery(ScopedXmlStreamReader &&r); 0051 Location parseLocationInformationLocationResult(ScopedXmlStreamReader &&r) const; 0052 Location parseLocationInformationLocation(ScopedXmlStreamReader &&r) const; 0053 QString parseTextElement(ScopedXmlStreamReader &&r) const; 0054 QPointF parseGeoPosition(ScopedXmlStreamReader &&r) const; 0055 0056 std::vector<Stopover> parseStopEventDelivery(ScopedXmlStreamReader &&r); 0057 void parseResponseContext(ScopedXmlStreamReader &&r); 0058 void parseResponseContextPlaces(ScopedXmlStreamReader &&r); 0059 void parseResponseContextSituations(ScopedXmlStreamReader &&r); 0060 void parseSituation(ScopedXmlStreamReader &&r); 0061 0062 Stopover parseStopEventResult(ScopedXmlStreamReader &&r) const; 0063 Stopover parseStopEvent(ScopedXmlStreamReader &&r) const; 0064 void parseCallAtStop(ScopedXmlStreamReader &&r, Stopover &stop) const; 0065 void parseService(ScopedXmlStreamReader &&r, Route &route, QStringList &attributes) const; 0066 struct TimePair { 0067 QDateTime scheduledTime; 0068 QDateTime expectedTime; 0069 }; 0070 TimePair parseTime(ScopedXmlStreamReader &&r) const; 0071 Line::Mode parseMode(ScopedXmlStreamReader &&r) const; 0072 QString parseSituationRef(ScopedXmlStreamReader &&r) const; 0073 0074 std::vector<Journey> parseTripDelivery(ScopedXmlStreamReader &&r); 0075 Journey parseTripResult(ScopedXmlStreamReader &&r) const; 0076 Journey parseTrip(ScopedXmlStreamReader &&r) const; 0077 JourneySection parseTimedLeg(ScopedXmlStreamReader &&r) const; 0078 JourneySection parseTransferLeg(ScopedXmlStreamReader &&r) const; 0079 Path parsePathGuidance(ScopedXmlStreamReader &&r) const; 0080 PathSection parsePathGuildanceSection(ScopedXmlStreamReader &&r) const; 0081 PathSection parseTrackSection(ScopedXmlStreamReader &&r) const; 0082 0083 void parseError(ScopedXmlStreamReader &&r); 0084 0085 void setLocationIdentifier(Location &loc, const QString &id) const; 0086 0087 QString m_identifierType; 0088 QString m_uicIdentifierType; 0089 QHash<QString, Location> m_contextLocations; 0090 QHash<QString, QString> m_contextSituations; 0091 QString m_errorMsg; 0092 }; 0093 0094 } 0095 0096 #endif // KPUBLICTRANSPORT_OPENJOURNEYPLANNERPARSER_H