Ref T117, utility functions for reader

* isDbModelEqualForPublishing
* getModelForDbKey(int
This commit is contained in:
Klaus Basan
2017-08-10 11:27:12 +02:00
committed by Mathew Sutcliffe
parent fe3368e1f4
commit 5a67276fbb
4 changed files with 75 additions and 10 deletions

View File

@@ -97,6 +97,13 @@ namespace BlackCore
return models.findFirstByModelStringOrDefault(modelString);
}
CAircraftModel CModelDataReader::getModelForDbKey(int dbKey) const
{
if (dbKey < 0) { return CAircraftModel(); }
const CAircraftModelList models(getModels());
return models.findByKey(dbKey);
}
CAircraftModelList CModelDataReader::getModelsForAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator, const QString &combinedCode)
{
if (aircraftDesignator.isEmpty()) { return CAircraftModelList(); }

View File

@@ -79,6 +79,10 @@ namespace BlackCore
//! \threadsafe
BlackMisc::Simulation::CAircraftModel getModelForModelString(const QString &modelString) const;
//! Get model for DB key
//! \threadsafe
BlackMisc::Simulation::CAircraftModel getModelForDbKey(int dbKey) const;
//! Get model for designator/combined code
//! \threadsafe
BlackMisc::Simulation::CAircraftModelList getModelsForAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator, const QString &combinedCode);
@@ -149,7 +153,8 @@ namespace BlackCore
//! Read / re-read data file
void ps_read(BlackMisc::Network::CEntityFlags::Entity entities = BlackMisc::Network::CEntityFlags::DistributorLiveryModel,
BlackMisc::Db::CDbFlags::DataRetrievalModeFlag mode = BlackMisc::Db::CDbFlags::DbReading, const QDateTime &newerThan = QDateTime());
BlackMisc::Db::CDbFlags::DataRetrievalModeFlag mode = BlackMisc::Db::CDbFlags::DbReading,
const QDateTime &newerThan = QDateTime());
void ps_liveryCacheChanged();
void ps_modelCacheChanged();

View File

