diff --git a/ApplicationLibCode/FileInterface/RifColumnBasedUserData.cpp b/ApplicationLibCode/FileInterface/RifColumnBasedUserData.cpp index e3eabc5405..99ab947252 100644 --- a/ApplicationLibCode/FileInterface/RifColumnBasedUserData.cpp +++ b/ApplicationLibCode/FileInterface/RifColumnBasedUserData.cpp @@ -277,3 +277,11 @@ std::vector RifColumnBasedUserData::createTimeSteps( const TableData& ta return tsVector; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifColumnBasedUserData::keywordCount() const +{ + return m_mapFromAddressToResultIndex.size(); +} diff --git a/ApplicationLibCode/FileInterface/RifColumnBasedUserData.h b/ApplicationLibCode/FileInterface/RifColumnBasedUserData.h index c495624074..63a947cf6d 100644 --- a/ApplicationLibCode/FileInterface/RifColumnBasedUserData.h +++ b/ApplicationLibCode/FileInterface/RifColumnBasedUserData.h @@ -52,6 +52,7 @@ public: private: void buildTimeStepsAndMappings(); static std::vector createTimeSteps( const TableData& table ); + size_t keywordCount() const override; private: std::unique_ptr m_parser; diff --git a/ApplicationLibCode/FileInterface/RifCsvSummaryReader.cpp b/ApplicationLibCode/FileInterface/RifCsvSummaryReader.cpp index 48c0ee36ee..0f2409f491 100644 --- a/ApplicationLibCode/FileInterface/RifCsvSummaryReader.cpp +++ b/ApplicationLibCode/FileInterface/RifCsvSummaryReader.cpp @@ -146,3 +146,11 @@ void RifCsvSummaryReader::buildTimeStepsAndMappings() } } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifCsvSummaryReader::keywordCount() const +{ + return m_mapFromAddressToResultIndex.size(); +} diff --git a/ApplicationLibCode/FileInterface/RifCsvSummaryReader.h b/ApplicationLibCode/FileInterface/RifCsvSummaryReader.h index 12a674e866..32f1fc9857 100644 --- a/ApplicationLibCode/FileInterface/RifCsvSummaryReader.h +++ b/ApplicationLibCode/FileInterface/RifCsvSummaryReader.h @@ -48,8 +48,10 @@ public: RiaDefines::EclipseUnitSystem unitSystem() const override; protected: - void buildTimeStepsAndMappings(); + void buildTimeStepsAndMappings(); + size_t keywordCount() const override; +protected: std::unique_ptr m_parser; std::map m_mapFromAddressToResultIndex; diff --git a/ApplicationLibCode/FileInterface/RifCsvUserData.cpp b/ApplicationLibCode/FileInterface/RifCsvUserData.cpp index d60fe4bb77..905918368b 100644 --- a/ApplicationLibCode/FileInterface/RifCsvUserData.cpp +++ b/ApplicationLibCode/FileInterface/RifCsvUserData.cpp @@ -166,3 +166,11 @@ void RifCsvUserData::buildTimeStepsAndMappings() } } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifCsvUserData::keywordCount() const +{ + return m_mapFromAddressToResultIndex.size(); +} diff --git a/ApplicationLibCode/FileInterface/RifCsvUserData.h b/ApplicationLibCode/FileInterface/RifCsvUserData.h index 46ff448cd2..5f3f269c79 100644 --- a/ApplicationLibCode/FileInterface/RifCsvUserData.h +++ b/ApplicationLibCode/FileInterface/RifCsvUserData.h @@ -52,7 +52,8 @@ public: RiaDefines::EclipseUnitSystem unitSystem() const override; private: - void buildTimeStepsAndMappings(); + void buildTimeStepsAndMappings(); + size_t keywordCount() const override; private: std::unique_ptr m_parser; diff --git a/ApplicationLibCode/FileInterface/RifEclEclipseSummary.cpp b/ApplicationLibCode/FileInterface/RifEclEclipseSummary.cpp index e444b1864c..f898aee18f 100644 --- a/ApplicationLibCode/FileInterface/RifEclEclipseSummary.cpp +++ b/ApplicationLibCode/FileInterface/RifEclEclipseSummary.cpp @@ -67,14 +67,24 @@ bool RifEclEclipseSummary::open( const QString& headerFileName, RiaThreadSafeLog assert( m_ecl_sum == nullptr ); m_ecl_sum = RifEclipseSummaryTools::openEclSum( headerFileName, false ); - if ( m_ecl_sum ) + + if ( !m_ecl_sum ) { - m_timeSteps.clear(); - m_ecl_SmSpec = ecl_sum_get_smspec( m_ecl_sum ); - m_timeSteps = RifEclipseSummaryTools::getTimeSteps( m_ecl_sum ); - m_unitSystem = RifEclipseSummaryTools::readUnitSystem( m_ecl_sum ); + if ( threadSafeLogger ) + { + QString msg = "Not able to create resdata file reader for " + headerFileName; + threadSafeLogger->error( msg ); + } + return false; } + m_timeSteps.clear(); + m_ecl_SmSpec = ecl_sum_get_smspec( m_ecl_sum ); + m_timeSteps = RifEclipseSummaryTools::getTimeSteps( m_ecl_sum ); + m_unitSystem = RifEclipseSummaryTools::readUnitSystem( m_ecl_sum ); + + createAndSetAddresses(); + return true; } @@ -363,6 +373,19 @@ void RifEclEclipseSummary::createAndSetAddresses() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifEclEclipseSummary::keywordCount() const +{ + if ( m_ecl_SmSpec ) + { + return static_cast( ecl_smspec_num_nodes( m_ecl_SmSpec ) ); + } + + return 0; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/FileInterface/RifEclEclipseSummary.h b/ApplicationLibCode/FileInterface/RifEclEclipseSummary.h index c631f8aae5..add1f3a969 100644 --- a/ApplicationLibCode/FileInterface/RifEclEclipseSummary.h +++ b/ApplicationLibCode/FileInterface/RifEclEclipseSummary.h @@ -57,8 +57,9 @@ public: static std::string normalizeCompletionAddress( const std::string& address ); private: - int indexFromAddress( const RifEclipseSummaryAddress& resultAddress ) const; - void createAndSetAddresses() override; + int indexFromAddress( const RifEclipseSummaryAddress& resultAddress ) const; + void createAndSetAddresses() override; + size_t keywordCount() const override; private: ecl_sum_type* m_ecl_sum; diff --git a/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.cpp b/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.cpp index ef5df2e43a..c8a1d0172d 100644 --- a/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.cpp +++ b/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.cpp @@ -266,3 +266,11 @@ QString RifKeywordVectorUserData::valueForKey( const std::map& return ""; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifKeywordVectorUserData::keywordCount() const +{ + return m_mapFromAddressToVectorIndex.size(); +} diff --git a/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.h b/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.h index 475f09be6d..2a9cb68960 100644 --- a/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.h +++ b/ApplicationLibCode/FileInterface/RifKeywordVectorUserData.h @@ -54,6 +54,7 @@ private: static bool isTimeHeader( const std::map& header ); static bool isVectorHeader( const std::map& header ); static QString valueForKey( const std::map& header, const QString& key ); + size_t keywordCount() const override; private: std::unique_ptr m_parser; diff --git a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp index f01109b6c1..47ad0d6b52 100644 --- a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp +++ b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp @@ -194,3 +194,15 @@ bool RifOpmHdf5Summary::openESmryFile( const QString& headerFileName, bool inclu return true; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifOpmHdf5Summary::keywordCount() const +{ + if ( m_eSmry ) + { + return m_eSmry->keywordList().size(); + } + return 0; +} diff --git a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h index 69004c827e..cd84f758e9 100644 --- a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h +++ b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h @@ -62,8 +62,9 @@ public: RiaDefines::EclipseUnitSystem unitSystem() const override; private: - void createAndSetAddresses() override; - bool openESmryFile( const QString& headerFileName, bool includeRestartFiles, RiaThreadSafeLogger* threadSafeLogger ); + void createAndSetAddresses() override; + bool openESmryFile( const QString& headerFileName, bool includeRestartFiles, RiaThreadSafeLogger* threadSafeLogger ); + size_t keywordCount() const override; private: std::unique_ptr m_eSmry; diff --git a/ApplicationLibCode/FileInterface/RifReaderObservedData.cpp b/ApplicationLibCode/FileInterface/RifReaderObservedData.cpp index 3e694f4ea4..c6d00767eb 100644 --- a/ApplicationLibCode/FileInterface/RifReaderObservedData.cpp +++ b/ApplicationLibCode/FileInterface/RifReaderObservedData.cpp @@ -184,6 +184,14 @@ RifEclipseSummaryAddress RifReaderObservedData::address( const QString& id ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifReaderObservedData::keywordCount() const +{ + return m_allResultAddresses.size(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/FileInterface/RifReaderObservedData.h b/ApplicationLibCode/FileInterface/RifReaderObservedData.h index c0ef1455b8..f77c048fc2 100644 --- a/ApplicationLibCode/FileInterface/RifReaderObservedData.h +++ b/ApplicationLibCode/FileInterface/RifReaderObservedData.h @@ -54,6 +54,7 @@ public: private: RifEclipseSummaryAddress address( const QString& vectorName, const QString& identifierName, RifEclipseSummaryAddressDefines::SummaryCategory summaryCategory ); + size_t keywordCount() const override; private: std::unique_ptr m_asciiParser; diff --git a/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.cpp b/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.cpp index dc00608c77..54fd74fa51 100644 --- a/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.cpp +++ b/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.cpp @@ -69,14 +69,6 @@ void RifSummaryReaderInterface::createAddressesIfRequired() } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -size_t RifSummaryReaderInterface::keywordCount() const -{ - return 0; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.h b/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.h index f4dc199f65..a05f488c70 100644 --- a/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.h +++ b/ApplicationLibCode/FileInterface/RifSummaryReaderInterface.h @@ -60,13 +60,11 @@ public: // Returns the number of result addresses. If no addresses are present, keywordCount() is returned. size_t dataObjectCount() const; -protected: - // The keywordCount is considered a internal method, not to be used by clients. Add a friend class to allow access - friend class RifSummaryReaderAggregator; - friend class RifMultipleSummaryReaders; - friend class RifReaderEclipseSummary; - virtual size_t keywordCount() const; + // The keywordCount is considered a internal method, not to be used by clients. Having it as a protected method will not work well, as + // this class is also used as a contained object in addition to deriving from this interface. + virtual size_t keywordCount() const = 0; +protected: void increaseSerialNumber(); std::set m_allResultAddresses; // Result and error addresses diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.cpp index 4122fba6dd..876662cf47 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.cpp @@ -114,6 +114,14 @@ RimSummaryCalculation* RifCalculatedSummaryCurveReader::findCalculationByName( c return dynamic_cast( m_calculationCollection->findCalculationById( resultAddress.id() ) ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RifCalculatedSummaryCurveReader::keywordCount() const +{ + return 0; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.h b/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.h index 8cbbea202a..a425ce2dcd 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimCalculatedSummaryCurveReader.h @@ -43,6 +43,7 @@ public: private: RimSummaryCalculation* findCalculationByName( const RifEclipseSummaryAddress& resultAddress ) const; + size_t keywordCount() const override; private: RimSummaryCalculationCollection* m_calculationCollection; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp index 5265bba14b..2cc901fc73 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp @@ -368,6 +368,14 @@ QString RimDeltaSummaryCase::caseName() const return m_displayName; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RimDeltaSummaryCase::keywordCount() const +{ + return m_allResultAddresses.size(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h index 0709cafbce..9e27fab0b5 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h @@ -88,6 +88,7 @@ public: protected: QString caseName() const override; + size_t keywordCount() const override; private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.cpp index 0282d74979..3223ab29c5 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.cpp @@ -318,3 +318,18 @@ void RimEnsembleCrossPlotStatisticsCase::clearData() m_meanData.clear(); m_firstSummaryCase = nullptr; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RimEnsembleCrossPlotStatisticsCase::keywordCount() const +{ + if ( m_firstSummaryCase && m_firstSummaryCase->summaryReader() ) + { + m_firstSummaryCase->summaryReader()->createAddressesIfRequired(); + + return m_firstSummaryCase->summaryReader()->keywordCount(); + } + + return 0; +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.h index f02990205e..348bbbfb99 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCrossPlotStatisticsCase.h @@ -55,7 +55,8 @@ public: std::string unitName( const RifEclipseSummaryAddress& resultAddress ) const override; private: - void clearData(); + void clearData(); + size_t keywordCount() const override; private: std::vector m_p10Data; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp index 85077315c6..7111f74f73 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp @@ -240,6 +240,21 @@ void RimEnsembleStatisticsCase::clearData() m_firstSummaryCase = nullptr; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RimEnsembleStatisticsCase::keywordCount() const +{ + if ( m_firstSummaryCase && m_firstSummaryCase->summaryReader() ) + { + m_firstSummaryCase->summaryReader()->createAddressesIfRequired(); + + return m_firstSummaryCase->summaryReader()->keywordCount(); + } + + return 0; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h index ba819986cb..2606f2c606 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h @@ -54,7 +54,8 @@ public: static RiaDefines::DateTimePeriod findBestResamplingPeriod( time_t minTimeStep, time_t maxTimeStep ); private: - void clearData(); + void clearData(); + size_t keywordCount() const override; private: std::vector m_timeSteps; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp index 8c00b9056b..e8b71f907d 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp @@ -100,7 +100,7 @@ void RimFileSummaryCase::createSummaryReaderInterfaceThreadSafe( RifEnsembleImpo // // https://github.com/OPM/ResInsight/issues/11342 - m_multiSummaryReader = std::make_unique(); + auto multiReader = std::make_unique(); m_fileSummaryReaderId = -1; m_additionalSummaryReaderId = -1; @@ -112,6 +112,7 @@ void RimFileSummaryCase::createSummaryReaderInterfaceThreadSafe( RifEnsembleImpo m_fileSummaryReaderId = reader->serialNumber(); + m_multiSummaryReader = std::move( multiReader ); m_multiSummaryReader->addReader( std::move( reader ) ); openAndAttachAdditionalReader(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.cpp b/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.cpp index cd8da8fda4..33c60f3384 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.cpp @@ -179,3 +179,11 @@ void RimSummaryCaseSumo::createAndSetAddresses() m_allResultAddresses = addresses; } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RimSummaryCaseSumo::keywordCount() const +{ + return m_allResultAddresses.size(); +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.h b/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.h index 17f2a502f4..03a65c0a7a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/Sumo/RimSummaryCaseSumo.h @@ -57,6 +57,7 @@ public: protected: QString caseName() const override; void createAndSetAddresses() override; + size_t keywordCount() const override; private: caf::PdmPointer m_ensemble;