mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Introduced caseId to RimCase. Project keeps track of largest used ID, and is responsible for assigning ID to cases.
p4#: 21576
This commit is contained in:
@@ -563,6 +563,8 @@ bool RiaApplication::openEclipseCase(const QString& caseName, const QString& cas
|
||||
bool RiaApplication::openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames)
|
||||
{
|
||||
RimInputCase* rimInputReservoir = new RimInputCase();
|
||||
m_project->assignCaseIdToCase(rimInputReservoir);
|
||||
|
||||
rimInputReservoir->caseUserDescription = caseName;
|
||||
rimInputReservoir->openDataFileSet(caseFileNames);
|
||||
|
||||
|
||||
@@ -65,6 +65,10 @@ CAF_PDM_SOURCE_INIT(RimCase, "RimReservoir");
|
||||
RimCase::RimCase()
|
||||
{
|
||||
CAF_PDM_InitField(&caseUserDescription, "CaseUserDescription", QString(), "Case name", "", "" ,"");
|
||||
|
||||
CAF_PDM_InitField(&caseId, "CaseId", -1, "Case ID", "", "" ,"");
|
||||
caseId.setUiReadOnly(true);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&reservoirViews, "ReservoirViews", "", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_matrixModelResults, "MatrixModelResults", "", "", "", "");
|
||||
|
||||
@@ -48,6 +48,7 @@ public:
|
||||
|
||||
// Fields:
|
||||
caf::PdmField<QString> caseUserDescription;
|
||||
caf::PdmField<int> caseId;
|
||||
caf::PdmField<bool> releaseResultMemory;
|
||||
caf::PdmPointersField<RimReservoirView*> reservoirViews;
|
||||
caf::PdmField<bool> flipXAxis;
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "RimWellCollection.h"
|
||||
#include "RimCaseCollection.h"
|
||||
#include "RimResultSlot.h"
|
||||
#include "RimStatisticsCase.h"
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RimProject, "ResInsightProject");
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -54,6 +55,9 @@ RimProject::RimProject(void)
|
||||
CAF_PDM_InitFieldNoDefault(&m_projectFileVersionString, "ProjectFileVersionString", "", "", "", "");
|
||||
m_projectFileVersionString.setUiHidden(true);
|
||||
|
||||
CAF_PDM_InitField(&nextValidCaseId, "NextValidCaseId", 0, "Next Valid Case ID", "", "" ,"");
|
||||
nextValidCaseId.setUiHidden(true);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&reservoirs, "Reservoirs", "", "", "", "");
|
||||
CAF_PDM_InitFieldNoDefault(&caseGroups, "CaseGroups", "", "", "", "");
|
||||
|
||||
@@ -96,6 +100,8 @@ void RimProject::close()
|
||||
caseGroups.deleteAllChildObjects();
|
||||
|
||||
fileName = "";
|
||||
|
||||
nextValidCaseId = 0;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -110,6 +116,35 @@ void RimProject::initAfterRead()
|
||||
QString scriptDirectories = app->scriptDirectories();
|
||||
|
||||
this->setScriptDirectories(scriptDirectories);
|
||||
|
||||
// Find largest used caseId read from file
|
||||
int largestCaseId = -1;
|
||||
|
||||
std::vector<RimCase*> cases;
|
||||
allCases(cases);
|
||||
|
||||
for (size_t i = 0; i < cases.size(); i++)
|
||||
{
|
||||
if (cases[i]->caseId > largestCaseId)
|
||||
{
|
||||
largestCaseId = cases[i]->caseId;
|
||||
}
|
||||
}
|
||||
|
||||
if (largestCaseId > nextValidCaseId)
|
||||
{
|
||||
nextValidCaseId = largestCaseId + 1;
|
||||
}
|
||||
|
||||
// Assign case Id to cases with an invalid case Id
|
||||
for (size_t i = 0; i < cases.size(); i++)
|
||||
{
|
||||
if (cases[i]->caseId < 0)
|
||||
{
|
||||
assignCaseIdToCase(cases[i]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -167,7 +202,9 @@ RimIdenticalGridCaseGroup* RimProject::createIdenticalCaseGroupFromMainCase(RimC
|
||||
CVF_ASSERT(equalGrid);
|
||||
|
||||
RimIdenticalGridCaseGroup* group = new RimIdenticalGridCaseGroup;
|
||||
group->createAndAppendStatisticsCase();
|
||||
RimCase* createdCase = group->createAndAppendStatisticsCase();
|
||||
assignCaseIdToCase(createdCase);
|
||||
|
||||
group->addCase(mainCase);
|
||||
caseGroups().push_back(group);
|
||||
|
||||
@@ -288,29 +325,57 @@ void RimProject::setProjectFileNameAndUpdateDependencies(const QString& fileName
|
||||
// Replace with the new actual filename
|
||||
this->fileName = fileName;
|
||||
|
||||
// Loop over all reservoirs and update file path
|
||||
|
||||
QFileInfo fileInfo(fileName);
|
||||
QString newProjectPath = fileInfo.path();
|
||||
|
||||
QFileInfo fileInfoOld(oldProjectFileName);
|
||||
QString oldProjectPath = fileInfoOld.path();
|
||||
|
||||
// Loop over all reservoirs and update file path
|
||||
|
||||
std::vector<RimCase*> cases;
|
||||
allCases(cases);
|
||||
for (size_t i = 0; i < cases.size(); i++)
|
||||
{
|
||||
cases[i]->updateFilePathsFromProjectPath(newProjectPath, oldProjectPath);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimProject::assignCaseIdToCase(RimCase* reservoirCase)
|
||||
{
|
||||
if (reservoirCase)
|
||||
{
|
||||
reservoirCase->caseId = nextValidCaseId;
|
||||
|
||||
nextValidCaseId = nextValidCaseId + 1;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimProject::allCases(std::vector<RimCase*>& cases)
|
||||
{
|
||||
for (size_t i = 0; i < reservoirs.size(); i++)
|
||||
{
|
||||
reservoirs[i]->updateFilePathsFromProjectPath(newProjectPath, oldProjectPath);
|
||||
cases.push_back(reservoirs[i]);
|
||||
}
|
||||
|
||||
// Case groups : Loop over all reservoirs in and update file path
|
||||
|
||||
for (size_t i = 0; i < caseGroups.size(); i++)
|
||||
{
|
||||
RimIdenticalGridCaseGroup* cg = caseGroups()[i];
|
||||
|
||||
for (size_t j = 0; j < cg->caseCollection()->reservoirs().size(); j++)
|
||||
for (size_t i = 0; i < cg->statisticsCaseCollection()->reservoirs.size(); i++)
|
||||
{
|
||||
cg->caseCollection()->reservoirs()[j]->updateFilePathsFromProjectPath(newProjectPath, oldProjectPath);
|
||||
cases.push_back(cg->statisticsCaseCollection()->reservoirs[i]);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < cg->caseCollection()->reservoirs.size(); i++)
|
||||
{
|
||||
cases.push_back(cg->caseCollection()->reservoirs[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,36 +38,38 @@ class RimProject : public caf::PdmDocument
|
||||
CAF_PDM_HEADER_INIT;
|
||||
|
||||
public:
|
||||
RimProject(void);
|
||||
virtual ~RimProject(void);
|
||||
|
||||
caf::PdmPointersField<RimCase*> reservoirs;
|
||||
caf::PdmPointersField<RimIdenticalGridCaseGroup*> caseGroups;
|
||||
caf::PdmField<RimScriptCollection*> scriptCollection;
|
||||
caf::PdmField<QString> treeViewState;
|
||||
caf::PdmField<QString> currentModelIndexPath;
|
||||
caf::PdmField<int> nextValidCaseId; // Unique case ID within a project, used to identify a case from Octave scripts
|
||||
|
||||
void setScriptDirectories(const QString& scriptDirectories);
|
||||
void setScriptDirectories(const QString& scriptDirectories);
|
||||
QString projectFileVersionString() const;
|
||||
void close();
|
||||
|
||||
QString projectFileVersionString() const;
|
||||
RimIdenticalGridCaseGroup*
|
||||
createIdenticalCaseGroupFromMainCase(RimCase* mainCase);
|
||||
void insertCaseInCaseGroup(RimIdenticalGridCaseGroup* caseGroup, RimCase* rimReservoir);
|
||||
void moveEclipseCaseIntoCaseGroup(RimCase* rimReservoir);
|
||||
void removeCaseFromAllGroups(RimCase* rimReservoir);
|
||||
|
||||
RimProject(void);
|
||||
virtual ~RimProject(void);
|
||||
void setProjectFileNameAndUpdateDependencies(const QString& fileName);
|
||||
|
||||
void close();
|
||||
|
||||
RimIdenticalGridCaseGroup* createIdenticalCaseGroupFromMainCase(RimCase* mainCase);
|
||||
void insertCaseInCaseGroup(RimIdenticalGridCaseGroup* caseGroup, RimCase* rimReservoir);
|
||||
|
||||
void moveEclipseCaseIntoCaseGroup(RimCase* rimReservoir);
|
||||
void removeCaseFromAllGroups(RimCase* rimReservoir);
|
||||
|
||||
void setProjectFileNameAndUpdateDependencies(const QString& fileName);
|
||||
void assignCaseIdToCase(RimCase* reservoirCase);
|
||||
|
||||
private:
|
||||
RigMainGrid* registerCaseInGridCollection(RigCaseData* rigEclipseCase);
|
||||
RigMainGrid* registerCaseInGridCollection(RigCaseData* rigEclipseCase);
|
||||
void allCases(std::vector<RimCase*>& cases);
|
||||
|
||||
protected:
|
||||
// Overridden methods
|
||||
virtual void initAfterRead();
|
||||
virtual void setupBeforeSave();
|
||||
virtual void initAfterRead();
|
||||
virtual void setupBeforeSave();
|
||||
|
||||
private:
|
||||
caf::PdmField<QString> m_projectFileVersionString;
|
||||
|
||||
@@ -303,8 +303,11 @@ void RimResultCase::updateFilePathsFromProjectPath(const QString& newProjectPath
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimResultCase::setCaseInfo(const QString& userDescription, const QString& caseFileName)
|
||||
{
|
||||
this->caseUserDescription = userDescription;
|
||||
this->caseFileName = caseFileName;
|
||||
this->caseUserDescription = userDescription;
|
||||
this->caseFileName = caseFileName;
|
||||
|
||||
RimProject* proj = RiaApplication::instance()->project();
|
||||
proj->assignCaseIdToCase(this);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -331,6 +331,8 @@ void RimStatisticsCase::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderin
|
||||
updatePercentileUiVisibility();
|
||||
|
||||
uiOrdering.add(&caseUserDescription);
|
||||
|
||||
uiOrdering.add(&caseId);
|
||||
uiOrdering.add(&m_calculateEditCommand);
|
||||
uiOrdering.add(&m_selectionSummary);
|
||||
|
||||
|
||||
@@ -558,7 +558,10 @@ RimStatisticsCase* RimUiTreeModelPdm::addStatisticalCalculation(const QModelInde
|
||||
{
|
||||
beginInsertRows(collectionIndex, position, position);
|
||||
|
||||
RimProject* proj = RiaApplication::instance()->project();
|
||||
RimStatisticsCase* createdObject = caseGroup->createAndAppendStatisticsCase();
|
||||
proj->assignCaseIdToCase(createdObject);
|
||||
|
||||
caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(parentCollectionItem, position, createdObject);
|
||||
|
||||
endInsertRows();
|
||||
@@ -596,7 +599,8 @@ RimIdenticalGridCaseGroup* RimUiTreeModelPdm::addCaseGroup(QModelIndex& inserted
|
||||
beginInsertRows(rootIndex, position, position);
|
||||
|
||||
RimIdenticalGridCaseGroup* createdObject = new RimIdenticalGridCaseGroup;
|
||||
createdObject->createAndAppendStatisticsCase();
|
||||
RimCase* createdReservoir = createdObject->createAndAppendStatisticsCase();
|
||||
proj->assignCaseIdToCase(createdReservoir);
|
||||
createdObject->name = QString("Grid Case Group %1").arg(position + 1);
|
||||
proj->caseGroups().push_back(createdObject);
|
||||
|
||||
@@ -644,6 +648,8 @@ void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectG
|
||||
{
|
||||
RimResultCase* rimResultReservoir = typedObjects[i];
|
||||
|
||||
proj->assignCaseIdToCase(rimResultReservoir);
|
||||
|
||||
if (gridCaseGroup->contains(rimResultReservoir))
|
||||
{
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user