#2369 Elm Props: Remove deleted field results from cache

This commit is contained in:
Rebecca Cox 2018-01-13 12:38:08 +01:00
parent 27901f426c
commit a8039b8569
3 changed files with 45 additions and 8 deletions

View File

@ -48,7 +48,7 @@ void RifElementPropertyReader::addFile(const std::string& fileName)
}
//--------------------------------------------------------------------------------------------------
///
///
//--------------------------------------------------------------------------------------------------
void RifElementPropertyReader::removeFile(const std::string& fileName)
{
@ -61,18 +61,18 @@ void RifElementPropertyReader::removeFile(const std::string& fileName)
tempMetaData[metaData.first] = metaData.second;
}
}
m_fieldsMetaData.swap(tempMetaData);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::map<std::string, std::vector<std::string>> RifElementPropertyReader::scalarElementFields()
std::map<std::string, std::vector<std::string>> RifElementPropertyReader::scalarElementFields() const
{
std::map<std::string, std::vector<std::string>> fields;
for (std::map<std::string, RifElementPropertyMetadata>::iterator field = m_fieldsMetaData.begin();
for (std::map<std::string, RifElementPropertyMetadata>::const_iterator field = m_fieldsMetaData.begin();
field != m_fieldsMetaData.end(); field++)
{
fields[field->first];
@ -105,8 +105,8 @@ std::map<std::string, std::vector<float>>
{
for (size_t i = 0; i < table.data.size(); i++)
{
const std::string& currentFieldFromFile = m_fieldsMetaData[fieldName].dataColumns[i].toStdString();
fieldAndData[currentFieldFromFile] = table.data[i];
const std::string& currentFieldFromFile = m_fieldsMetaData[fieldName].dataColumns[i].toStdString();
fieldAndData[currentFieldFromFile] = table.data[i];
}
}
else if (elementIdsFromFile.size() > m_elementIdxToId.size() && elementIdsFromFile.size() > m_elementIdToIdx.size())
@ -156,6 +156,27 @@ std::map<std::string, std::vector<float>>
return fieldAndData;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<std::string> RifElementPropertyReader::fieldsInFile(const std::string& fileName) const
{
std::vector<std::string> fields;
for (std::pair<std::string, RifElementPropertyMetadata> metaData : m_fieldsMetaData)
{
if (metaData.second.fileName.toStdString() == fileName)
{
for (const QString& column : metaData.second.dataColumns)
{
fields.push_back(column.toStdString());
}
}
}
return fields;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -173,7 +194,7 @@ void RifElementPropertyReader::makeElementIdToIdxMap()
}
//--------------------------------------------------------------------------------------------------
///
///
//--------------------------------------------------------------------------------------------------
void RifElementPropertyReader::outputWarningAboutWrongFileData()
{

View File

@ -42,10 +42,12 @@ public:
void addFile(const std::string& fileName);
void removeFile(const std::string& fileName);
std::map<std::string, std::vector<std::string>> scalarElementFields();
std::map<std::string, std::vector<std::string>> scalarElementFields() const;
std::map<std::string, std::vector<float>> readAllElementPropertiesInFileContainingField(const std::string& fieldName);
std::vector<std::string> fieldsInFile(const std::string& fileName) const;
private:
void makeElementIdToIdxMap();
static void outputWarningAboutWrongFileData();

View File

@ -137,10 +137,24 @@ void RigFemPartResultsCollection::addElementPropertyFiles(const std::vector<QStr
//--------------------------------------------------------------------------------------------------
void RigFemPartResultsCollection::removeElementPropertyFiles(const std::vector<QString>& filenames)
{
std::vector<RigFemResultAddress> addressesToRemove;
for (const QString filename : filenames)
{
std::vector<std::string> fields = m_elementPropertyReader->fieldsInFile(filename.toStdString());
for (std::string field : fields)
{
addressesToRemove.push_back(RigFemResultAddress(RIG_ELEMENT, field, ""));
}
m_elementPropertyReader->removeFile(filename.toStdString());
}
for (const RigFemResultAddress& address : addressesToRemove)
{
this->deleteResult(address);
}
}
//--------------------------------------------------------------------------------------------------