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:
Magne Sjaastad
2013-05-08 10:41:56 +02:00
parent 269f66b0bd
commit eecd069b0a
8 changed files with 112 additions and 27 deletions

View File

@@ -563,6 +563,8 @@ bool RiaApplication::openEclipseCase(const QString& caseName, const QString& cas
bool RiaApplication::openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames) bool RiaApplication::openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames)
{ {
RimInputCase* rimInputReservoir = new RimInputCase(); RimInputCase* rimInputReservoir = new RimInputCase();
m_project->assignCaseIdToCase(rimInputReservoir);
rimInputReservoir->caseUserDescription = caseName; rimInputReservoir->caseUserDescription = caseName;
rimInputReservoir->openDataFileSet(caseFileNames); rimInputReservoir->openDataFileSet(caseFileNames);

View File

@@ -65,6 +65,10 @@ CAF_PDM_SOURCE_INIT(RimCase, "RimReservoir");
RimCase::RimCase() RimCase::RimCase()
{ {
CAF_PDM_InitField(&caseUserDescription, "CaseUserDescription", QString(), "Case name", "", "" ,""); 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(&reservoirViews, "ReservoirViews", "", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_matrixModelResults, "MatrixModelResults", "", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_matrixModelResults, "MatrixModelResults", "", "", "", "");

View File

@@ -48,6 +48,7 @@ public:
// Fields: // Fields:
caf::PdmField<QString> caseUserDescription; caf::PdmField<QString> caseUserDescription;
caf::PdmField<int> caseId;
caf::PdmField<bool> releaseResultMemory; caf::PdmField<bool> releaseResultMemory;
caf::PdmPointersField<RimReservoirView*> reservoirViews; caf::PdmPointersField<RimReservoirView*> reservoirViews;
caf::PdmField<bool> flipXAxis; caf::PdmField<bool> flipXAxis;

View File

@@ -44,6 +44,7 @@
#include "RimWellCollection.h" #include "RimWellCollection.h"
#include "RimCaseCollection.h" #include "RimCaseCollection.h"
#include "RimResultSlot.h" #include "RimResultSlot.h"
#include "RimStatisticsCase.h"
CAF_PDM_SOURCE_INIT(RimProject, "ResInsightProject"); CAF_PDM_SOURCE_INIT(RimProject, "ResInsightProject");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -54,6 +55,9 @@ RimProject::RimProject(void)
CAF_PDM_InitFieldNoDefault(&m_projectFileVersionString, "ProjectFileVersionString", "", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_projectFileVersionString, "ProjectFileVersionString", "", "", "", "");
m_projectFileVersionString.setUiHidden(true); 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(&reservoirs, "Reservoirs", "", "", "", "");
CAF_PDM_InitFieldNoDefault(&caseGroups, "CaseGroups", "", "", "", ""); CAF_PDM_InitFieldNoDefault(&caseGroups, "CaseGroups", "", "", "", "");
@@ -96,6 +100,8 @@ void RimProject::close()
caseGroups.deleteAllChildObjects(); caseGroups.deleteAllChildObjects();
fileName = ""; fileName = "";
nextValidCaseId = 0;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -110,6 +116,35 @@ void RimProject::initAfterRead()
QString scriptDirectories = app->scriptDirectories(); QString scriptDirectories = app->scriptDirectories();
this->setScriptDirectories(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); CVF_ASSERT(equalGrid);
RimIdenticalGridCaseGroup* group = new RimIdenticalGridCaseGroup; RimIdenticalGridCaseGroup* group = new RimIdenticalGridCaseGroup;
group->createAndAppendStatisticsCase(); RimCase* createdCase = group->createAndAppendStatisticsCase();
assignCaseIdToCase(createdCase);
group->addCase(mainCase); group->addCase(mainCase);
caseGroups().push_back(group); caseGroups().push_back(group);
@@ -288,29 +325,57 @@ void RimProject::setProjectFileNameAndUpdateDependencies(const QString& fileName
// Replace with the new actual filename // Replace with the new actual filename
this->fileName = fileName; this->fileName = fileName;
// Loop over all reservoirs and update file path
QFileInfo fileInfo(fileName); QFileInfo fileInfo(fileName);
QString newProjectPath = fileInfo.path(); QString newProjectPath = fileInfo.path();
QFileInfo fileInfoOld(oldProjectFileName); QFileInfo fileInfoOld(oldProjectFileName);
QString oldProjectPath = fileInfoOld.path(); 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++) 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++) for (size_t i = 0; i < caseGroups.size(); i++)
{ {
RimIdenticalGridCaseGroup* cg = caseGroups()[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]);
} }
} }
} }

View File

