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