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_OPENJOURNEYPLANNERBACKEND_H
0008 #define KPUBLICTRANSPORT_OPENJOURNEYPLANNERBACKEND_H
0009 
0010 #include "abstractbackend.h"
0011 
0012 #include <QByteArray>
0013 #include <QUrl>
0014 
0015 class QNetworkRequest;
0016 
0017 namespace KPublicTransport {
0018 
0019 class OpenJourneyPlannerParser;
0020 class OpenJourneyPlannerRequestBuilder;
0021 
0022 /** Backend for OpenJourneyPlanner services
0023  *  Due to its similarities, this might also be viable for TRIAS-based services.
0024  */
0025 class OpenJourneyPlannerBackend : public AbstractBackend
0026 {
0027     Q_GADGET
0028     Q_PROPERTY(QUrl endpoint MEMBER m_endpoint)
0029     Q_PROPERTY(QString authorization MEMBER m_authorization)
0030     Q_PROPERTY(QString requestorRef MEMBER m_requestorRef)
0031     Q_PROPERTY(bool useTrias MEMBER m_useTrias)
0032     /** Override the default HTTP ContentType header in the request. */
0033     Q_PROPERTY(QByteArray contentType MEMBER m_contentType)
0034     /** Location identifier type for UIC station codes.
0035      *  Typically "uic" or "ibnr".
0036      */
0037     Q_PROPERTY(QString uicLocationIdentifierType MEMBER m_uicLocationIdentifierType)
0038 
0039 public:
0040     static inline constexpr const char* type() { return "openJourneyPlanner"; }
0041     AbstractBackend::Capabilities capabilities() const override;
0042     bool needsLocationQuery(const Location &loc, AbstractBackend::QueryType type) const override;
0043     bool queryLocation(const LocationRequest &request, LocationReply *reply, QNetworkAccessManager *nam) const override;
0044     bool queryStopover(const StopoverRequest &request, StopoverReply *reply, QNetworkAccessManager *nam) const override;
0045     bool queryJourney(const JourneyRequest &request, JourneyReply * reply, QNetworkAccessManager *nam) const override;
0046 
0047 private:
0048     QNetworkRequest networkRequest() const;
0049     OpenJourneyPlannerRequestBuilder requestBuilder() const;
0050     OpenJourneyPlannerParser parser() const;
0051 
0052     QUrl m_endpoint;
0053     QString m_authorization;
0054     QString m_requestorRef = QStringLiteral("KPublicTransport");
0055     bool m_useTrias = false;
0056     QByteArray m_contentType = "application/xml";
0057     QString m_uicLocationIdentifierType;
0058 };
0059 
0060 }
0061 
0062 #endif // KPUBLICTRANSPORT_OPENJOURNEYPLANNERBACKEND_H