From 148d058d889b3ff847834ee949f95b5be86fab50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Tue, 20 Mar 2018 14:32:24 +0100 Subject: [PATCH] #2555 Open summary restart dialog if necessary when opening egrid files --- .../Tools/RiaImportEclipseCaseTools.cpp | 3 +- .../RifSummaryCaseRestartSelector.cpp | 19 +++++-- .../Summary/RimGridSummaryCase.cpp | 12 ++++- .../Summary/RimGridSummaryCase.h | 3 ++ .../Summary/RimSummaryCaseMainCollection.cpp | 53 +++++++++++++------ .../Summary/RimSummaryCaseMainCollection.h | 2 +- 6 files changed, 70 insertions(+), 22 deletions(-) diff --git a/ApplicationCode/Application/Tools/RiaImportEclipseCaseTools.cpp b/ApplicationCode/Application/Tools/RiaImportEclipseCaseTools.cpp index 0ed45c19c1..30718b4a64 100644 --- a/ApplicationCode/Application/Tools/RiaImportEclipseCaseTools.cpp +++ b/ApplicationCode/Application/Tools/RiaImportEclipseCaseTools.cpp @@ -127,7 +127,8 @@ bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(const QStr if (!sumCaseColl->findSummaryCaseFromEclipseResultCase(rimResultReservoir)) { - RimSummaryCase* newSumCase = sumCaseColl->createAndAddSummaryCaseFromEclipseResultCase(rimResultReservoir); + std::vector newSumCases = sumCaseColl->createAndAddSummaryCasesFromEclipseResultCase(rimResultReservoir); + RimSummaryCase* newSumCase = !newSumCases.empty() ? newSumCases.front() : nullptr; if (newSumCase) { diff --git a/ApplicationCode/FileInterface/RifSummaryCaseRestartSelector.cpp b/ApplicationCode/FileInterface/RifSummaryCaseRestartSelector.cpp index f538eee8a0..793a73753f 100644 --- a/ApplicationCode/FileInterface/RifSummaryCaseRestartSelector.cpp +++ b/ApplicationCode/FileInterface/RifSummaryCaseRestartSelector.cpp @@ -32,6 +32,19 @@ #include +//-------------------------------------------------------------------------------------------------- +/// Internal function +//-------------------------------------------------------------------------------------------------- +template +bool vectorContains(const std::vector& vector, T item) +{ + for (const auto& i : vector) + { + if (i == item) return true; + } + return false; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -76,7 +89,7 @@ std::vector RifSummaryCaseRestartSelector::getFilesToImp std::vector RifSummaryCaseRestartSelector::getFilesToImportByAskingUser(const QStringList& initialFiles, bool enableApplyToAllField) { - std::set filesToImport; + std::vector filesToImport; RicSummaryCaseRestartDialogResult lastResult; for (const QString& file : initialFiles) @@ -87,9 +100,9 @@ std::vector RifSummaryCaseRestartSelector::getFilesToImp for (const QString& file : result.files) { RifSummaryCaseFileInfo fi(file, result.option == RicSummaryCaseRestartDialog::READ_ALL); - if (filesToImport.count(fi) == 0) + if (!vectorContains(filesToImport, fi)) { - filesToImport.insert(fi); + filesToImport.push_back(fi); } } } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.cpp b/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.cpp index d108806032..e62b51e6b8 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.cpp @@ -51,6 +51,8 @@ RimGridSummaryCase::RimGridSummaryCase() m_eclipseGridFileName.uiCapability()->setUiReadOnly(true); m_eclipseGridFileName.xmlCapability()->setIOWritable(false); + CAF_PDM_InitField(&m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", ""); + m_includeRestartFiles.uiCapability()->setUiHidden(true); } //-------------------------------------------------------------------------------------------------- @@ -175,7 +177,7 @@ void RimGridSummaryCase::updateFilePathsFromProjectPath(const QString & newProje //-------------------------------------------------------------------------------------------------- void RimGridSummaryCase::createSummaryReaderInterface() { - m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader(this->summaryHeaderFilename(), true /* read restart files */); + m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader(this->summaryHeaderFilename(), m_includeRestartFiles); } //-------------------------------------------------------------------------------------------------- @@ -186,3 +188,11 @@ RifSummaryReaderInterface* RimGridSummaryCase::summaryReader() return m_summaryFileReader.p(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimGridSummaryCase::setIncludeRestartFiles(bool includeRestartFiles) +{ + m_includeRestartFiles = includeRestartFiles; +} + diff --git a/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h b/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h index cb9f594571..7adfcf4eb4 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h @@ -50,6 +50,8 @@ public: virtual void createSummaryReaderInterface() override; virtual RifSummaryReaderInterface* summaryReader() override; + void setIncludeRestartFiles(bool includeRestartFiles); + private: QString eclipseGridFileName() const; @@ -59,4 +61,5 @@ private: caf::PdmProxyValueField m_eclipseGridFileName; cvf::ref m_summaryFileReader; + caf::PdmField m_includeRestartFiles; }; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp index 0b7f68212d..8ee010d917 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp @@ -91,7 +91,7 @@ void RimSummaryCaseMainCollection::createSummaryCasesFromRelevantEclipseResultCa if (!isFound) { // Create new GridSummaryCase - createAndAddSummaryCaseFromEclipseResultCase(eclResCase); + createAndAddSummaryCasesFromEclipseResultCase(eclResCase); } } } @@ -265,29 +265,50 @@ void RimSummaryCaseMainCollection::loadAllSummaryCaseData() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimSummaryCase* RimSummaryCaseMainCollection::createAndAddSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclResCase) +std::vector RimSummaryCaseMainCollection::createAndAddSummaryCasesFromEclipseResultCase(RimEclipseResultCase* eclResCase) { - QString gridFileName = eclResCase->gridFileName(); - QString summaryHeaderFile; - bool formatted; + std::vector sumCases; + QString gridFileName = eclResCase->gridFileName(); + QString summaryHeaderFile; + bool formatted; RifEclipseSummaryTools::findSummaryHeaderFile(QDir::toNativeSeparators(gridFileName), &summaryHeaderFile, &formatted); if(!summaryHeaderFile.isEmpty()) { - // Activate when after discussing how grid case and summary case(s) are going to be related - // - //RifSummaryCaseRestartSelector fileSelector; - //std::vector importFileInfos = fileSelector.getFilesToImport(QStringList({ summaryHeaderFile })); + RifSummaryCaseRestartSelector fileSelector; + std::vector importFileInfos = fileSelector.getFilesToImport(QStringList({ summaryHeaderFile })); - RimGridSummaryCase* newSumCase = new RimGridSummaryCase(); - this->m_cases.push_back(newSumCase); - newSumCase->setAssociatedEclipseCase(eclResCase); - newSumCase->createSummaryReaderInterface(); - newSumCase->updateOptionSensitivity(); - return newSumCase; + if (!importFileInfos.empty()) + { + RimGridSummaryCase* newSumCase = new RimGridSummaryCase(); + + this->m_cases.push_back(newSumCase); + newSumCase->setIncludeRestartFiles(importFileInfos.front().includeRestartFiles); + newSumCase->setAssociatedEclipseCase(eclResCase); + newSumCase->createSummaryReaderInterface(); + newSumCase->updateOptionSensitivity(); + sumCases.push_back(newSumCase); + + // Remove the processed element and add 'orphan' summary cases + importFileInfos.erase(importFileInfos.begin()); + + for (const RifSummaryCaseFileInfo& fileInfo : importFileInfos) + { + RimFileSummaryCase* newSumCase = new RimFileSummaryCase(); + + this->m_cases.push_back(newSumCase); + newSumCase->setIncludeRestartFiles(fileInfo.includeRestartFiles); + newSumCase->setSummaryHeaderFileName(fileInfo.fileName); + newSumCase->createSummaryReaderInterface(); + newSumCase->updateOptionSensitivity(); + + sumCases.push_back(newSumCase); + } + } + } - return nullptr; + return sumCases; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h index 22a4404f16..3c36a44132 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h @@ -44,7 +44,7 @@ public: std::vector summaryCaseCollections() const; void createSummaryCasesFromRelevantEclipseResultCases(); - RimSummaryCase* createAndAddSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclResCase); + std::vector createAndAddSummaryCasesFromEclipseResultCase(RimEclipseResultCase* eclResCase); std::vector createAndAddSummaryCasesFromFiles(const QStringList& inputFileNames); RimSummaryCase* findSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclResCase) const;