From e03c207324a5aa70cdc45908e43e144bf4417933 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 19 Mar 2016 20:25:22 +0100 Subject: [PATCH] refs #618, refs #619, utility functions for model/distributor value objects --- src/blackmisc/datastoreobjectlist.cpp | 15 ++++++++++++ src/blackmisc/datastoreobjectlist.h | 3 +++ src/blackmisc/simulation/aircraftmodel.cpp | 21 +++++++++++++++- src/blackmisc/simulation/aircraftmodel.h | 25 +++++++++++++------- src/blackmisc/simulation/aircraftmodellist.h | 1 + src/blackmisc/simulation/distributorlist.cpp | 11 ++++++++- src/blackmisc/simulation/distributorlist.h | 5 +++- 7 files changed, 70 insertions(+), 11 deletions(-) diff --git a/src/blackmisc/datastoreobjectlist.cpp b/src/blackmisc/datastoreobjectlist.cpp index 52f85178f..c3a1841b4 100644 --- a/src/blackmisc/datastoreobjectlist.cpp +++ b/src/blackmisc/datastoreobjectlist.cpp @@ -95,6 +95,21 @@ namespace BlackMisc return delta; } + template + int IDatastoreObjectList::removeObjectsWithoutDbKey() + { + if (this->container().isEmpty()) { return 0; } + CONTAINER newValues; + for (const OBJ &obj : ITimestampObjectList::container()) + { + if (!obj.hasValidDbKey()) { continue; } + newValues.push_back(obj); + } + int delta = this->container().size() - newValues.size(); + this->container() = newValues; + return delta; + } + template int IDatastoreObjectList::replaceOrAddObjectsByKey(const CONTAINER &container) { diff --git a/src/blackmisc/datastoreobjectlist.h b/src/blackmisc/datastoreobjectlist.h index 633656f0e..85af716d9 100644 --- a/src/blackmisc/datastoreobjectlist.h +++ b/src/blackmisc/datastoreobjectlist.h @@ -43,6 +43,9 @@ namespace BlackMisc //! Remove objects with key int removeObjectsWithKeys(const QList &keys); + //! Remove objects without key + int removeObjectsWithoutDbKey(); + //! Update or insert data (based on DB key) int replaceOrAddObjectsByKey(const CONTAINER &container); diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index ee8c2c013..2e9494318 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -8,7 +8,7 @@ */ #include "aircraftmodel.h" -#include "distributor.h" +#include "distributorlist.h" #include "blackmisc/datastoreutility.h" #include "blackmisc/comparefunctions.h" #include @@ -276,6 +276,25 @@ namespace BlackMisc return this->m_livery.hasValidAirlineDesignator(); } + bool CAircraftModel::hasDistributor() const + { + return this->m_distributor.hasValidDbKey(); + } + + bool CAircraftModel::matchesDistributor(const CDistributor &distributor) const + { + if (!distributor.hasValidDbKey()) { return false; } + if (!this->hasDistributor()) { return false; } + return this->m_distributor.getDbKey() == distributor.getDbKey(); + } + + bool CAircraftModel::matchesAnyDistributor(const CDistributorList &distributors) const + { + if (distributors.isEmpty()) { return false; } + if (!this->hasDistributor()) { return false; } + return distributors.matchesAnyKeyOrAlias(this->m_distributor.getDbKey()); + } + const CIcon &CAircraftModel::getModelModeAsIcon() const { switch (this->getModelMode()) diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index 6ac9f6642..9d97cc6d0 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -14,7 +14,7 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/simulation/simulatorinfo.h" -#include "blackmisc/simulation/distributor.h" +#include "blackmisc/simulation/distributorlist.h" #include "blackmisc/aviation/livery.h" #include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/network/user.h" @@ -174,6 +174,15 @@ namespace BlackMisc //! Set distributor void setDistributor(const CDistributor &distributor) { m_distributor = distributor; } + //! Distributor + bool hasDistributor() const; + + //! By distributor + bool matchesDistributor(const CDistributor &distributor) const; + + //! By distributor + bool matchesAnyDistributor(const CDistributorList &distributors) const; + //! Name const QString &getName() const { return this->m_name; } @@ -273,13 +282,13 @@ namespace BlackMisc BlackMisc::Aviation::CAircraftIcaoCode m_aircraftIcao; //!< ICAO code if available BlackMisc::Aviation::CLivery m_livery; //!< livery information CSimulatorInfo m_simulator; //!< model for given simulator - CDistributor m_distributor; //!< who designed or distributed the model - QString m_modelString; //!< Simulator model key, unique - QString m_name; //!< Model name - QString m_description; //!< descriptive text - QString m_fileName; //!< file name - ModelType m_modelType = TypeUnknown; //!< model string is coming representing ...? - ModelMode m_modelMode = Include; //!< model mode (include / exclude) + CDistributor m_distributor; //!< who designed or distributed the model + QString m_modelString; //!< Simulator model key, unique + QString m_name; //!< Model name + QString m_description; //!< descriptive text + QString m_fileName; //!< file name + ModelType m_modelType = TypeUnknown; //!< model string is coming representing ...? + ModelMode m_modelMode = Include; //!< model mode (include / exclude) }; } // namespace } // namespace diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 8de39bc36..db2123d71 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -14,6 +14,7 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/simulation/aircraftmodel.h" +#include "blackmisc/simulation/distributorlist.h" #include "blackmisc/datastoreobjectlist.h" #include "blackmisc/collection.h" #include "blackmisc/sequence.h" diff --git a/src/blackmisc/simulation/distributorlist.cpp b/src/blackmisc/simulation/distributorlist.cpp index 1be3a59f5..c0efc4747 100644 --- a/src/blackmisc/simulation/distributorlist.cpp +++ b/src/blackmisc/simulation/distributorlist.cpp @@ -20,7 +20,7 @@ namespace BlackMisc CSequence(other) { } - CDistributor CDistributorList::findByKeyOrAlias(const QString &keyOrAlias) + CDistributor CDistributorList::findByKeyOrAlias(const QString &keyOrAlias) const { if (keyOrAlias.isEmpty()) { return CDistributor(); } for (const CDistributor &distributor : (*this)) @@ -44,6 +44,15 @@ namespace BlackMisc return CDistributor(); } + bool CDistributorList::matchesAnyKeyOrAlias(const QString &keyOrAlias) const + { + for (const CDistributor &distributor : (*this)) + { + if (distributor.matchesKeyOrAlias(keyOrAlias)) { return true; } + } + return true; + } + QStringList CDistributorList::getDbKeysAndAliases() const { if (this->isEmpty()) { return QStringList(); } diff --git a/src/blackmisc/simulation/distributorlist.h b/src/blackmisc/simulation/distributorlist.h index 1ac97156c..54d643397 100644 --- a/src/blackmisc/simulation/distributorlist.h +++ b/src/blackmisc/simulation/distributorlist.h @@ -41,11 +41,14 @@ namespace BlackMisc CDistributorList(const CSequence &other); //! Find by id or alias - CDistributor findByKeyOrAlias(const QString &keyOrAlias); + CDistributor findByKeyOrAlias(const QString &keyOrAlias) const; //! Best match by given pattern CDistributor smartDistributorSelector(const CDistributor &distributorPattern); + //! At least is matching key or alias + bool matchesAnyKeyOrAlias(const QString &keyOrAlias) const; + //! All DB keys and aliases QStringList getDbKeysAndAliases() const; };