mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2066 Observed Data : Improve error reporting
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
|
||||||
CAF_CMD_SOURCE_INIT(RicImportObservedDataFeature, "RicImportObservedDataFeature");
|
CAF_CMD_SOURCE_INIT(RicImportObservedDataFeature, "RicImportObservedDataFeature");
|
||||||
@@ -61,9 +62,29 @@ void RicImportObservedDataFeature::selectObservedDataFileInDialog()
|
|||||||
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
|
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
|
||||||
if (!observedDataCollection) return;
|
if (!observedDataCollection) return;
|
||||||
|
|
||||||
|
QString aggregatedErrorStrings;
|
||||||
|
|
||||||
for (const QString& fileName : fileNames)
|
for (const QString& fileName : fileNames)
|
||||||
{
|
{
|
||||||
RicImportObservedDataFeature::createAndAddObservedDataFromFile(fileName);
|
QString s;
|
||||||
|
RicImportObservedDataFeature::createAndAddObservedDataFromFile(fileName, &s);
|
||||||
|
if (!s.isEmpty())
|
||||||
|
{
|
||||||
|
aggregatedErrorStrings += fileName;
|
||||||
|
aggregatedErrorStrings += "\n";
|
||||||
|
aggregatedErrorStrings += s;
|
||||||
|
aggregatedErrorStrings += "\n";
|
||||||
|
aggregatedErrorStrings += "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!aggregatedErrorStrings.isEmpty())
|
||||||
|
{
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setIcon(QMessageBox::Warning);
|
||||||
|
msgBox.setText("Errors detected during import");
|
||||||
|
msgBox.setDetailedText(aggregatedErrorStrings);
|
||||||
|
msgBox.exec();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,7 +122,7 @@ void RicImportObservedDataFeature::setupActionLook(QAction* actionToSetup)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RicImportObservedDataFeature::createAndAddObservedDataFromFile(const QString& fileName)
|
bool RicImportObservedDataFeature::createAndAddObservedDataFromFile(const QString& fileName, QString* errorText)
|
||||||
{
|
{
|
||||||
RiaApplication* app = RiaApplication::instance();
|
RiaApplication* app = RiaApplication::instance();
|
||||||
RimProject* proj = app->project();
|
RimProject* proj = app->project();
|
||||||
@@ -109,7 +130,7 @@ bool RicImportObservedDataFeature::createAndAddObservedDataFromFile(const QStrin
|
|||||||
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
|
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
|
||||||
if (!observedDataCollection) return false;
|
if (!observedDataCollection) return false;
|
||||||
|
|
||||||
RimObservedData* newObservedData = observedDataCollection->createAndAddObservedDataFromFileName(fileName);
|
RimObservedData* newObservedData = observedDataCollection->createAndAddObservedDataFromFileName(fileName, errorText);
|
||||||
|
|
||||||
RiaApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem(newObservedData);
|
RiaApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem(newObservedData);
|
||||||
|
|
||||||
|
|||||||
@@ -40,5 +40,5 @@ private:
|
|||||||
virtual void onActionTriggered(bool isChecked) override;
|
virtual void onActionTriggered(bool isChecked) override;
|
||||||
virtual void setupActionLook(QAction* actionToSetup) override;
|
virtual void setupActionLook(QAction* actionToSetup) override;
|
||||||
|
|
||||||
static bool createAndAddObservedDataFromFile(const QString& fileName);
|
static bool createAndAddObservedDataFromFile(const QString& fileName, QString* errorText = nullptr);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -51,14 +51,14 @@ RifColumnBasedUserData::~RifColumnBasedUserData()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RifColumnBasedUserData::parse(const QString& data)
|
bool RifColumnBasedUserData::parse(const QString& data, QString* errorText)
|
||||||
{
|
{
|
||||||
m_allResultAddresses.clear();
|
m_allResultAddresses.clear();
|
||||||
m_timeSteps.clear();
|
m_timeSteps.clear();
|
||||||
m_mapFromAddressToTimeStepIndex.clear();
|
m_mapFromAddressToTimeStepIndex.clear();
|
||||||
m_mapFromAddressToResultIndex.clear();
|
m_mapFromAddressToResultIndex.clear();
|
||||||
|
|
||||||
m_parser = std::unique_ptr<RifColumnBasedUserDataParser>(new RifColumnBasedUserDataParser(data));
|
m_parser = std::unique_ptr<RifColumnBasedUserDataParser>(new RifColumnBasedUserDataParser(data, errorText));
|
||||||
if (!m_parser)
|
if (!m_parser)
|
||||||
{
|
{
|
||||||
RiaLogging::error(QString("Failed to parse file"));
|
RiaLogging::error(QString("Failed to parse file"));
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
RifColumnBasedUserData();
|
RifColumnBasedUserData();
|
||||||
~RifColumnBasedUserData();
|
~RifColumnBasedUserData();
|
||||||
|
|
||||||
bool parse(const QString& data);
|
bool parse(const QString& data, QString* errorText = nullptr);
|
||||||
|
|
||||||
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
|
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,8 @@
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RifColumnBasedUserDataParser::RifColumnBasedUserDataParser(const QString& data)
|
RifColumnBasedUserDataParser::RifColumnBasedUserDataParser(const QString& data, QString* errorText)
|
||||||
|
: m_errorText(errorText)
|
||||||
{
|
{
|
||||||
parseTableData(data);
|
parseTableData(data);
|
||||||
}
|
}
|
||||||
@@ -70,7 +71,18 @@ void RifColumnBasedUserDataParser::parseTableData(const QString& data)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
auto table = RifEclipseUserDataParserTools::tableDataFromText(streamData);
|
std::vector<std::string> errorStrings;
|
||||||
|
|
||||||
|
auto table = RifEclipseUserDataParserTools::tableDataFromText(streamData, &errorStrings);
|
||||||
|
if (m_errorText)
|
||||||
|
{
|
||||||
|
for (auto s : errorStrings)
|
||||||
|
{
|
||||||
|
QString errorText = QString("\n%1").arg(QString::fromStdString(s));
|
||||||
|
m_errorText->append(errorText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<ColumnInfo>& columnInfos = table.columnInfos();
|
std::vector<ColumnInfo>& columnInfos = table.columnInfos();
|
||||||
int columnCount = static_cast<int>(columnInfos.size());
|
int columnCount = static_cast<int>(columnInfos.size());
|
||||||
if (columnCount == 0) break;
|
if (columnCount == 0) break;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include "RifEclipseSummaryAddress.h"
|
#include "RifEclipseSummaryAddress.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ class TableData;
|
|||||||
class RifColumnBasedUserDataParser
|
class RifColumnBasedUserDataParser
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RifColumnBasedUserDataParser(const QString& data);
|
RifColumnBasedUserDataParser(const QString& data, QString* errorText = nullptr);
|
||||||
const std::vector<TableData>& tableData() const;
|
const std::vector<TableData>& tableData() const;
|
||||||
|
|
||||||
const ColumnInfo* columnInfo(size_t tableIndex, size_t columnIndex) const;
|
const ColumnInfo* columnInfo(size_t tableIndex, size_t columnIndex) const;
|
||||||
@@ -42,5 +43,6 @@ private:
|
|||||||
void parseTableData(const QString& data);
|
void parseTableData(const QString& data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<TableData> m_tableDatas;
|
std::vector<TableData> m_tableDatas;
|
||||||
|
QString* m_errorText;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ void RimObservedDataCollection::addObservedData(RimObservedData* observedData)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName(const QString& fileName)
|
RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName(const QString& fileName, QString* errorText)
|
||||||
{
|
{
|
||||||
RimObservedData* observedData = nullptr;
|
RimObservedData* observedData = nullptr;
|
||||||
|
|
||||||
@@ -84,7 +84,10 @@ RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName
|
|||||||
QFile file(fileName);
|
QFile file(fileName);
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||||
{
|
{
|
||||||
RiaLogging::error(QString("Failed to open %1").arg(fileName));
|
QString s = QString("Failed to open %1").arg(fileName);
|
||||||
|
RiaLogging::error(s);
|
||||||
|
|
||||||
|
if (errorText) errorText->append(s);
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@@ -118,6 +121,11 @@ RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName
|
|||||||
observedData->updateMetaData();
|
observedData->updateMetaData();
|
||||||
observedData->updateOptionSensitivity();
|
observedData->updateOptionSensitivity();
|
||||||
|
|
||||||
|
if (errorText && !observedData->errorMessagesFromReader().isEmpty())
|
||||||
|
{
|
||||||
|
errorText->append(observedData->errorMessagesFromReader());
|
||||||
|
}
|
||||||
|
|
||||||
RiuMainPlotWindow* mainPlotWindow = RiaApplication::instance()->getOrCreateAndShowMainPlotWindow();
|
RiuMainPlotWindow* mainPlotWindow = RiaApplication::instance()->getOrCreateAndShowMainPlotWindow();
|
||||||
if (mainPlotWindow)
|
if (mainPlotWindow)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public:
|
|||||||
|
|
||||||
void removeObservedData(RimObservedData* observedData);
|
void removeObservedData(RimObservedData* observedData);
|
||||||
void addObservedData(RimObservedData* observedData);
|
void addObservedData(RimObservedData* observedData);
|
||||||
RimObservedData* createAndAddObservedDataFromFileName(const QString& fileName);
|
RimObservedData* createAndAddObservedDataFromFileName(const QString& fileName, QString* errorText = nullptr);
|
||||||
std::vector<RimSummaryCase*> allObservedData();
|
std::vector<RimSummaryCase*> allObservedData();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ void RimObservedEclipseUserData::createSummaryReaderInterface()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
RifColumnBasedUserData* columnBaseUserData = new RifColumnBasedUserData();
|
RifColumnBasedUserData* columnBaseUserData = new RifColumnBasedUserData();
|
||||||
if (columnBaseUserData->parse(fileContents))
|
if (columnBaseUserData->parse(fileContents, &m_errorText))
|
||||||
{
|
{
|
||||||
m_summeryReader = columnBaseUserData;
|
m_summeryReader = columnBaseUserData;
|
||||||
}
|
}
|
||||||
@@ -101,3 +101,11 @@ RifSummaryReaderInterface* RimObservedEclipseUserData::summaryReader()
|
|||||||
{
|
{
|
||||||
return m_summeryReader.p();
|
return m_summeryReader.p();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString RimObservedEclipseUserData::errorMessagesFromReader()
|
||||||
|
{
|
||||||
|
return m_errorText;
|
||||||
|
}
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ public:
|
|||||||
|
|
||||||
virtual RifSummaryReaderInterface* summaryReader() override;
|
virtual RifSummaryReaderInterface* summaryReader() override;
|
||||||
|
|
||||||
|
virtual QString errorMessagesFromReader() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cvf::ref<RifSummaryReaderInterface> m_summeryReader;
|
cvf::ref<RifSummaryReaderInterface> m_summeryReader;
|
||||||
|
QString m_errorText;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ public:
|
|||||||
|
|
||||||
virtual void createSummaryReaderInterface() = 0;
|
virtual void createSummaryReaderInterface() = 0;
|
||||||
virtual RifSummaryReaderInterface* summaryReader() = 0;
|
virtual RifSummaryReaderInterface* summaryReader() = 0;
|
||||||
|
virtual QString errorMessagesFromReader() { return QString(); }
|
||||||
|
|
||||||
virtual void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) = 0;
|
virtual void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -736,7 +736,7 @@ TEST(RifKeywordBasedRsmspecParserTest, TestTimeSteps)
|
|||||||
|
|
||||||
RifColumnBasedUserData columnBasedUserdata;
|
RifColumnBasedUserData columnBasedUserdata;
|
||||||
|
|
||||||
columnBasedUserdata.parse(data, "", "");
|
columnBasedUserdata.parse(data);
|
||||||
std::vector<time_t> timeSteps = columnBasedUserdata.timeSteps(address);
|
std::vector<time_t> timeSteps = columnBasedUserdata.timeSteps(address);
|
||||||
|
|
||||||
for (auto t : timeSteps)
|
for (auto t : timeSteps)
|
||||||
|
|||||||
Reference in New Issue
Block a user