KItinerary

fcbutil.h
1/*
2 SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#ifndef KITINERARY_FCBUTIL_H
7#define KITINERARY_FCBUTIL_H
8
9#include "fcbticket1.h"
10#include "fcbticket2.h"
11#include "fcbticket3.h"
12#include "logging.h"
13
14#include <QString>
15
16namespace KItinerary {
17
18/** Higher-level decoding utilities for ERA FCB ticket data. */
20{
21private:
22 constexpr inline static bool isUicCode(Fcb::v13::CodeTableType stationCodeTable)
23 {
24 return stationCodeTable == Fcb::v13::stationUIC || stationCodeTable == Fcb::v13::stationUICReservation;
25 }
26 constexpr inline static bool isUicCode(Fcb::v2::CodeTableType stationCodeTable)
27 {
28 return stationCodeTable == Fcb::v2::stationUIC || stationCodeTable == Fcb::v2::stationUICReservation;
29 }
30 constexpr inline static bool isUicCode(Fcb::v3::CodeTableType stationCodeTable)
31 {
32 return stationCodeTable == Fcb::v3::stationUIC || stationCodeTable == Fcb::v3::stationUICReservation;
33 }
34public:
35 /** Departure station identifier for a travel document,
36 * in the format needed for output with our JSON-LD format.
37 */
38 template <typename CodeTableTypeT, typename T>
39 [[nodiscard]] static QString fromStationIdentifier(CodeTableTypeT stationCodeTable, const T &doc)
40 {
41 if (isUicCode(stationCodeTable)) {
42 return stringifyUicStationIdentifier(doc.fromStationNum, doc.fromStationIA5);
43 }
44 qCWarning(Log) << "Unhandled station code table:" << stationCodeTable;
45 return stringifyStationIdentifier(doc.fromStationNumIsSet(), doc.fromStationNum, doc.fromStationIA5);
46 }
47 template <typename T>
48 [[nodiscard]] static QString fromStationIdentifier(const T &doc) { return fromStationIdentifier(doc.stationCodeTable, doc); }
49 /** Arrival station identifier for a travel document,
50 * in the format needed for output with our JSON-LD format.
51 */
52 template <typename CodeTableTypeT, typename T>
53 [[nodiscard]] static QString toStationIdentifier(CodeTableTypeT stationCodeTable, const T &doc)
54 {
55 if (isUicCode(stationCodeTable)) {
56 return stringifyUicStationIdentifier(doc.toStationNum, doc.toStationIA5);
57 }
58 qCWarning(Log) << "Unhandled station code table:" << stationCodeTable;
59 return stringifyStationIdentifier(doc.toStationNumIsSet(), doc.toStationNum, doc.toStationIA5);
60 }
61 template <typename T>
62 [[nodiscard]] static QString toStationIdentifier(const T &doc) { return toStationIdentifier(doc.stationCodeTable, doc); }
63
64 /** Convert a class code enum value to a string for human representation. */
65 [[nodiscard]] static QString classCodeToString(Fcb::v13::TravelClassType classCode);
66 [[nodiscard]] static QString classCodeToString(Fcb::v2::TravelClassType classCode);
67 [[nodiscard]] static QString classCodeToString(Fcb::v3::TravelClassType classCode);
68
69 /** Decode FCB date. */
70 [[nodiscard]] static QDate decodeDate(int year, std::optional<int> day);
71 [[nodiscard]] static QDate decodeDifferentialDate(const QDate &base, int year, std::optional<int> day);
72
73 /** Decode FCB issuing time. */
74 [[nodiscard]] static QDateTime issuingDateTime(int year, int day, std::optional<int> time);
75 /** Decode differential time, relative to @p baseDt. */
76 [[nodiscard]] static QDateTime decodeDifferentialTime(const QDateTime &baseDt, int day, std::optional<int> time, std::optional<int> utcOffset);
77 [[nodiscard]] static QDateTime decodeDifferentialStartTime(const QDateTime &baseDt, int day, std::optional<int> time, std::optional<int> utcOffset);
78 [[nodiscard]] static QDateTime decodeDifferentialEndTime(const QDateTime &baseDt, int day, std::optional<int> time, std::optional<int> utcOffset);
79
80private:
81 [[nodiscard]] static QString stringifyUicStationIdentifier(int num, const QByteArray &ia5);
82 [[nodiscard]] static QString stringifyStationIdentifier(bool numIsSet, int num, const QByteArray &ia5);
83};
84
85}
86
87#endif // KITINERARY_FCBUTIL_H
Higher-level decoding utilities for ERA FCB ticket data.
Definition fcbutil.h:20
static QString toStationIdentifier(CodeTableTypeT stationCodeTable, const T &doc)
Arrival station identifier for a travel document, in the format needed for output with our JSON-LD fo...
Definition fcbutil.h:53
static QString classCodeToString(Fcb::v13::TravelClassType classCode)
Convert a class code enum value to a string for human representation.
Definition fcbutil.cpp:30
static QString fromStationIdentifier(CodeTableTypeT stationCodeTable, const T &doc)
Departure station identifier for a travel document, in the format needed for output with our JSON-LD ...
Definition fcbutil.h:39
static QDateTime decodeDifferentialTime(const QDateTime &baseDt, int day, std::optional< int > time, std::optional< int > utcOffset)
Decode differential time, relative to baseDt.
Definition fcbutil.cpp:102
static QDateTime issuingDateTime(int year, int day, std::optional< int > time)
Decode FCB issuing time.
Definition fcbutil.cpp:93
static QDate decodeDate(int year, std::optional< int > day)
Decode FCB date.
Definition fcbutil.cpp:74
Classes for reservation/travel data models, data extraction and data augmentation.
Definition berelement.h:17
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 11 2025 11:58:38 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.