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

@@ -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); }