mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 17:35:34 +08:00
147 lines
6.1 KiB
C++
147 lines
6.1 KiB
C++
/* Copyright (C) 2015
|
|
* swift project Community / Contributors
|
|
*
|
|
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
|
|
* directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated,
|
|
* or distributed except according to the terms contained in the LICENSE file.
|
|
*/
|
|
|
|
//! \file
|
|
|
|
#ifndef BLACKMISC_AVIATION_AIRLINEICAOCODELIST_H
|
|
#define BLACKMISC_AVIATION_AIRLINEICAOCODELIST_H
|
|
|
|
#include "airlineicaocode.h"
|
|
#include "callsign.h"
|
|
#include "blackmisc/blackmiscexport.h"
|
|
#include "blackmisc/collection.h"
|
|
#include "blackmisc/db/datastoreobjectlist.h"
|
|
#include "blackmisc/sequence.h"
|
|
#include "blackmisc/variant.h"
|
|
|
|
#include <QJsonArray>
|
|
#include <QMetaType>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <tuple>
|
|
|
|
namespace BlackMisc
|
|
{
|
|
namespace Aviation
|
|
{
|
|
//! Value object encapsulating a list of ICAO codes.
|
|
class BLACKMISC_EXPORT CAirlineIcaoCodeList :
|
|
public CSequence<CAirlineIcaoCode>,
|
|
public BlackMisc::Db::IDatastoreObjectList<CAirlineIcaoCode, CAirlineIcaoCodeList, int>,
|
|
public BlackMisc::Mixin::MetaType<CAirlineIcaoCodeList>
|
|
{
|
|
public:
|
|
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CAirlineIcaoCodeList)
|
|
using CSequence::CSequence;
|
|
|
|
//! Categories
|
|
static const QStringList &getLogCategories();
|
|
|
|
//! Default constructor.
|
|
CAirlineIcaoCodeList();
|
|
|
|
//! Construct from a base class object.
|
|
CAirlineIcaoCodeList(const CSequence<CAirlineIcaoCode> &other);
|
|
|
|
//! Construct from initializer list.
|
|
CAirlineIcaoCodeList(std::initializer_list<CAirlineIcaoCode> il);
|
|
|
|
//! Find by designator
|
|
//! Not unique because of virtual airlines
|
|
CAirlineIcaoCodeList findByDesignator(const QString &designator) const;
|
|
|
|
//! Find by v-designator, this should be unique
|
|
CAirlineIcaoCodeList findByVDesignator(const QString &designator) const;
|
|
|
|
//! Find by ICAO code if this is unique, otherwise return default object
|
|
CAirlineIcaoCode findByUniqueVDesignatorOrDefault(const QString &designator, bool preferOperatingAirlines) const;
|
|
|
|
//! Find by IATA code
|
|
//! Not unique because of virtual airlines and ceased airlines
|
|
CAirlineIcaoCodeList findByIataCode(const QString &iata) const;
|
|
|
|
//! Find by IATA code if this is unique, otherwise return default object
|
|
CAirlineIcaoCode findByUniqueIataCodeOrDefault(const QString &iata) const;
|
|
|
|
//! Find by designator or IATA code
|
|
CAirlineIcaoCodeList findByDesignatorOrIataCode(const QString &designatorOrIata) const;
|
|
|
|
//! Find by v-designator or IATA code
|
|
CAirlineIcaoCodeList findByVDesignatorOrIataCode(const QString &designatorOrIata) const;
|
|
|
|
//! Find by country code
|
|
CAirlineIcaoCodeList findByCountryIsoCode(const QString &isoCode) const;
|
|
|
|
//! Find if simplified name contains search string
|
|
CAirlineIcaoCodeList findBySimplifiedNameContaining(const QString &containedString) const;
|
|
|
|
//! Find by names or telephony designator (aka callsign, not to be confused with CCallsign)
|
|
CAirlineIcaoCodeList findByTelephonyDesignator(const QString &candidate) const;
|
|
|
|
//! Find by names or telephony designator (aka callsign, not to be confused with CCallsign)
|
|
CAirlineIcaoCodeList findByNamesOrTelephonyDesignator(const QString &candidate) const;
|
|
|
|
//! Find by military flag
|
|
CAirlineIcaoCodeList findByMilitary(bool military) const;
|
|
|
|
//! The ones with a valid designator
|
|
CAirlineIcaoCodeList findByValidDesignator() const;
|
|
|
|
//! The ones with an invalid designator
|
|
CAirlineIcaoCodeList findByInvalidDesignator() const;
|
|
|
|
//! Use callsign to conclude airline
|
|
CAirlineIcaoCode findBestMatchByCallsign(const CCallsign &callsign) const;
|
|
|
|
//! Best selection by given pattern
|
|
CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const;
|
|
|
|
//! Reduce by airline name/telephone designator, ISO country
|
|
CAirlineIcaoCodeList ifPossibleReduceNameTelephonyCountry(const BlackMisc::Aviation::CCallsign &cs, const QString &airlineName, const QString &telephony, const QString &countryIso, bool &reduced, const QString &logInfo, CStatusMessageList *log) const;
|
|
|
|
//! Reduce by ISO country
|
|
CAirlineIcaoCodeList ifPossibleReduceByCountry(const QString &countryIso) const;
|
|
|
|
//! Reduce by telephony designator
|
|
CAirlineIcaoCodeList ifPossibleReduceByTelephonyDesignator(const QString &telephonyDesignator) const;
|
|
|
|
//! String list for completion by ICAO designator
|
|
QStringList toIcaoDesignatorCompleterStrings(bool combinedString = true, bool sort = true) const;
|
|
|
|
//! String list for completion by ICAO designator plus Name
|
|
QStringList toIcaoDesignatorNameCountryCompleterStrings(bool sort = true) const;
|
|
|
|
//! String list for completion by name
|
|
QStringList toNameCompleterStrings(bool sort = true) const;
|
|
|
|
//! All designators
|
|
QSet<QString> allDesignators() const;
|
|
|
|
//! All designators
|
|
QSet<QString> allVDesignators() const;
|
|
|
|
//! Contains given designator?
|
|
bool containsDesignator(const QString &designator) const;
|
|
|
|
//! Contains given designator?
|
|
bool containsVDesignator(const QString &vDesignator) const;
|
|
|
|
//! To id map
|
|
AirlineIcaoIdMap toIdMap() const;
|
|
|
|
//! From our DB JSON
|
|
static CAirlineIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete = true, CAirlineIcaoCodeList *inconsistent = nullptr);
|
|
};
|
|
} //namespace
|
|
} // namespace
|
|
|
|
Q_DECLARE_METATYPE(BlackMisc::Aviation::CAirlineIcaoCodeList)
|
|
Q_DECLARE_METATYPE(BlackMisc::CCollection<BlackMisc::Aviation::CAirlineIcaoCode>)
|
|
|
|
#endif //guard
|