diff --git a/ApplicationLibCode/Application/RiaApplication.cpp b/ApplicationLibCode/Application/RiaApplication.cpp index 6014c7688c..7303c19617 100644 --- a/ApplicationLibCode/Application/RiaApplication.cpp +++ b/ApplicationLibCode/Application/RiaApplication.cpp @@ -58,6 +58,7 @@ #include "RimGeoMechModels.h" #include "RimGeoMechView.h" #include "RimGridCalculationCollection.h" +#include "RimGridSummaryCase.h" #include "RimIdenticalGridCaseGroup.h" #include "RimMainPlotCollection.h" #include "RimObservedDataCollection.h" @@ -475,6 +476,9 @@ bool RiaApplication::loadProject( const QString& projectFileName, ProjectLoadAct return true; } + // Migrate all RimGridCases to RimFileSummaryCase + RimGridSummaryCase_obsolete::convertGridCasesToSummaryFileCases( m_project.get() ); + /////// // Load the external data, and initialize stuff that needs specific ordering diff --git a/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake index ee9d012b06..62ecf3b06b 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake @@ -2,6 +2,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RimAsciiDataCurve.h ${CMAKE_CURRENT_LIST_DIR}/RimFileSummaryCase.h ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCase.h + ${CMAKE_CURRENT_LIST_DIR}/RimGridSummaryCase.h ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCaseMainCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCaseCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCurve.h @@ -50,6 +51,7 @@ set(SOURCE_GROUP_HEADER_FILES set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RimAsciiDataCurve.cpp ${CMAKE_CURRENT_LIST_DIR}/RimFileSummaryCase.cpp + ${CMAKE_CURRENT_LIST_DIR}/RimGridSummaryCase.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCase.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCaseMainCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCaseCollection.cpp diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimGridSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimGridSummaryCase.cpp new file mode 100644 index 0000000000..1cb4226a3a --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimGridSummaryCase.cpp @@ -0,0 +1,251 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016- Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimGridSummaryCase.h" + +#include "RiaSummaryTools.h" + +#include "RicfCommandObject.h" + +#include "RifSummaryReaderInterface.h" + +#include "RimEclipseCase.h" +#include "RimFileSummaryCase.h" +#include "RimProject.h" +#include "RimSummaryCaseMainCollection.h" + +#include "cafPdmObjectScriptingCapability.h" +#include "cafPdmPtrField.h" + +#include + +//================================================================================================== +// +// +// +//================================================================================================== + +CAF_PDM_SOURCE_INIT( RimGridSummaryCase_obsolete, "GridSummaryCase" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimGridSummaryCase_obsolete::RimGridSummaryCase_obsolete() +{ + CAF_PDM_InitScriptableObject( "Grid Summary Case", ":/SummaryCases16x16.png", "", "A Summary Case based on extracting grid data." ); + CAF_PDM_InitFieldNoDefault( &m_eclipseCase, "Associated3DCase", "Eclipse Case" ); + m_eclipseCase.uiCapability()->setUiHidden( true ); + + CAF_PDM_InitFieldNoDefault( &m_cachedCaseName, "CachedCasename", "Case Name" ); + m_cachedCaseName.uiCapability()->setUiHidden( true ); + + CAF_PDM_InitFieldNoDefault( &m_eclipseGridFileName, "Associated3DCaseGridFileName", "Grid File Name" ); + m_eclipseGridFileName.registerGetMethod( this, &RimGridSummaryCase_obsolete::eclipseGridFileName ); + 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 ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimGridSummaryCase_obsolete::~RimGridSummaryCase_obsolete() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString summaryHeaderFilenameFromEclipseCase( RimEclipseCase* eclCase ) +{ + if ( !eclCase ) return QString(); + + QFileInfo gridFileInfo( eclCase->gridFileName() ); + + QString possibleSumHeaderFileName = gridFileInfo.path() + "/" + gridFileInfo.completeBaseName() + ".SMSPEC"; + + return possibleSumHeaderFileName; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString caseNameFromEclipseCase( RimEclipseCase* eclCase ) +{ + if ( !eclCase ) return QString(); + + return eclCase->caseUserDescription(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimGridSummaryCase_obsolete::setAssociatedEclipseCase( RimEclipseCase* eclipseCase ) +{ + m_eclipseCase = eclipseCase; + m_summaryHeaderFilename = summaryHeaderFilenameFromEclipseCase( eclipseCase ); + m_cachedCaseName = caseNameFromEclipseCase( eclipseCase ); + + this->updateAutoShortName(); + this->updateTreeItemName(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimEclipseCase* RimGridSummaryCase_obsolete::associatedEclipseCase() +{ + if ( !m_eclipseCase() ) + { + // Find a possible associated eclipse case + + RimProject* project; + firstAncestorOrThisOfTypeAsserted( project ); + std::vector allCases; + project->allCases( allCases ); + for ( RimCase* someCase : allCases ) + { + auto eclCase = dynamic_cast( someCase ); + if ( eclCase ) + { + QString sumHeaderFileName = summaryHeaderFilenameFromEclipseCase( eclCase ); + if ( sumHeaderFileName == m_summaryHeaderFilename().path() ) + { + m_eclipseCase = eclCase; + this->updateAutoShortName(); + this->updateTreeItemName(); + + break; + } + } + } + } + + return m_eclipseCase(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimGridSummaryCase_obsolete::summaryHeaderFilename() const +{ + if ( m_eclipseCase() ) + { + auto candidate = summaryHeaderFilenameFromEclipseCase( m_eclipseCase ); + if ( QFileInfo::exists( candidate ) ) return candidate; + } + + return m_summaryHeaderFilename().path(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimGridSummaryCase_obsolete::caseName() const +{ + if ( m_eclipseCase() ) m_cachedCaseName = caseNameFromEclipseCase( m_eclipseCase() ); + + return m_cachedCaseName; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimGridSummaryCase_obsolete::eclipseGridFileName() const +{ + if ( !m_eclipseCase() ) return QString(); + + return m_eclipseCase()->gridFileName(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimGridSummaryCase_obsolete::createSummaryReaderInterface() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RifSummaryReaderInterface* RimGridSummaryCase_obsolete::summaryReader() +{ + return nullptr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimGridSummaryCase_obsolete::setIncludeRestartFiles( bool includeRestartFiles ) +{ + m_includeRestartFiles = includeRestartFiles; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimGridSummaryCase_obsolete::convertGridCasesToSummaryFileCases( RimProject* project ) +{ + if ( !project ) return; + + auto summaryCaseMainCollection = RiaSummaryTools::summaryCaseMainCollection(); + if ( !summaryCaseMainCollection ) return; + + std::vector gridCases; + + auto summaryCases = project->allSummaryCases(); + for ( auto sumCase : summaryCases ) + { + if ( auto gridCase = dynamic_cast( sumCase ) ) gridCases.push_back( gridCase ); + } + + for ( RimGridSummaryCase_obsolete* gridCase : gridCases ) + { + RimFileSummaryCase* fileSummaryCase = createFileSummaryCaseCopy( *gridCase ); + summaryCaseMainCollection->addCase( fileSummaryCase ); + + std::vector referringFields; + gridCase->referringPtrFields( referringFields ); + + for ( caf::PdmFieldHandle* field : referringFields ) + { + auto ptrField = dynamic_cast*>( field ); + if ( ptrField ) ptrField->setValue( fileSummaryCase ); + } + } + + for ( RimGridSummaryCase_obsolete* gridCase : gridCases ) + { + summaryCaseMainCollection->removeCase( gridCase ); + + delete gridCase; + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimFileSummaryCase* RimGridSummaryCase_obsolete::createFileSummaryCaseCopy( const RimGridSummaryCase_obsolete& source ) +{ + auto fileSummaryCase = new RimFileSummaryCase(); + fileSummaryCase->copyFrom( source ); + fileSummaryCase->setIncludeRestartFiles( source.m_includeRestartFiles() ); + return fileSummaryCase; +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimGridSummaryCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimGridSummaryCase.h new file mode 100644 index 0000000000..2ce13a15d6 --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimGridSummaryCase.h @@ -0,0 +1,71 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016 Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// +#pragma once + +#include "RimSummaryCase.h" + +#include "cafPdmProxyValueField.h" +#include "cafPdmPtrField.h" + +#include "cvfObject.h" + +class RimProject; +class RimEclipseCase; +class RifSummaryReaderInterface; +class RimFileSummaryCase; + +//================================================================================================== +// +// +// +//================================================================================================== + +class RimGridSummaryCase_obsolete : public RimSummaryCase +{ + CAF_PDM_HEADER_INIT; + +public: + RimGridSummaryCase_obsolete(); + ~RimGridSummaryCase_obsolete() override; + + static void convertGridCasesToSummaryFileCases( RimProject* project ); + +private: + void setAssociatedEclipseCase( RimEclipseCase* eclipseCase ); + RimEclipseCase* associatedEclipseCase(); + + QString summaryHeaderFilename() const override; + QString caseName() const override; + + void createSummaryReaderInterface() override; + RifSummaryReaderInterface* summaryReader() override; + + void setIncludeRestartFiles( bool includeRestartFiles ); + + static RimFileSummaryCase* createFileSummaryCaseCopy( const RimGridSummaryCase_obsolete& source ); + +private: + QString eclipseGridFileName() const; + +private: + caf::PdmPtrField m_eclipseCase; + mutable caf::PdmField m_cachedCaseName; + caf::PdmProxyValueField m_eclipseGridFileName; + + caf::PdmField m_includeRestartFiles; +};