From da343d81c12092680acc355944bd25706f50520c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 12 Aug 2016 22:07:08 +0200 Subject: [PATCH] refs #720, allow to publish when there are errors, but some models pass validation * return valid and invalid models * return value "success" when there are any valid models --- src/blackgui/components/dbmappingcomponent.h | 10 ++-- src/blackgui/components/dbstashcomponent.cpp | 46 ++++++++++--------- src/blackgui/components/dbstashcomponent.h | 6 +-- .../simulation/aircraftmodellist.cpp | 17 ++++--- src/blackmisc/simulation/aircraftmodellist.h | 2 +- 5 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/blackgui/components/dbmappingcomponent.h b/src/blackgui/components/dbmappingcomponent.h index 69f4043aa..581c88e31 100644 --- a/src/blackgui/components/dbmappingcomponent.h +++ b/src/blackgui/components/dbmappingcomponent.h @@ -280,12 +280,12 @@ namespace BlackGui void ps_onCustomContextMenu(const QPoint &point); private: - QScopedPointer ui; - QScopedPointer m_autoStashDialog; //!< dialog auto stashing - QScopedPointer m_modelModifyDialog; //!< dialog when modifying models - BlackMisc::Simulation::FsCommon::CVPilotRulesReader m_vPilotReader; //!< read vPilot rules + QScopedPointer ui; + QScopedPointer m_autoStashDialog; //!< dialog auto stashing + QScopedPointer m_modelModifyDialog; //!< dialog when modifying models + BlackMisc::Simulation::FsCommon::CVPilotRulesReader m_vPilotReader; //!< read vPilot rules BlackMisc::CData m_swiftDbUser {this, &CDbMappingComponent::ps_userChanged}; - BlackMisc::CDigestSignal m_dsStashedModelsChanged { this, &CDbMappingComponent::ps_digestStashedModelsChanged, &CDbMappingComponent::ps_onStashedModelsChangedDigest, 750, 25 }; + BlackMisc::CDigestSignal m_dsStashedModelsChanged { this, &CDbMappingComponent::ps_digestStashedModelsChanged, &CDbMappingComponent::ps_onStashedModelsChangedDigest, 750, 25 }; const bool vPilotSupport = true; //!< vPilot support bool m_vPilot1stInit = true; //!< vPilot extensions initaliazed? bool m_vPilotEnabled = false; //!< use vPilot extensions diff --git a/src/blackgui/components/dbstashcomponent.cpp b/src/blackgui/components/dbstashcomponent.cpp index 791d0a21d..d2002a8af 100644 --- a/src/blackgui/components/dbstashcomponent.cpp +++ b/src/blackgui/components/dbstashcomponent.cpp @@ -231,7 +231,9 @@ namespace BlackGui void CDbStashComponent::ps_onValidatePressed() { if (this->ui->tvp_StashAircraftModels->isEmpty()) {return; } - this->validateAndDisplay(true); + CAircraftModelList validModels; + CAircraftModelList invalidModels; + this->validateAndDisplay(validModels, invalidModels, true); } void CDbStashComponent::ps_onPublishPressed() @@ -239,21 +241,21 @@ namespace BlackGui if (this->ui->tvp_StashAircraftModels->isEmpty()) {return; } // get models right here, because later steps might affect selection - CAircraftModelList models(getSelectedOrAllModels()); + const CAircraftModelList models(getSelectedOrAllModels()); if (models.isEmpty()) { return; } // validate - if (!this->validateAndDisplay()) { return; } + CAircraftModelList validModels; + CAircraftModelList invalidModels; + if (!this->validateAndDisplay(validModels, invalidModels)) { return; } CStatusMessageList msgs; - if (models.size() > MaxModelPublished) + if (validModels.size() > MaxModelPublished) { - CAircraftModelList::iterator i = models.begin(); - std::advance(i, MaxModelPublished); - models.erase(i, models.end()); + validModels.truncate(MaxModelPublished); msgs.push_back(CStatusMessage(validationCategories(), CStatusMessage::SeverityWarning, QString("More than %1 values, values skipped").arg(MaxModelPublished))); } - msgs.push_back(sApp->getWebDataServices()->asyncPublishModels(models)); + msgs.push_back(sApp->getWebDataServices()->asyncPublishModels(validModels)); if (msgs.hasWarningOrErrorMessages()) { this->showMessages(msgs); @@ -293,13 +295,13 @@ namespace BlackGui Q_UNUSED(skippedModels); } - CStatusMessageList CDbStashComponent::validate(CAircraftModelList &invalidModels) const + CStatusMessageList CDbStashComponent::validate(CAircraftModelList &validModels, CAircraftModelList &invalidModels) const { if (this->ui->tvp_StashAircraftModels->isEmpty()) {return CStatusMessageList(); } - CAircraftModelList models(getSelectedOrAllModels()); + const CAircraftModelList models(getSelectedOrAllModels()); if (models.isEmpty()) { return CStatusMessageList(); } - const CStatusMessageList msgs(models.validateForPublishing(invalidModels)); + const CStatusMessageList msgs(models.validateForPublishing(validModels, invalidModels)); // OK? if (msgs.isEmpty()) @@ -315,27 +317,27 @@ namespace BlackGui } } - bool CDbStashComponent::validateAndDisplay(bool displayInfo) + bool CDbStashComponent::validateAndDisplay(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool displayInfo) { - CAircraftModelList invalidModels; - const CStatusMessageList msgs(this->validate(invalidModels)); + const CStatusMessageList msgs(this->validate(validModels, invalidModels)); if (msgs.hasWarningOrErrorMessages()) { this->showMessages(msgs); this->ui->tvp_StashAircraftModels->setHighlightModelStrings(invalidModels.getModelStringList(false)); - return false; } else { + // delete highlighting this->ui->tvp_StashAircraftModels->setHighlightModelStrings(QStringList()); - if (displayInfo) - { - QString no = QString::number(this->getStashedModelsCount()); - CStatusMessage msg(validationCategories(), CStatusMessage::SeverityInfo, "Validation passed for " + no + " models"); - this->showMessage(msg); - } - return true; // no error } + + if (displayInfo) + { + QString no = QString::number(this->getStashedModelsCount()); + CStatusMessage msg(validationCategories(), CStatusMessage::SeverityInfo, "Validation passed for " + no + " models"); + this->showMessage(msg); + } + return !validModels.isEmpty(); // at least some valid objects } void CDbStashComponent::enableButtonRow() diff --git a/src/blackgui/components/dbstashcomponent.h b/src/blackgui/components/dbstashcomponent.h index dac33c050..8b96aed97 100644 --- a/src/blackgui/components/dbstashcomponent.h +++ b/src/blackgui/components/dbstashcomponent.h @@ -43,11 +43,9 @@ namespace BlackMisc } } namespace Ui { class CDbStashComponent; } - namespace BlackGui { namespace Views { class CAircraftModelView; } - namespace Components { /*! @@ -169,10 +167,10 @@ namespace BlackGui bool showMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1); //! Validate - BlackMisc::CStatusMessageList validate(BlackMisc::Simulation::CAircraftModelList &invalidModels) const; + BlackMisc::CStatusMessageList validate(BlackMisc::Simulation::CAircraftModelList &validModels, BlackMisc::Simulation::CAircraftModelList &invalidModels) const; //! Validate and display info messages - bool validateAndDisplay(bool displayInfo = false); + bool validateAndDisplay(BlackMisc::Simulation::CAircraftModelList &validModels, BlackMisc::Simulation::CAircraftModelList &invalidModels, bool displayInfo = false); //! Set the button row void enableButtonRow(); diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index c3f2d44d8..143ae131b 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -525,17 +525,18 @@ namespace BlackMisc CStatusMessageList CAircraftModelList::validateForPublishing() const { CAircraftModelList invalidModels; - return validateForPublishing(invalidModels); + CAircraftModelList validModels; + return validateForPublishing(validModels, invalidModels); } - CStatusMessageList CAircraftModelList::validateForPublishing(CAircraftModelList &validateModels) const + CStatusMessageList CAircraftModelList::validateForPublishing(CAircraftModelList &validModels, CAircraftModelList &invalidModels) const { if (this->isEmpty()) { return CStatusMessageList(); } CStatusMessageList msgs; for (const CAircraftModel &model : *this) { const CStatusMessageList msgsModel(model.validate(false)); - CStatusMessage msgModel(msgsModel.toSingleMessage()); + const CStatusMessage msgModel(msgsModel.toSingleMessage()); QStringList subMsgs; if (!model.getDistributor().hasValidDbKey()) { subMsgs << "No distributor from DB"; } @@ -546,16 +547,20 @@ namespace BlackMisc // for color codes we do not need to check if (!model.getLivery().getAirlineIcaoCode().hasValidDbKey()) { subMsgs << "No airline ICAO from DB"; } } - CStatusMessage msgDb(CStatusMessage::SeverityError, subMsgs.join(", ")); + const CStatusMessage msgDb(CStatusMessage::SeverityError, subMsgs.join(", ")); CStatusMessage singleMsg(CStatusMessageList({msgModel, msgDb}).toSingleMessage()); - if (!singleMsg.isWarningOrAbove()) { continue; } + if (!singleMsg.isWarningOrAbove()) + { + validModels.push_back(model); + continue; + } if (model.hasModelString()) { singleMsg.prependMessage(model.getModelString() + ": "); } msgs.push_back(singleMsg); - validateModels.push_back(model); + invalidModels.push_back(model); } return msgs; } diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 5293b8cd6..c59103cd8 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -202,7 +202,7 @@ namespace BlackMisc CStatusMessageList validateForPublishing() const; //! Validate for publishing - CStatusMessageList validateForPublishing(CAircraftModelList &validateModels) const; + CStatusMessageList validateForPublishing(CAircraftModelList &validModels, CAircraftModelList &invalidModels) const; //! To database JSON QJsonArray toDatabaseJson() const;