swift
airlineicaocode.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_AVIATION_AIRLINEICAOCODE_H
7 #define SWIFT_MISC_AVIATION_AIRLINEICAOCODE_H
8 
9 #include <QJsonObject>
10 #include <QMap>
11 #include <QMetaType>
12 #include <QSet>
13 #include <QString>
14 
15 #include "misc/country.h"
16 #include "misc/db/datastore.h"
17 #include "misc/metaclass.h"
18 #include "misc/propertyindexref.h"
19 #include "misc/statusmessagelist.h"
20 #include "misc/swiftmiscexport.h"
21 #include "misc/valueobject.h"
22 
23 SWIFT_DECLARE_VALUEOBJECT_MIXINS(swift::misc::aviation, CAirlineIcaoCode)
24 
25 namespace swift::misc::aviation
26 {
27  class CCallsign;
28 
31  public CValueObject<CAirlineIcaoCode>,
33  {
34  public:
37  {
38  IndexAirlineDesignator = CPropertyIndexRef::GlobalIndexCAirlineIcaoCode,
39  IndexIataCode,
40  IndexAirlineName,
41  IndexAirlineCountryIso,
42  IndexAirlineCountry,
43  IndexTelephonyDesignator,
44  IndexGroupId,
45  IndexGroupName,
46  IndexGroupDesignator,
47  IndexIsVirtualAirline,
48  IndexIsOperating,
49  IndexIsMilitary,
50  IndexDesignatorNameCountry,
51  };
52 
54  CAirlineIcaoCode() = default;
55 
57  CAirlineIcaoCode(const QString &airlineDesignator);
58 
60  CAirlineIcaoCode(const QString &airlineDesignator, const QString &airlineName, const CCountry &country,
61  const QString &telephony, bool virtualAirline, bool operating);
62 
64  const QString &getDesignator() const { return m_designator; }
65 
67  QString getVDesignator() const;
68 
70  QString getVDesignatorDbKey() const;
71 
73  void setDesignator(const QString &icaoDesignator);
74 
76  const QString &getIataCode() const { return m_iataCode; }
77 
79  void setIataCode(const QString &iataCode) { m_iataCode = iataCode.trimmed().toUpper(); }
80 
82  const QString &getCountryIso() const { return m_country.getIsoCode(); }
83 
85  const CCountry &getCountry() const { return m_country; }
86 
88  QString getDesignatorDbKey() const;
89 
91  QString getDesignatorNameCountry() const;
92 
94  void setCountry(const CCountry &country) { m_country = country; }
95 
97  const QString &getName() const { return m_name; }
98 
100  QString getSimplifiedName() const;
101 
103  QString getNameWithKey() const;
104 
106  void setName(const QString &name) { m_name = name.trimmed(); }
107 
109  const QString &getTelephonyDesignator() const { return m_telephonyDesignator; }
110 
112  void setTelephonyDesignator(const QString &telephony) { m_telephonyDesignator = telephony.trimmed().toUpper(); }
113 
115  const QString &getGroupDesignator() const { return m_groupDesignator; }
116 
118  void setGroupDesignator(const QString &designator) { m_groupDesignator = designator.trimmed().toUpper(); }
119 
121  const QString &getGroupName() const { return m_groupName; }
122 
124  void setGroupName(const QString &name) { m_groupName = name.trimmed(); }
125 
127  int getGroupId() const { return m_groupId; }
128 
130  void setGroupId(int id) { m_groupId = id; }
131 
133  bool hasGroupMembership() const { return m_groupId >= 0 && !m_groupDesignator.isEmpty(); }
134 
136  bool isVirtualAirline() const { return m_isVa; }
137 
139  void setVirtualAirline(bool va) { m_isVa = va; }
140 
142  bool isOperating() const { return m_isOperating; }
143 
145  void setOperating(bool operating) { m_isOperating = operating; }
146 
148  bool isMilitary() const { return m_isMilitary; }
149 
151  void setMilitary(bool military) { m_isMilitary = military; }
152 
154  bool hasValidCountry() const;
155 
157  bool hasValidDesignator() const;
158 
160  bool hasIataCode() const;
161 
163  bool matchesDesignator(const QString &designator) const;
164 
166  bool matchesVDesignator(const QString &designator) const;
167 
169  bool matchesIataCode(const QString &iata) const;
170 
172  bool matchesDesignatorOrIataCode(const QString &candidate) const;
173 
175  bool matchesVDesignatorOrIataCode(const QString &candidate) const;
176 
178  bool matchesTelephonyDesignator(const QString &candidate) const;
179 
181  bool matchesNamesOrTelephonyDesignator(const QString &candidate) const;
182 
184  bool isContainedInSimplifiedName(const QString &candidate) const;
185 
187  bool hasTelephonyDesignator() const { return !m_telephonyDesignator.isEmpty(); }
188 
190  bool hasName() const { return !m_name.isEmpty(); }
191 
193  bool hasSimplifiedName() const;
194 
196  bool hasCompleteData() const;
197 
199  QString getCombinedStringWithKey() const;
200 
202  CAirlineIcaoCode thisOrCallsignCode(const CCallsign &callsign) const;
203 
205  CIcons::IconIndex toIcon() const;
206 
208  QString convertToQString(bool i18n = false) const;
209 
211  QVariant propertyByIndex(CPropertyIndexRef index) const;
212 
214  void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant);
215 
217  int comparePropertyByIndex(CPropertyIndexRef index, const CAirlineIcaoCode &compareValue) const;
218 
220  CStatusMessageList validate() const;
221 
223  void updateMissingParts(const CAirlineIcaoCode &otherIcaoCode);
224 
226  QString asHtmlSummary() const;
227 
229  int calculateScore(const CAirlineIcaoCode &otherCode, CStatusMessageList *log = nullptr) const;
230 
232  bool isNull() const;
233 
235  static const CAirlineIcaoCode &null();
236 
238  static bool isValidAirlineDesignator(const QString &airline);
239 
241  static bool isValidIataCode(const QString &iataCode);
242 
244  static QSet<QString> specialValidDesignators();
245 
247  static QString normalizeDesignator(const QString &candidate);
248 
251  static CStatusMessage logMessage(const CAirlineIcaoCode &icaoCode, const QString &message,
252  const QStringList &extraCategories = {},
254 
257  static void addLogDetailsToList(CStatusMessageList *log, const CAirlineIcaoCode &icao, const QString &message,
258  const QStringList &extraCategories = {},
260 
262  static CAirlineIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());
263 
265  static const QSet<int> &iconIds();
266 
267  private:
268  QString m_designator;
269  QString m_iataCode;
270  QString m_name;
271  QString m_telephonyDesignator;
272  QString m_groupDesignator;
273  QString m_groupName;
274  CCountry m_country;
275  int m_groupId = -1;
276  bool m_isVa = false;
277  bool m_isOperating = true;
278  bool m_isMilitary = false;
279 
282  SWIFT_METAMEMBER(dbKey),
283  SWIFT_METAMEMBER(timestampMSecsSinceEpoch),
284  SWIFT_METAMEMBER(designator),
285  SWIFT_METAMEMBER(name),
286  SWIFT_METAMEMBER(country),
287  SWIFT_METAMEMBER(telephonyDesignator),
288  SWIFT_METAMEMBER(groupDesignator),
289  SWIFT_METAMEMBER(groupName),
290  SWIFT_METAMEMBER(groupId),
291  SWIFT_METAMEMBER(isVa),
292  SWIFT_METAMEMBER(isOperating),
293  SWIFT_METAMEMBER(isMilitary));
294  };
295 
298 
299 } // namespace swift::misc::aviation
300 
301 Q_DECLARE_METATYPE(swift::misc::aviation::CAirlineIcaoCode)
302 
303 #endif // SWIFT_MISC_AVIATION_AIRLINEICAOCODE_H
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
Definition: icons.h:32
Non-owning reference to a CPropertyIndex with a subset of its features.
Streamable status message, e.g.
constexpr static auto SeverityInfo
Status severities.
swift::misc::StatusSeverity StatusSeverity
Status severities.
Status messages, e.g. from Core -> GUI.
Mix of the most commonly used mixin classes.
Definition: valueobject.h:114
Value object for ICAO classification.
const QString & getGroupDesignator() const
Group designator.
void setMilitary(bool military)
Military, air force or such?
bool isVirtualAirline() const
Virtual airline.
void setTelephonyDesignator(const QString &telephony)
Telephony designator such as "Speedbird".
void setOperating(bool operating)
Operating airline?
CAirlineIcaoCode()=default
Default constructor.
const QString & getCountryIso() const
Get country, e.g. "FR".
const QString & getIataCode() const
IATA code.
bool isMilitary() const
Military, air force or such?
const QString & getTelephonyDesignator() const
Telephony designator such as "Speedbird".
static const QSet< int > & iconIds()
The airline icon names (name only, not path)
void setVirtualAirline(bool va)
Virtual airline.
const QString & getDesignator() const
Get airline, e.g. "DLH".
bool hasTelephonyDesignator() const
Telephony designator?
void setIataCode(const QString &iataCode)
Set IATA code.
void setName(const QString &name)
Set name.
void setCountry(const CCountry &country)
Set country.
void setGroupDesignator(const QString &designator)
Group designator.
const QString & getGroupName() const
Group name.
const CCountry & getCountry() const
Get country, e.g. "FRANCE".
void setGroupName(const QString &name)
Group name.
const QString & getName() const
Get name, e.g. "Lufthansa".
bool hasGroupMembership() const
Are we a member of a group?
bool hasName() const
Has (airline) name?
Value object encapsulating information of a callsign.
Definition: callsign.h:30
Class from which a derived class can inherit datastore-related functions.
Definition: datastore.h:70
#define SWIFT_METAMEMBER(MEMBER,...)
Macro to define an element within a metaclass.
Definition: metaclass.h:73
#define SWIFT_METACLASS(CLASS,...)
Macro to define a nested metaclass that describes the attributes of its enclosing class.
Definition: metaclass.h:53
StatusSeverity
Status severities.
Definition: statusmessage.h:35
#define SWIFT_MISC_EXPORT
Export a class or function from the library.
#define SWIFT_DECLARE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template declaration of mixins for a CValueObject subclass to be placed near the top of the ...
Definition: valueobject.h:65