@@ -38,36 +38,38 @@ class RimProject : public caf::PdmDocument
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public: public:
RimProject(void);
virtual ~RimProject(void);
caf::PdmPointersField<RimCase*> reservoirs; caf::PdmPointersField<RimCase*> reservoirs;
caf::PdmPointersField<RimIdenticalGridCaseGroup*> caseGroups; caf::PdmPointersField<RimIdenticalGridCaseGroup*> caseGroups;
caf::PdmField<RimScriptCollection*> scriptCollection; caf::PdmField<RimScriptCollection*> scriptCollection;
caf::PdmField<QString> treeViewState; caf::PdmField<QString> treeViewState;
caf::PdmField<QString> currentModelIndexPath; 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); void setProjectFileNameAndUpdateDependencies(const QString& fileName);
virtual ~RimProject(void);
void close(); void assignCaseIdToCase(RimCase* reservoirCase);
RimIdenticalGridCaseGroup* createIdenticalCaseGroupFromMainCase(RimCase* mainCase);
void insertCaseInCaseGroup(RimIdenticalGridCaseGroup* caseGroup, RimCase* rimReservoir);
void moveEclipseCaseIntoCaseGroup(RimCase* rimReservoir);
void removeCaseFromAllGroups(RimCase* rimReservoir);
void setProjectFileNameAndUpdateDependencies(const QString& fileName);
private: private:
RigMainGrid* registerCaseInGridCollection(RigCaseData* rigEclipseCase); RigMainGrid* registerCaseInGridCollection(RigCaseData* rigEclipseCase);
void allCases(std::vector<RimCase*>& cases);
protected: protected:
// Overridden methods // Overridden methods
virtual void initAfterRead(); virtual void initAfterRead();
virtual void setupBeforeSave(); virtual void setupBeforeSave();
private: private:
caf::PdmField<QString> m_projectFileVersionString; caf::PdmField<QString> m_projectFileVersionString;

View File

@@ -303,8 +303,11 @@ void RimResultCase::updateFilePathsFromProjectPath(const QString& newProjectPath
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimResultCase::setCaseInfo(const QString& userDescription, const QString& caseFileName) void RimResultCase::setCaseInfo(const QString& userDescription, const QString& caseFileName)
{ {
this->caseUserDescription = userDescription; this->caseUserDescription = userDescription;
this->caseFileName = caseFileName; this->caseFileName = caseFileName;
RimProject* proj = RiaApplication::instance()->project();
proj->assignCaseIdToCase(this);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -331,6 +331,8 @@ void RimStatisticsCase::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderin
updatePercentileUiVisibility(); updatePercentileUiVisibility();
uiOrdering.add(&caseUserDescription); uiOrdering.add(&caseUserDescription);
uiOrdering.add(&caseId);
uiOrdering.add(&m_calculateEditCommand); uiOrdering.add(&m_calculateEditCommand);
uiOrdering.add(&m_selectionSummary); uiOrdering.add(&m_selectionSummary);

View File

@@ -558,7 +558,10 @@ RimStatisticsCase* RimUiTreeModelPdm::addStatisticalCalculation(const QModelInde
{ {
beginInsertRows(collectionIndex, position, position); beginInsertRows(collectionIndex, position, position);
RimProject* proj = RiaApplication::instance()->project();
RimStatisticsCase* createdObject = caseGroup->createAndAppendStatisticsCase(); RimStatisticsCase* createdObject = caseGroup->createAndAppendStatisticsCase();
proj->assignCaseIdToCase(createdObject);
caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(parentCollectionItem, position, createdObject); caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(parentCollectionItem, position, createdObject);
endInsertRows(); endInsertRows();
@@ -596,7 +599,8 @@ RimIdenticalGridCaseGroup* RimUiTreeModelPdm::addCaseGroup(QModelIndex& inserted
beginInsertRows(rootIndex, position, position); beginInsertRows(rootIndex, position, position);
RimIdenticalGridCaseGroup* createdObject = new RimIdenticalGridCaseGroup; RimIdenticalGridCaseGroup* createdObject = new RimIdenticalGridCaseGroup;
createdObject->createAndAppendStatisticsCase(); RimCase* createdReservoir = createdObject->createAndAppendStatisticsCase();
proj->assignCaseIdToCase(createdReservoir);
createdObject->name = QString("Grid Case Group %1").arg(position + 1); createdObject->name = QString("Grid Case Group %1").arg(position + 1);
proj->caseGroups().push_back(createdObject); proj->caseGroups().push_back(createdObject);
@@ -644,6 +648,8 @@ void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectG
{ {
RimResultCase* rimResultReservoir = typedObjects[i]; RimResultCase* rimResultReservoir = typedObjects[i];
proj->assignCaseIdToCase(rimResultReservoir);
if (gridCaseGroup->contains(rimResultReservoir)) if (gridCaseGroup->contains(rimResultReservoir))
{ {
continue; continue;