@@ -148,9 +148,9 @@ namespace BlackCore
if (m_vatsimDataFileReader) { m_vatsimDataFileReader->updateWithVatsimDataFileData(aircraftToBeUdpated); }
}
CStatusMessageList CWebDataServices::asyncPublishModels(const CAircraftModelList &models) const
CStatusMessageList CWebDataServices::asyncPublishModels(const CAircraftModelList &modelsToBePublished) const
{
if (m_databaseWriter) { return m_databaseWriter->asyncPublishModels(models);}
if (m_databaseWriter) { return m_databaseWriter->asyncPublishModels(modelsToBePublished);}
return CStatusMessageList();
}
@@ -541,6 +541,12 @@ namespace BlackCore
return CAircraftModel();
}
CAircraftModel CWebDataServices::getModelForDbKey(int dbKey) const
{
if (m_modelDataReader) { return m_modelDataReader->getModelForDbKey(dbKey); }
return CAircraftModel();
}
CAircraftIcaoCodeList CWebDataServices::getAircraftIcaoCodes() const
{
if (m_icaoDataReader) { return m_icaoDataReader->getAircraftIcaoCodes(); }
@@ -702,9 +708,9 @@ namespace BlackCore
return 0;
}
CStatusMessageList CWebDataServices::validateForPublishing(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels) const
CStatusMessageList CWebDataServices::validateForPublishing(const CAircraftModelList &modelsToBePublished, bool ignoreEqual, CAircraftModelList &validModels, CAircraftModelList &invalidModels) const
{
CStatusMessageList msgs(models.validateForPublishing(validModels, invalidModels));
CStatusMessageList msgs(modelsToBePublished.validateForPublishing(validModels, invalidModels)); // technical validation
// check against existing distributors
const CDistributorList distributors(this->getDistributors());
@@ -712,13 +718,49 @@ namespace BlackCore
{
// only further check the valid ones
CAircraftModelList newValidModels;
CStatusMessageList msgsDistributos(validModels.validateDistributors(distributors, newValidModels, invalidModels));
const CStatusMessageList msgsDistributors(validModels.validateDistributors(distributors, newValidModels, invalidModels));
validModels = newValidModels;
msgs.push_back(msgsDistributors);
}
// check if model is changed
// in case of not ignoreEqual we just check create the messages
{
CAircraftModelList newValidModels;
for (const CAircraftModel &publishModel : validModels)
{
CStatusMessageList equalMessages;
const bool changed = !this->isDbModelEqualForPublishing(publishModel, &equalMessages);
if (changed)
{
// all good
newValidModels.push_back(publishModel);
continue;
}
if (ignoreEqual) { equalMessages.warningToError(); }
msgs.push_back(CStatusMessage(this, ignoreEqual ? CStatusMessage::SeverityError : CStatusMessage::SeverityWarning, "Model: '%1', there is no change") << publishModel.getModelString());
if (ignoreEqual)
{
invalidModels.push_back(publishModel);
}
else
{
newValidModels.push_back(publishModel);
}
}
validModels = newValidModels;
msgs.push_back(msgsDistributos);
}
return msgs;
}
bool CWebDataServices::isDbModelEqualForPublishing(const CAircraftModel &modelToBeChecked, CStatusMessageList *details) const
{
const CAircraftModel compareDbModel = modelToBeChecked.isLoadedFromDb() ?
this->getModelForDbKey(modelToBeChecked.getDbKey()) :
this->getModelForModelString(modelToBeChecked.getModelString());
return modelToBeChecked.isEqualForPublishing(compareDbModel, details);
}
CAirlineIcaoCodeList CWebDataServices::getAirlineIcaoCodesForDesignator(const QString &designator) const
{
if (m_icaoDataReader) { return m_icaoDataReader->getAirlineIcaoCodesForDesignator(designator); }

View File

@@ -229,9 +229,13 @@ namespace BlackCore
//! \threadsafe
BlackMisc::Simulation::CAircraftModelList getModelsForAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator, const QString &combinedCode) const;
//! Model for model string if any
//! \threadsafe
BlackMisc::Simulation::CAircraftModel getModelForModelString(const QString &modelString) const;
//! Model for key if any
//! \threadsafe
BlackMisc::Simulation::CAircraftModel getModelForModelString(const QString &modelKey) const;
BlackMisc::Simulation::CAircraftModel getModelForDbKey(int dbKey) const;
//! Aircraft ICAO codes
//! \threadsafe
@@ -335,10 +339,17 @@ namespace BlackCore
//! Validate for publishing
//! \remark More detailed check than BlackMisc::Simulation::CAircraftModelList::validateForPublishing
BlackMisc::CStatusMessageList validateForPublishing(const BlackMisc::Simulation::CAircraftModelList &models, BlackMisc::Simulation::CAircraftModelList &validModels, BlackMisc::Simulation::CAircraftModelList &invalidModels) const;
BlackMisc::CStatusMessageList validateForPublishing(
const BlackMisc::Simulation::CAircraftModelList &modelsToBePublished,
bool ignoreEqual,
BlackMisc::Simulation::CAircraftModelList &validModels,
BlackMisc::Simulation::CAircraftModelList &invalidModels) const;
//! \copydoc BlackMisc::Simulation::CAircraftModel::isEqualForPublishing
bool isDbModelEqualForPublishing(const BlackMisc::Simulation::CAircraftModel &modelToBeChecked, BlackMisc::CStatusMessageList *details = nullptr) const;
//! Publish models to database
BlackMisc::CStatusMessageList asyncPublishModels(const BlackMisc::Simulation::CAircraftModelList &models) const;
BlackMisc::CStatusMessageList asyncPublishModels(const BlackMisc::Simulation::CAircraftModelList &modelsToBePublished) const;
//! Trigger read of DB info objects
void triggerReadOfDbInfoObjects();