Extract more methods from RifEclipseInputPropertyLoader::loadAndSyncronizeInputProperties.

This commit is contained in:
Kristian Bendiksen
2019-10-30 21:57:58 +01:00
parent c3dc8376be
commit 9c53cfb44f
2 changed files with 68 additions and 43 deletions

View File

@@ -34,7 +34,6 @@
#include <QFileInfo> #include <QFileInfo>
#define for_all( stdVector, indexName ) for ( size_t indexName = 0; indexName < stdVector.size(); ++indexName )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// Loads input property data from the gridFile and additional files /// Loads input property data from the gridFile and additional files
/// Creates new InputProperties if necessary, and flags the unused ones as obsolete /// Creates new InputProperties if necessary, and flags the unused ones as obsolete
@@ -48,69 +47,43 @@ void RifEclipseInputPropertyLoader::loadAndSyncronizeInputProperties(
CVF_ASSERT( eclipseCaseData ); CVF_ASSERT( eclipseCaseData );
CVF_ASSERT( eclipseCaseData->mainGrid()->gridPointDimensions() != cvf::Vec3st( 0, 0, 0 ) ); CVF_ASSERT( eclipseCaseData->mainGrid()->gridPointDimensions() != cvf::Vec3st( 0, 0, 0 ) );
size_t inputPropCount = inputPropertyCollection->inputProperties.size(); size_t inputPropCount = inputPropertyCollection->inputProperties.size();
caf::ProgressInfo progInfo( static_cast<int>( filenames.size() * inputPropCount ), "Reading Input properties" ); caf::ProgressInfo progInfo( static_cast<int>( filenames.size() * inputPropCount ), "Reading Input properties" );
for_all( filenames, i ) int i = 0;
for ( const QString filename : filenames )
{ {
int progress = static_cast<int>( i * inputPropCount ); int progress = static_cast<int>( i * inputPropCount );
// Find all the keywords present on the file progInfo.setProgressDescription( filename );
progInfo.setProgressDescription( filenames[i] ); QFileInfo fileNameInfo( filename );
QFileInfo fileNameInfo( filenames[i] );
bool isExistingFile = fileNameInfo.exists(); bool isExistingFile = fileNameInfo.exists();
// Find all the keywords present on the file
std::set<QString> fileKeywordSet = extractKeywordsOnFile( filenames[i], isExistingFile ); std::set<QString> fileKeywordSet = extractKeywordsOnFile( filenames[i], isExistingFile );
// Find the input property objects referring to the file readDataForEachInputProperty( inputPropertyCollection,
eclipseCaseData,
std::vector<RimEclipseInputProperty*> ipsUsingThisFile = inputPropertyCollection->findInputProperties( filename,
filenames[i] ); isExistingFile,
&fileKeywordSet,
// Read property data for each inputProperty &progInfo,
progress );
for_all( ipsUsingThisFile, ipIdx )
{
if ( !isExistingFile )
{
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::FILE_MISSING;
}
else
{
QString kw = ipsUsingThisFile[ipIdx]->eclipseKeyword();
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::KEYWORD_NOT_IN_FILE;
if ( fileKeywordSet.count( kw ) )
{
if ( RifEclipseInputFileTools::readProperty( filenames[i],
eclipseCaseData,
kw,
ipsUsingThisFile[ipIdx]->resultName ) )
{
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::RESOLVED;
}
}
fileKeywordSet.erase( kw );
}
progInfo.setProgress( static_cast<int>( progress + ipIdx ) );
}
progInfo.setProgress( static_cast<int>( progress + inputPropCount ) ); progInfo.setProgress( static_cast<int>( progress + inputPropCount ) );
// Check if there are more known property keywords left on file. If it is, read them and create inputProperty // Check if there are more known property keywords left on file. If it is, read them and create inputProperty
// objects // objects
for ( const QString& fileKeyword : fileKeywordSet ) for ( const QString& fileKeyword : fileKeywordSet )
{ {
{ {
QString resultName = eclipseCaseData->results( RiaDefines::MATRIX_MODEL )->makeResultNameUnique( fileKeyword ); QString resultName = eclipseCaseData->results( RiaDefines::MATRIX_MODEL )->makeResultNameUnique( fileKeyword );
if ( RifEclipseInputFileTools::readProperty( filenames[i], eclipseCaseData, fileKeyword, resultName ) ) if ( RifEclipseInputFileTools::readProperty( filename, eclipseCaseData, fileKeyword, resultName ) )
{ {
RimEclipseInputProperty* inputProperty = new RimEclipseInputProperty; RimEclipseInputProperty* inputProperty = new RimEclipseInputProperty;
inputProperty->resultName = resultName; inputProperty->resultName = resultName;
inputProperty->eclipseKeyword = fileKeyword; inputProperty->eclipseKeyword = fileKeyword;
inputProperty->fileName = filenames[i]; inputProperty->fileName = filename;
inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED; inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED;
inputPropertyCollection->inputProperties.push_back( inputProperty ); inputPropertyCollection->inputProperties.push_back( inputProperty );
} }
@@ -118,6 +91,7 @@ void RifEclipseInputPropertyLoader::loadAndSyncronizeInputProperties(
progInfo.setProgress( static_cast<int>( progress + inputPropCount ) ); progInfo.setProgress( static_cast<int>( progress + inputPropCount ) );
} }
i++;
} }
// All input properties still unknown at this stage is missing a file // All input properties still unknown at this stage is missing a file
@@ -189,3 +163,42 @@ void RifEclipseInputPropertyLoader::setResolvedState( RimEclipseInputPropertyCol
} }
} }
} }
void RifEclipseInputPropertyLoader::readDataForEachInputProperty( RimEclipseInputPropertyCollection* inputPropertyCollection,
RigEclipseCaseData* eclipseCaseData,
const QString& filename,
bool isExistingFile,
std::set<QString>* fileKeywordSet,
caf::ProgressInfo* progressInfo,
int progressOffset )
{
// Find the input property objects referring to the file
std::vector<RimEclipseInputProperty*> ipsUsingThisFile = inputPropertyCollection->findInputProperties( filename );
// Read property data for each inputProperty
int progress = 0;
for ( RimEclipseInputProperty* inputProperty : ipsUsingThisFile )
{
if ( !isExistingFile )
{
inputProperty->resolvedState = RimEclipseInputProperty::FILE_MISSING;
}
else
{
inputProperty->resolvedState = RimEclipseInputProperty::KEYWORD_NOT_IN_FILE;
QString kw = inputProperty->eclipseKeyword();
if ( fileKeywordSet->count( kw ) )
{
if ( RifEclipseInputFileTools::readProperty( filename, eclipseCaseData, kw, inputProperty->resultName ) )
{
inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED;
}
}
fileKeywordSet->erase( kw );
}
progressInfo->setProgress( static_cast<int>( progressOffset + progress ) );
progress++;
}
}

View File

@@ -27,6 +27,10 @@
class RimEclipseInputPropertyCollection; class RimEclipseInputPropertyCollection;
class RigEclipseCaseData; class RigEclipseCaseData;
namespace caf
{
class ProgressInfo;
}
//================================================================================================== //==================================================================================================
// //
@@ -54,4 +58,12 @@ private:
static void setResolvedState( RimEclipseInputPropertyCollection* inputPropertyCollection, static void setResolvedState( RimEclipseInputPropertyCollection* inputPropertyCollection,
RimEclipseInputProperty::ResolveState currentState, RimEclipseInputProperty::ResolveState currentState,
RimEclipseInputProperty::ResolveState newState ); RimEclipseInputProperty::ResolveState newState );
static void readDataForEachInputProperty( RimEclipseInputPropertyCollection* inputPropertyCollection,
RigEclipseCaseData* eclipseCaseData,
const QString& filename,
bool isExistingFile,
std::set<QString>* fileKeywordSet,
caf::ProgressInfo* progressInfo,
int progressOffset );
}; };