#908 Replace file summary case with Eclipse summary case when grid is imported

This commit is contained in:
Magne Sjaastad 2016-11-07 15:57:21 +01:00
parent 612c64a607
commit cb468f0c48
4 changed files with 130 additions and 17 deletions

View File

@ -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<caf::PdmObjectHandle*> referringObjects;
existingFileSummaryCase->objectsWithReferringPtrFields(referringObjects);
std::set<RimSummaryCurveFilter*> curveFilters;
for (caf::PdmObjectHandle* objHandle : referringObjects)
{
RimSummaryCurve* summaryCurve = dynamic_cast<RimSummaryCurve*>(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();
}
}
}
}

View File

@ -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:

View File

@ -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 <QDir>
#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<RimGridSummaryCase*>(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<RimFileSummaryCase*>(summaryCase);
if (fileSummaryCase)
{
QFileInfo summaryFileInfo(fileSummaryCase->summaryHeaderFilename());
if (incomingFileInfo == summaryFileInfo)
{
return fileSummaryCase;
}
}
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCaseCollection::deleteCase(RimSummaryCase* summaryCase)
{
m_cases.removeChildObject(summaryCase);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -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<RimSummaryCase*> m_cases;
};