#2066 Observed Data : Improve error reporting

This commit is contained in:
Magne Sjaastad
2017-11-03 08:11:27 +01:00
parent ea53018f54
commit 9b7cfdd913
12 changed files with 71 additions and 16 deletions

View File

@@ -32,6 +32,7 @@
#include <QAction>
#include <QFileDialog>
#include <QMessageBox>
CAF_CMD_SOURCE_INIT(RicImportObservedDataFeature, "RicImportObservedDataFeature");
@@ -61,9 +62,29 @@ void RicImportObservedDataFeature::selectObservedDataFileInDialog()
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
if (!observedDataCollection) return;
QString aggregatedErrorStrings;
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();
RimProject* proj = app->project();
@@ -109,7 +130,7 @@ bool RicImportObservedDataFeature::createAndAddObservedDataFromFile(const QStrin
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
if (!observedDataCollection) return false;
RimObservedData* newObservedData = observedDataCollection->createAndAddObservedDataFromFileName(fileName);
RimObservedData* newObservedData = observedDataCollection->createAndAddObservedDataFromFileName(fileName, errorText);
RiaApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem(newObservedData);

View File

@@ -40,5 +40,5 @@ private:
virtual void onActionTriggered(bool isChecked) override;
virtual void setupActionLook(QAction* actionToSetup) override;
static bool createAndAddObservedDataFromFile(const QString& fileName);
static bool createAndAddObservedDataFromFile(const QString& fileName, QString* errorText = nullptr);
};

View File

@@ -51,14 +51,14 @@ RifColumnBasedUserData::~RifColumnBasedUserData()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifColumnBasedUserData::parse(const QString& data)
bool RifColumnBasedUserData::parse(const QString& data, QString* errorText)
{
m_allResultAddresses.clear();
m_timeSteps.clear();
m_mapFromAddressToTimeStepIndex.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)
{
RiaLogging::error(QString("Failed to parse file"));

View File

@@ -40,7 +40,7 @@ public:
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;

View File

@@ -33,7 +33,8 @@
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifColumnBasedUserDataParser::RifColumnBasedUserDataParser(const QString& data)
RifColumnBasedUserDataParser::RifColumnBasedUserDataParser(const QString& data, QString* errorText)
: m_errorText(errorText)
{
parseTableData(data);
}
@@ -70,7 +71,18 @@ void RifColumnBasedUserDataParser::parseTableData(const QString& data)
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();
int columnCount = static_cast<int>(columnInfos.size());
if (columnCount == 0) break;

View File

@@ -21,6 +21,7 @@
#include "RifEclipseSummaryAddress.h"
#include <QString>
#include <QPointer>
#include <vector>
@@ -33,7 +34,7 @@ class TableData;
class RifColumnBasedUserDataParser
{
public:
RifColumnBasedUserDataParser(const QString& data);
RifColumnBasedUserDataParser(const QString& data, QString* errorText = nullptr);
const std::vector<TableData>& tableData() const;
const ColumnInfo* columnInfo(size_t tableIndex, size_t columnIndex) const;
@@ -42,5 +43,6 @@ private:
void parseTableData(const QString& data);
private:
std::vector<TableData> m_tableDatas;
std::vector<TableData> m_tableDatas;
QString* m_errorText;
};

View File

@@ -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;
@@ -84,7 +84,10 @@ RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName
QFile file(fileName);
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;
}
@@ -118,6 +121,11 @@ RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName
observedData->updateMetaData();
observedData->updateOptionSensitivity();
if (errorText && !observedData->errorMessagesFromReader().isEmpty())
{
errorText->append(observedData->errorMessagesFromReader());
}
RiuMainPlotWindow* mainPlotWindow = RiaApplication::instance()->getOrCreateAndShowMainPlotWindow();
if (mainPlotWindow)
{

View File

@@ -37,7 +37,7 @@ public:
void removeObservedData(RimObservedData* observedData);
void addObservedData(RimObservedData* observedData);
RimObservedData* createAndAddObservedDataFromFileName(const QString& fileName);
RimObservedData* createAndAddObservedDataFromFileName(const QString& fileName, QString* errorText = nullptr);
std::vector<RimSummaryCase*> allObservedData();
private:

View File

@@ -82,7 +82,7 @@ void RimObservedEclipseUserData::createSummaryReaderInterface()
else
{
RifColumnBasedUserData* columnBaseUserData = new RifColumnBasedUserData();
if (columnBaseUserData->parse(fileContents))
if (columnBaseUserData->parse(fileContents, &m_errorText))
{
m_summeryReader = columnBaseUserData;
}
@@ -101,3 +101,11 @@ RifSummaryReaderInterface* RimObservedEclipseUserData::summaryReader()
{
return m_summeryReader.p();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimObservedEclipseUserData::errorMessagesFromReader()
{
return m_errorText;
}

View File

@@ -40,6 +40,9 @@ public:
virtual RifSummaryReaderInterface* summaryReader() override;
virtual QString errorMessagesFromReader() override;
private:
cvf::ref<RifSummaryReaderInterface> m_summeryReader;
QString m_errorText;
};

View File

@@ -44,6 +44,7 @@ public:
virtual void createSummaryReaderInterface() = 0;
virtual RifSummaryReaderInterface* summaryReader() = 0;
virtual QString errorMessagesFromReader() { return QString(); }
virtual void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) = 0;

View File

@@ -736,7 +736,7 @@ TEST(RifKeywordBasedRsmspecParserTest, TestTimeSteps)
RifColumnBasedUserData columnBasedUserdata;
columnBasedUserdata.parse(data, "", "");
columnBasedUserdata.parse(data);
std::vector<time_t> timeSteps = columnBasedUserdata.timeSteps(address);
for (auto t : timeSteps)