#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) void RifElementPropertyReader::removeFile(const std::string& fileName)
{ {
@ -61,18 +61,18 @@ void RifElementPropertyReader::removeFile(const std::string& fileName)
tempMetaData[metaData.first] = metaData.second; tempMetaData[metaData.first] = metaData.second;
} }
} }
m_fieldsMetaData.swap(tempMetaData); 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; 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++) field != m_fieldsMetaData.end(); field++)
{ {
fields[field->first]; fields[field->first];
@ -105,8 +105,8 @@ std::map<std::string, std::vector<float>>
{ {
for (size_t i = 0; i < table.data.size(); i++) for (size_t i = 0; i < table.data.size(); i++)
{ {
const std::string& currentFieldFromFile = m_fieldsMetaData[fieldName].dataColumns[i].toStdString(); const std::string& currentFieldFromFile = m_fieldsMetaData[fieldName].dataColumns[i].toStdString();
fieldAndData[currentFieldFromFile] = table.data[i]; fieldAndData[currentFieldFromFile] = table.data[i];
} }
} }
else if (elementIdsFromFile.size() > m_elementIdxToId.size() && elementIdsFromFile.size() > m_elementIdToIdx.size()) 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; 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() void RifElementPropertyReader::outputWarningAboutWrongFileData()
{ {

View File

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

View File

@ -137,10 +137,24 @@ void RigFemPartResultsCollection::addElementPropertyFiles(const std::vector<QStr
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RigFemPartResultsCollection::removeElementPropertyFiles(const std::vector<QString>& filenames) void RigFemPartResultsCollection::removeElementPropertyFiles(const std::vector<QString>& filenames)
{ {
std::vector<RigFemResultAddress> addressesToRemove;
for (const QString filename : filenames) 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()); m_elementPropertyReader->removeFile(filename.toStdString());
} }
for (const RigFemResultAddress& address : addressesToRemove)
{
this->deleteResult(address);
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------