7 #include <QStringBuilder>
15 namespace swift::misc::aviation
65 bool preferOperatingAirlines)
const
82 const QString iso(isoCode.toUpper());
144 if (codesFound.
size() == 1) {
return codesFound.
front(); }
155 bool reduced =
false;
158 reduced, QString(),
nullptr);
165 const CCallsign &cs,
const QString &airlineName,
const QString &telephony,
const QString &countryIso,
179 if (telephony.isEmpty() && airlineName.isEmpty() && countryIso.isEmpty())
184 loginfo % u
" No name/telephony/country, cannot reduce " %
185 QString::number(this->
size()) % u
" entries",
193 if (step1Data.
isEmpty() || step1Data.
size() == this->size())
198 log, cs, loginfo % QStringLiteral(
" cannot reduce by '%1'").arg(airlineName),
getLogCategories());
211 if (step1Data.
size() == 1) {
return step1Data; }
215 if (step2Data.
isEmpty() || step2Data.
size() == this->size())
220 loginfo % QStringLiteral(
" cannot reduce by name '%1'").arg(telephony),
223 step2Data = step1Data;
231 log, cs, loginfo % QStringLiteral(
" reduced by telephony '%1'").arg(telephony),
getLogCategories());
234 if (step2Data.
size() == 1) {
return step2Data; }
237 if (step3Data.
isEmpty() || step3Data.
size() == this->size())
242 log, cs, loginfo % QStringLiteral(
" cannot reduce by country '%1'").arg(countryIso),
245 step3Data = step2Data;
261 if (countryIso.isEmpty()) {
return *
this; }
262 if (this->
isEmpty()) {
return *
this; }
264 if (found.
size() == this->size() || found.
isEmpty()) {
return *
this; }
271 if (telephonyDesignator.isEmpty()) {
return *
this; }
272 if (this->
isEmpty()) {
return *
this; }
274 if (found.
size() == this->size() || found.
isEmpty()) {
return *
this; }
293 for (
const QJsonValue &value : array)
299 if (ignoreIncomplete) {
continue; }
320 if (cs.isEmpty()) {
continue; }
326 if (c.contains(d) || d.isEmpty()) {
continue; }
330 if (
sort) { c.sort(); }
341 if (cs.isEmpty()) {
continue; }
344 if (
sort) { c.sort(); }
355 if (cs.isEmpty()) {
continue; }
358 if (
sort) { c.sort(); }
386 if (designator.isEmpty()) {
return false; }
392 if (vDesignator.isEmpty()) {
return false; }
static const QString & aviation()
Aviation specific.
auto findFirstByOrDefault(Predicate p, const Value &def) const
Return a copy of the first element for which a given predicate returns true, or a default value if th...
bool contains(const T &object) const
Return true if there is an element equal to given object. Uses the most efficient implementation avai...
size_type size() const
Returns number of elements in the sequence.
const_reference frontOrDefault() const
Access the first element, or a default-initialized value if the sequence is empty.
CSequence findBy(Predicate p) const
Return a copy containing only those elements for which a given predicate returns true.
int removeIf(Predicate p)
Remove elements for which a given predicate returns true.
void push_back(const T &value)
Appends an element at the end of the sequence.
reference front()
Access the first element.
bool isEmpty() const
Synonym for empty.
void sort(Predicate p)
In-place sort by a given comparator predicate.
Build a QSet more efficiently when calling insert() in a for loop.
void insert(const T &value)
Add an element to the set. Runs in amortized constant time.
Status messages, e.g. from Core -> GUI.
Value object for ICAO classification.
QString getCombinedStringWithKey() const
Comined string with key.
bool isVirtualAirline() const
Virtual airline.
static bool isValidAirlineDesignator(const QString &airline)
Valid designator?
const QString & getCountryIso() const
Get country, e.g. "FR".
const QString & getIataCode() const
IATA code.
bool isContainedInSimplifiedName(const QString &candidate) const
Does simplified name contain the candidate.
bool matchesDesignator(const QString &designator) const
Matches designator string?
bool isMilitary() const
Military, air force or such?
const QString & getTelephonyDesignator() const
Telephony designator such as "Speedbird".
const QString & getDesignator() const
Get airline, e.g. "DLH".
bool hasCompleteData() const
Complete data.
bool hasValidDesignator() const
Airline designator available?
static CAirlineIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix=QString())
From our DB JSON.
bool matchesTelephonyDesignator(const QString &candidate) const
Matches telephony designator (aka callsign, not to be confused with CCallsign)
bool matchesVDesignator(const QString &designator) const
Matches v-designator string?
static bool isValidIataCode(const QString &iataCode)
Valid IATA code?
bool matchesNamesOrTelephonyDesignator(const QString &candidate) const
Relaxed check by name or telephony designator (aka callsign, not to be confused with CCallsign)
bool matchesVDesignatorOrIataCode(const QString &candidate) const
Matches IATA code or v-designator?
bool matchesDesignatorOrIataCode(const QString &candidate) const
Matches IATA code or designator?
const CCountry & getCountry() const
Get country, e.g. "FRANCE".
bool matchesIataCode(const QString &iata) const
Matches IATA code?
QString getDesignatorNameCountry() const
Combined string designator, name, country.
QString getVDesignator() const
Get airline, e.g. "DLH", but "VMVA" for virtual airlines.
const QString & getName() const
Get name, e.g. "Lufthansa".
CAirlineIcaoCode thisOrCallsignCode(const CCallsign &callsign) const
What is better, the callsign airline code or this code. Return the better one.
bool isOperating() const
Operating?
QString getNameWithKey() const
Name plus key, e.g. "Lufthansa (3421)".
Value object encapsulating a list of ICAO codes.
CAirlineIcaoCode findByUniqueIataCodeOrDefault(const QString &iata) const
Find by IATA code if this is unique, otherwise return default object.
CAirlineIcaoCodeList ifPossibleReduceNameTelephonyCountry(const swift::misc::aviation::CCallsign &cs, const QString &airlineName, const QString &telephony, const QString &countryIso, bool &reduced, const QString &logInfo, CStatusMessageList *log) const
Reduce by airline name/telephone designator, ISO country.
CAirlineIcaoCodeList findByMilitary(bool military) const
Find by military flag.
QSet< QString > allVDesignators() const
All designators.
QStringList toIcaoDesignatorNameCountryCompleterStrings(bool sort=true) const
String list for completion by ICAO designator plus Name.
CAirlineIcaoCodeList findByNamesOrTelephonyDesignator(const QString &candidate) const
Find by names or telephony designator (aka callsign, not to be confused with CCallsign)
bool containsVDesignator(const QString &vDesignator) const
Contains given designator?
CAirlineIcaoCodeList findByValidDesignator() const
The ones with a valid designator.
CAirlineIcaoCodeList findByTelephonyDesignator(const QString &candidate) const
Find by names or telephony designator (aka callsign, not to be confused with CCallsign)
AirlineIcaoIdMap toIdMap() const
To id map.
CAirlineIcaoCodeList findByVDesignatorOrIataCode(const QString &designatorOrIata) const
Find by v-designator or IATA code.
static const QStringList & getLogCategories()
Categories.
CAirlineIcaoCodeList findByInvalidDesignator() const
The ones with an invalid designator.
static CAirlineIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete=true, CAirlineIcaoCodeList *inconsistent=nullptr)
From our DB JSON.
CAirlineIcaoCodeList ifPossibleReduceByCountry(const QString &countryIso) const
Reduce by ISO country.
CAirlineIcaoCode findBestMatchByCallsign(const CCallsign &callsign) const
Use callsign to conclude airline.
CAirlineIcaoCodeList findByIataCode(const QString &iata) const
Find by IATA code Not unique because of virtual airlines and ceased airlines.
CAirlineIcaoCodeList findByDesignatorOrIataCode(const QString &designatorOrIata) const
Find by designator or IATA code.
CAirlineIcaoCodeList findByCountryIsoCode(const QString &isoCode) const
Find by country code.
QStringList toNameCompleterStrings(bool sort=true) const
String list for completion by name.
CAirlineIcaoCodeList findBySimplifiedNameContaining(const QString &containedString) const
Find if simplified name contains search string.
CAirlineIcaoCodeList ifPossibleReduceByTelephonyDesignator(const QString &telephonyDesignator) const
Reduce by telephony designator.
CAirlineIcaoCodeList()
Default constructor.
CAirlineIcaoCode findByUniqueVDesignatorOrDefault(const QString &designator, bool preferOperatingAirlines) const
Find by ICAO code if this is unique, otherwise return default object.
QStringList toIcaoDesignatorCompleterStrings(bool combinedString=true, bool sort=true) const
String list for completion by ICAO designator.
CAirlineIcaoCodeList findByDesignator(const QString &designator) const
Find by designator Not unique because of virtual airlines.
bool containsDesignator(const QString &designator) const
Contains given designator?
QSet< QString > allDesignators() const
All designators.
CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
Best selection by given pattern.
CAirlineIcaoCodeList findByVDesignator(const QString &designator) const
Find by v-designator, this should be unique.
Value object encapsulating information of a callsign.
static void addLogDetailsToList(CStatusMessageList *log, const CCallsign &callsign, const QString &message, const QStringList &extraCategories={}, CStatusMessage::StatusSeverity s=CStatusMessage::SeverityInfo)
Specialized log for matching / reverse lookup.
bool isEmpty() const
Is empty?
QString getAirlinePrefix() const
Airline suffix (e.g. DLH1234 -> DLH) if applicable.
int getDbKey() const
Get DB key.
bool hasValidDbKey() const
Has valid DB key.
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.