///////////////////////////////////////////////////////////////////////////////// // // 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 "RicfCommandObject.h" #include "RifSummaryReaderInterface.h" #include "RimEclipseCase.h" #include "RimFileSummaryCase.h" #include "RimProject.h" #include "cafPdmObjectScriptingCapability.h" #include //================================================================================================== // // // //================================================================================================== CAF_PDM_SOURCE_INIT( RimGridSummaryCase, "GridSummaryCase" ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimGridSummaryCase::RimGridSummaryCase() { 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::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::~RimGridSummaryCase() { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- 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::setAssociatedEclipseCase( RimEclipseCase* eclipseCase ) { m_eclipseCase = eclipseCase; m_summaryHeaderFilename = summaryHeaderFilenameFromEclipseCase( eclipseCase ); m_cachedCaseName = caseNameFromEclipseCase( eclipseCase ); this->updateAutoShortName(); this->updateTreeItemName(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimEclipseCase* RimGridSummaryCase::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::summaryHeaderFilename() const { if ( m_eclipseCase() ) { auto candidate = summaryHeaderFilenameFromEclipseCase( m_eclipseCase ); if ( QFileInfo::exists( candidate ) ) return candidate; } return m_summaryHeaderFilename().path(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString RimGridSummaryCase::caseName() const { if ( m_eclipseCase() ) m_cachedCaseName = caseNameFromEclipseCase( m_eclipseCase() ); return m_cachedCaseName; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString RimGridSummaryCase::eclipseGridFileName() const { if ( !m_eclipseCase() ) return QString(); return m_eclipseCase()->gridFileName(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimGridSummaryCase::createSummaryReaderInterface() { m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader( this->summaryHeaderFilename(), m_includeRestartFiles, nullptr ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RifSummaryReaderInterface* RimGridSummaryCase::summaryReader() { if ( m_summaryFileReader.isNull() ) { createSummaryReaderInterface(); } return m_summaryFileReader.p(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimGridSummaryCase::setIncludeRestartFiles( bool includeRestartFiles ) { m_includeRestartFiles = includeRestartFiles; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimFileSummaryCase* RimGridSummaryCase::createFileSummaryCaseCopy() { RimFileSummaryCase* fileSummaryCase = new RimFileSummaryCase(); fileSummaryCase->copyFrom( *this ); fileSummaryCase->setIncludeRestartFiles( m_includeRestartFiles() ); return fileSummaryCase; }