swift
aircrafticaocode.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2015 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_AIRCRAFTICAOCODE_H
7 #define SWIFT_MISC_AVIATION_AIRCRAFTICAOCODE_H
8 
9 #include <QJsonObject>
10 #include <QMetaType>
11 #include <QString>
12 #include <QStringList>
13 
15 #include "misc/aviation/waketurbulencecategory.h"
16 #include "misc/db/datastore.h"
17 #include "misc/metaclass.h"
18 #include "misc/pq/length.h"
19 #include "misc/propertyindexref.h"
20 #include "misc/statusmessagelist.h"
21 #include "misc/swiftmiscexport.h"
22 #include "misc/valueobject.h"
23 
24 SWIFT_DECLARE_VALUEOBJECT_MIXINS(swift::misc::aviation, CAircraftIcaoCode)
25 
26 namespace swift::misc::aviation
27 {
30  public CValueObject<CAircraftIcaoCode>,
32  {
33  public:
36  {
37  IndexAircraftDesignator = CPropertyIndexRef::GlobalIndexCAircraftIcaoCode,
38  IndexIataCode,
39  IndexFamily,
40  IndexCombinedAircraftType,
41  IndexManufacturer,
42  IndexModelDescription,
43  IndexModelIataDescription,
44  IndexModelSwiftDescription,
45  IndexCombinedDescription,
46  IndexWtc,
47  IndexIsRealworld,
48  IndexIsMilitary,
49  IndexIsLegacy,
50  IndexIsVtol,
51  IndexRank,
52  IndexCategory,
53  IndexDesignatorManufacturer
54  };
55 
58 
60  CAircraftIcaoCode(const QString &icao, const QString &combinedType = "");
61 
63  CAircraftIcaoCode(const QString &icao, const QString &combinedType, const QString &manufacturer,
64  const QString &model, CWakeTurbulenceCategory wtc, bool realworld, bool legacy, bool military,
65  int rank);
66 
68  CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &combinedType,
69  const QString &manufacturer, const QString &model, CWakeTurbulenceCategory wtc,
70  bool realworld, bool legacy, bool military, int rank);
71 
73  CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &family, const QString &combinedType,
74  const QString &manufacturer, const QString &model, const QString &modelIata,
75  const QString &modelSwift, CWakeTurbulenceCategory wtc, bool realworld, bool legacy,
76  bool military, int rank);
77 
79  const QString &getDesignator() const { return m_designator; }
80 
82  QString getDesignatorDbKey() const;
83 
85  QString getDesignatorManufacturer() const;
86 
88  void setDesignator(const QString &icaoDesignator) { m_designator = icaoDesignator.trimmed().toUpper(); }
89 
91  bool hasDesignator() const;
92 
94  bool hasValidDesignator() const;
95 
97  bool hasKnownDesignator() const;
98 
100  bool hasSpecialDesignator() const;
101 
103  const QString &getIataCode() const { return m_iataCode; }
104 
106  void setIataCode(const QString &iata) { m_iataCode = iata.toUpper().trimmed(); }
107 
109  bool hasIataCode() const { return !m_iataCode.isEmpty(); }
110 
112  bool isIataSameAsDesignator() const;
113 
115  const QString &getFamily() const { return m_family; }
116 
118  void setFamily(const QString &family) { m_family = family.toUpper().trimmed(); }
119 
121  bool hasFamily() const { return !m_family.isEmpty(); }
122 
124  bool isFamilySameAsDesignator() const;
125 
127  const QString &getCombinedType() const { return m_combinedType; }
128 
130  bool hasValidCombinedType() const;
131 
133  QString getEngineType() const;
134 
136  QChar getEngineTypeChar() const;
137 
139  int getEnginesCount() const;
140 
142  QString getEngineCountString() const;
143 
145  QString getAircraftType() const;
146 
148  QChar getAircraftTypeChar() const;
149 
151  void setCombinedType(const QString &type) { m_combinedType = type.trimmed().toUpper(); }
152 
154  const QString &getModelDescription() const { return m_modelDescription; }
155 
157  const QString &getModelIataDescription() const { return m_modelIataDescription; }
158 
160  const QString &getModelSwiftDescription() const { return m_modelSwiftDescription; }
161 
163  QString getCombinedModelDescription() const;
164 
166  bool matchesAnyDescription(const QString &candidate) const;
167 
170  bool matchesCombinedType(const QString &combinedType) const;
171 
173  bool matchesCombinedTypeAndManufacturer(const QString &combinedType, const QString &manufacturer) const;
174 
176  void setModelDescription(const QString &modelDescription) { m_modelDescription = modelDescription.trimmed(); }
177 
179  void setModelIataDescription(const QString &modelDescription)
180  {
181  m_modelIataDescription = modelDescription.trimmed();
182  }
183 
185  void setModelSwiftDescription(const QString &modelDescription)
186  {
187  m_modelSwiftDescription = modelDescription.trimmed();
188  }
189 
191  bool hasModelDescription() const { return !m_modelDescription.isEmpty(); }
192 
194  bool hasModelIataDescription() const { return !m_modelIataDescription.isEmpty(); }
195 
197  bool hasModelSwiftDescription() const { return !m_modelSwiftDescription.isEmpty(); }
198 
200  const QString &getManufacturer() const { return m_manufacturer; }
201 
203  void setManufacturer(const QString &manufacturer) { m_manufacturer = manufacturer.trimmed(); }
204 
206  bool hasManufacturer() const;
207 
209  bool matchesManufacturer(const QString &manufacturer) const;
210 
212  CWakeTurbulenceCategory getWtc() const { return m_wtc; }
213 
215  void setWtc(CWakeTurbulenceCategory wtc) { m_wtc = wtc; }
216 
218  bool hasValidWtc() const { return !m_wtc.isUnknown(); }
219 
221  bool isVtol() const;
222 
224  bool isMilitary() const { return m_military; }
225 
227  bool isRealWorld() const { return m_realWorld; }
228 
230  bool isLegacyAircraft() const { return m_legacy; }
231 
234  bool isDbDuplicate() const;
235 
237  void setCodeFlags(bool military, bool legacy, bool realWorld);
238 
240  void setMilitary(bool military);
241 
243  void setRealWorld(bool realWorld);
244 
246  void setLegacy(bool legacy);
247 
249  int getRank() const { return m_rank; }
250 
252  QString getRankString() const;
253 
255  void setRank(int rank);
256 
258  QString getCombinedIcaoStringWithKey() const;
259 
261  QString getCombinedIcaoCategoryStringWithKey() const;
262 
264  QString getCombinedIataStringWithKey() const;
265 
267  QString getCombinedFamilyStringWithKey() const;
268 
270  const CAircraftCategory &getCategory() const { return m_category; }
271 
273  bool hasCategory() const;
274 
276  void setCategory(const CAircraftCategory &category) { m_category = category; }
277 
279  void setCategoryId(int id) { m_category.setDbKey(id); }
280 
282  bool hasCompleteData() const;
283 
285  bool matchesDesignator(const QString &designator, int fuzzyMatch = -1, int *result = nullptr) const;
286 
289  bool matchesIataCode(const QString &iata, int fuzzyMatch = -1, int *result = nullptr) const;
290 
292  bool matchesFamily(const QString &family, int fuzzyMatch = -1, int *result = nullptr) const;
293 
295  bool matchesDesignatorOrIata(const QString &icaoOrIata) const;
296 
298  bool matchesDesignatorIataOrFamily(const QString &icaoIataOrFamily) const;
299 
301  QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const;
302 
304  void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant);
305 
307  int comparePropertyByIndex(CPropertyIndexRef index, const CAircraftIcaoCode &compareValue) const;
308 
310  QString convertToQString(bool i18n = false) const;
311 
313  void updateMissingParts(const CAircraftIcaoCode &otherIcaoCode);
314 
316  CStatusMessageList validate() const;
317 
319  QString asHtmlSummary() const;
320 
323  int calculateScore(const CAircraftIcaoCode &otherCode, CStatusMessageList *log = nullptr) const;
324 
327  void guessModelParameters(physical_quantities::CLength &guessedCGOut,
328  physical_quantities::CSpeed &guessedVRotateOut) const;
329 
331  bool isNull() const;
332 
334  static const CAircraftIcaoCode &null();
335 
337  static bool isValidDesignator(const QString &designator);
338 
340  static bool isValidCombinedType(const QString &combinedType);
341 
343  static const QString &getUnassignedDesignator();
344 
346  static const QString &getGliderDesignator();
347 
349  static const CAircraftIcaoCode &unassignedIcao();
350 
352  static const QStringList &getSpecialDesignators();
353 
355  static QString normalizeDesignator(const QString &candidate);
356 
358  static QStringList alternativeCombinedCodes(const QString &combinedCode);
359 
361  static bool isEPTEngineType(const QChar engineType);
362 
365  static CStatusMessage logMessage(const CAircraftIcaoCode &icaoCode, const QString &message,
366  const QStringList &extraCategories = {},
368 
371  static void addLogDetailsToList(CStatusMessageList *log, const CAircraftIcaoCode &icao, const QString &message,
372  const QStringList &extraCategories = {},
374 
376  static CAircraftIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());
377 
378  static constexpr int DesignatorMinLength = 2;
379  static constexpr int DesignatorMaxLength = 5;
380 
381  private:
382  QString m_designator;
383  QString m_iataCode;
384  QString m_family;
385  QString m_combinedType;
386  QString m_manufacturer;
387  QString m_modelDescription;
388  QString m_modelIataDescription;
389  QString m_modelSwiftDescription;
391  bool m_realWorld = true;
392  bool m_legacy = false;
393  bool m_military = false;
394  int m_rank = 10;
395  CAircraftCategory m_category;
396 
398  static QString createdCombinedString(const QString &type, const QString &engineCount, const QString &engine);
399 
401  static QString createdCombinedString(const QString &type, int engineCount, const QString &engine);
402 
405  SWIFT_METAMEMBER(dbKey),
406  SWIFT_METAMEMBER(timestampMSecsSinceEpoch),
407  SWIFT_METAMEMBER(designator),
408  SWIFT_METAMEMBER(iataCode),
409  SWIFT_METAMEMBER(family),
410  SWIFT_METAMEMBER(combinedType),
411  SWIFT_METAMEMBER(manufacturer),
412  SWIFT_METAMEMBER(modelDescription),
413  SWIFT_METAMEMBER(modelIataDescription),
414  SWIFT_METAMEMBER(modelSwiftDescription),
415  SWIFT_METAMEMBER(category),
416  SWIFT_METAMEMBER(wtc),
417  SWIFT_METAMEMBER(military),
418  SWIFT_METAMEMBER(realWorld),
419  SWIFT_METAMEMBER(legacy),
420  SWIFT_METAMEMBER(rank));
421  };
422 
425 
426 } // namespace swift::misc::aviation
427 
429 
430 #endif // SWIFT_MISC_AVIATION_AIRCRAFTICAOCODE_H
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 aircraft categories.
Value object for ICAO classification.
CWakeTurbulenceCategory getWtc() const
Get WTC.
bool isRealWorld() const
Real world aircraft?
bool hasModelDescription() const
Has model description?
const QString & getFamily() const
Family (e.g. A350)
bool hasIataCode() const
Has IATA code?
const QString & getDesignator() const
Get ICAO designator, e.g. "B737".
void setModelSwiftDescription(const QString &modelDescription)
Set the alternative swift model description.
void setCategoryId(int id)
Set category id.
const QString & getModelDescription() const
Get IACO model description, e.g. "A-330-200".
void setIataCode(const QString &iata)
Set IATA code.
void setWtc(CWakeTurbulenceCategory wtc)
Set WTC.
void setManufacturer(const QString &manufacturer)
Set the manufacturer.
const QString & getIataCode() const
IATA code.
void setCombinedType(const QString &type)
Set type.
void setModelIataDescription(const QString &modelDescription)
Set the alternative IATA model description.
void setDesignator(const QString &icaoDesignator)
Set ICAO designator, e.g. "B737".
void setModelDescription(const QString &modelDescription)
Set the model description (ICAO description)
const QString & getCombinedType() const
Get type, e.g. "L2J".
const CAircraftCategory & getCategory() const
Get category.
const QString & getModelSwiftDescription() const
Get swift model description.
void setCategory(const CAircraftCategory &category)
Set category.
bool isLegacyAircraft() const
Legacy aircraft (no current ICAO code)
bool hasModelSwiftDescription() const
Has swift model description?
void setFamily(const QString &family)
Set family.
const QString & getManufacturer() const
Get manufacturer, e.g. "Airbus".
const QString & getModelIataDescription() const
Get IATA model description.
bool hasModelIataDescription() const
Has IATA model description?
bool hasValidWtc() const
Valid WTC code?
Class from which a derived class can inherit datastore-related functions.
Definition: datastore.h:70
Physical unit length (length)
Definition: length.h:18
#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