From cb468f0c4804030032970f163134679ea98ce9c3 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 7 Nov 2016 15:57:21 +0100 Subject: [PATCH] #908 Replace file summary case with Eclipse summary case when grid is imported --- .../Application/RiaApplication.cpp | 71 ++++++++++++++++--- .../Summary/RimGridSummaryCase.h | 2 +- .../Summary/RimSummaryCaseCollection.cpp | 66 +++++++++++++++-- .../Summary/RimSummaryCaseCollection.h | 8 +++ 4 files changed, 130 insertions(+), 17 deletions(-) diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index 77bc686b9c..0396cf71c3 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -60,6 +60,8 @@ #include "RimScriptCollection.h" #include "RimSummaryCase.h" #include "RimSummaryCaseCollection.h" +#include "RimSummaryCurve.h" +#include "RimSummaryCurveFilter.h" #include "RimSummaryPlot.h" #include "RimSummaryPlotCollection.h" #include "RimViewLinker.h" @@ -848,20 +850,69 @@ bool RiaApplication::openEclipseCase(const QString& caseName, const QString& cas m_mainPlotWindow->hide(); } - RimSummaryCase* newSumCase = sumCaseColl->createAndAddSummaryCaseFromEclipseResultCase(rimResultReservoir); - if (newSumCase) + if (!sumCaseColl->findSummaryCaseFromEclipseResultCase(rimResultReservoir)) { - newSumCase->loadCase(); + RimSummaryCase* newSumCase = sumCaseColl->createAndAddSummaryCaseFromEclipseResultCase(rimResultReservoir); - if (m_preferences->autoCreatePlotsOnImport()) + if (newSumCase) { - RimMainPlotCollection* mainPlotColl = m_project->mainPlotCollection(); - RimSummaryPlotCollection* summaryPlotColl = mainPlotColl->summaryPlotCollection(); - - RicNewSummaryPlotFeature::createNewSummaryPlot(summaryPlotColl, newSumCase); - } + newSumCase->loadCase(); - sumCaseColl->updateConnectedEditors(); + RimSummaryCase* existingFileSummaryCase = sumCaseColl->findSummaryCaseFromFileName(newSumCase->summaryHeaderFilename()); + if (existingFileSummaryCase) + { + // Replace all occurrences of file sum with ecl sum + + std::vector referringObjects; + existingFileSummaryCase->objectsWithReferringPtrFields(referringObjects); + + std::set curveFilters; + + for (caf::PdmObjectHandle* objHandle : referringObjects) + { + RimSummaryCurve* summaryCurve = dynamic_cast(objHandle); + if (summaryCurve) + { + summaryCurve->setSummaryCase(newSumCase); + summaryCurve->updateConnectedEditors(); + + RimSummaryCurveFilter* parentFilter = nullptr; + summaryCurve->firstAncestorOrThisOfType(parentFilter); + if (parentFilter) + { + curveFilters.insert(parentFilter); + } + } + } + + // UI settings of a curve filter is updated based + // on the new case association for the curves in the curve filter + // UI is updated by loadDataAndUpdate() + + for (RimSummaryCurveFilter* curveFilter : curveFilters) + { + curveFilter->loadDataAndUpdate(); + curveFilter->updateConnectedEditors(); + } + + sumCaseColl->deleteCase(existingFileSummaryCase); + + delete existingFileSummaryCase; + + } + else + { + if (m_preferences->autoCreatePlotsOnImport()) + { + RimMainPlotCollection* mainPlotColl = m_project->mainPlotCollection(); + RimSummaryPlotCollection* summaryPlotColl = mainPlotColl->summaryPlotCollection(); + + RicNewSummaryPlotFeature::createNewSummaryPlot(summaryPlotColl, newSumCase); + } + } + + sumCaseColl->updateConnectedEditors(); + } } } } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h b/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h index 113f1a607c..9f978dc4eb 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimGridSummaryCase.h @@ -37,7 +37,7 @@ public: void setAssociatedEclipseCase(RimEclipseCase* eclipseCase); RimEclipseCase* associatedEclipseCase(); - virtual QString summaryHeaderFilename() const override; + virtual QString summaryHeaderFilename() const override; virtual QString caseName() const override; private: diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp index eab3eb0f82..e545de047a 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp @@ -16,14 +16,16 @@ // ///////////////////////////////////////////////////////////////////////////////// #include "RimSummaryCaseCollection.h" -#include "RimSummaryCase.h" + +#include "RifEclipseSummaryTools.h" +#include "RimEclipseResultCase.h" +#include "RimFileSummaryCase.h" +#include "RimGridSummaryCase.h" #include "RimOilField.h" #include "RimProject.h" -#include "RimEclipseResultCase.h" -#include "RimGridSummaryCase.h" -#include "RifEclipseSummaryTools.h" +#include "RimSummaryCase.h" + #include -#include "RimFileSummaryCase.h" CAF_PDM_SOURCE_INIT(RimSummaryCaseCollection,"SummaryCaseCollection"); @@ -88,10 +90,62 @@ void RimSummaryCaseCollection::createSummaryCasesFromRelevantEclipseResultCases( } } } - } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCase* RimSummaryCaseCollection::findSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclipseResultCase) const +{ + for (RimSummaryCase* summaryCase : m_cases) + { + RimGridSummaryCase* gridSummaryCase = dynamic_cast(summaryCase); + if (gridSummaryCase) + { + if (gridSummaryCase->associatedEclipseCase()->gridFileName() == eclipseResultCase->gridFileName()) + { + return gridSummaryCase; + } + } + } + + return nullptr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCase* RimSummaryCaseCollection::findSummaryCaseFromFileName(const QString& fileName) const +{ + // Use QFileInfo object to compare two file names to avoid mix of / and \\ + + QFileInfo incomingFileInfo(fileName); + + for (RimSummaryCase* summaryCase : m_cases) + { + RimFileSummaryCase* fileSummaryCase = dynamic_cast(summaryCase); + if (fileSummaryCase) + { + QFileInfo summaryFileInfo(fileSummaryCase->summaryHeaderFilename()); + if (incomingFileInfo == summaryFileInfo) + { + return fileSummaryCase; + } + } + } + + return nullptr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCaseCollection::deleteCase(RimSummaryCase* summaryCase) +{ + m_cases.removeChildObject(summaryCase); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h index 676a59713b..5eaaa731a1 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h @@ -36,11 +36,19 @@ public: void createSummaryCasesFromRelevantEclipseResultCases(); RimSummaryCase* createAndAddSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclResCase); RimSummaryCase* createAndAddSummaryCaseFromFileName(const QString& fileName); + + RimSummaryCase* findSummaryCaseFromEclipseResultCase(RimEclipseResultCase* eclResCase) const; + RimSummaryCase* findSummaryCaseFromFileName(const QString& fileName) const; + + void deleteCase(RimSummaryCase* summaryCase); + void loadAllSummaryCaseData(); QString uniqueShortNameForCase(RimSummaryCase* summaryCase); +private: + private: caf::PdmChildArrayField m_cases; };