#2795 Summary Case Import: When importing grids keep going even if summary file import fails.

This commit is contained in:
Gaute Lindkvist 2018-04-24 15:55:51 +02:00
parent f456911c80
commit e953d6800c
4 changed files with 148 additions and 57 deletions

View File

@ -193,22 +193,48 @@ RicSummaryCaseRestartDialog::~RicSummaryCaseRestartDialog()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const std::pair<QString /*sum*/, QString /*grid*/>& initialFiles,
bool showApplyToAllWidget,
ImportOptions defaultSummaryImportOption,
ImportOptions defaultGridImportOption,
RicSummaryCaseRestartDialogResult *lastResult,
QWidget *parent)
RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const QString& initialSummaryFile,
const QString& initialGridFile,
bool failOnSummaryImportError,
bool showApplyToAllWidget,
ImportOptions defaultSummaryImportOption,
ImportOptions defaultGridImportOption,
RicSummaryCaseRestartDialogResult* lastResult,
QWidget* parent)
{
RicSummaryCaseRestartDialog dialog(parent);
QString initialSummaryFile = initialFiles.first;
QString initialGridFile = initialFiles.second;
bool handleSummaryFile = false;
RifRestartFileInfo currentFileInfo;
if (!initialSummaryFile.isEmpty())
{
currentFileInfo = dialog.getFileInfo(initialSummaryFile);
if (!currentFileInfo.valid())
{
if (failOnSummaryImportError)
{
return RicSummaryCaseRestartDialogResult(RicSummaryCaseRestartDialogResult::ERROR);
}
}
else
{
handleSummaryFile = true;
}
}
bool handleGridFile = !initialGridFile.isEmpty();
// If only grid file is present, return
if (initialSummaryFile.isEmpty() && !initialGridFile.isEmpty())
if (!handleSummaryFile && !initialGridFile.isEmpty())
{
return RicSummaryCaseRestartDialogResult(RicSummaryCaseRestartDialogResult::OK,
RicSummaryCaseRestartDialogResult::Status status = RicSummaryCaseRestartDialogResult::OK;
if (!initialSummaryFile.isEmpty())
{
// We were meant to have a summary file but due to an error we don't.
status = RicSummaryCaseRestartDialogResult::SUMMARY_FILE_WARNING;
}
return RicSummaryCaseRestartDialogResult(status,
defaultSummaryImportOption,
defaultGridImportOption,
{},
@ -216,11 +242,7 @@ RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const
lastResult && lastResult->applyToAll);
}
RifRestartFileInfo currentFileInfo = dialog.getFileInfo(initialSummaryFile);
if (!currentFileInfo.valid())
{
return RicSummaryCaseRestartDialogResult();
}
RifReaderEclipseSummary reader;
bool hasWarnings = false;
@ -311,6 +333,7 @@ RicSummaryCaseRestartDialogResult RicSummaryCaseRestartDialog::openDialog(const
dialog.exec();
RicSummaryCaseRestartDialogResult::Status status = RicSummaryCaseRestartDialogResult::OK;
if (dialog.result() == QDialog::Rejected)
{
status = RicSummaryCaseRestartDialogResult::CANCELLED;

View File

@ -52,7 +52,9 @@ public:
RicSummaryCaseRestartDialog(QWidget* parent);
~RicSummaryCaseRestartDialog();
static RicSummaryCaseRestartDialogResult openDialog(const std::pair<QString /*sum*/, QString /*grid*/>& initialFiles,
static RicSummaryCaseRestartDialogResult openDialog(const QString& initialSummaryFile,
const QString& initialGridFile,
bool failOnSummaryImportError,
bool showApplyToAllWidget,
ImportOptions defaultSummaryImportOption,
ImportOptions defaultGridImportOption,
@ -106,7 +108,8 @@ public:
{
OK = 0,
CANCELLED = 1,
ERROR = 2
SUMMARY_FILE_WARNING = 2,
ERROR = 3
};
RicSummaryCaseRestartDialogResult(Status _status = ERROR) :
status(_status),

View File

@ -88,10 +88,10 @@ RifSummaryCaseRestartSelector::~RifSummaryCaseRestartSelector()
//--------------------------------------------------------------------------------------------------
void RifSummaryCaseRestartSelector::determineFilesToImportFromSummaryFiles(const QStringList& initialSummaryFiles)
{
std::vector<std::pair<QString, QString>> files;
std::vector<RifSummaryCaseFileImportInfo> files;
for (QString f : initialSummaryFiles)
{
files.push_back(std::make_pair(f, ""));
files.push_back(RifSummaryCaseFileImportInfo(f, "", true));
}
determineFilesToImport(files);
}
@ -101,10 +101,10 @@ void RifSummaryCaseRestartSelector::determineFilesToImportFromSummaryFiles(const
//--------------------------------------------------------------------------------------------------
void RifSummaryCaseRestartSelector::determineFilesToImportFromGridFiles(const QStringList& initialGridFiles)
{
std::vector<std::pair<QString, QString>> files;
std::vector<RifSummaryCaseFileImportInfo> files;
for (QString f : initialGridFiles)
{
files.push_back(std::make_pair(getSummaryFileFromGridFile(f), f));
files.push_back(RifSummaryCaseFileImportInfo(getSummaryFileFromGridFile(f), f));
}
determineFilesToImport(files);
}
@ -112,7 +112,7 @@ void RifSummaryCaseRestartSelector::determineFilesToImportFromGridFiles(const QS
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifSummaryCaseRestartSelector::determineFilesToImport(const std::vector<std::pair<QString /*sum*/, QString /*grid*/>>& initialFiles)
void RifSummaryCaseRestartSelector::determineFilesToImport(const std::vector<RifSummaryCaseFileImportInfo>& initialFiles)
{
std::vector<RifSummaryCaseFileInfo> fileInfos;
if (m_showDialog)
@ -129,7 +129,7 @@ void RifSummaryCaseRestartSelector::determineFilesToImport(const std::vector<std
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifSummaryCaseRestartSelector::determineFilesToImportByAskingUser(const std::vector<std::pair<QString /*sum*/, QString /*grid*/>>& initialFiles,
void RifSummaryCaseRestartSelector::determineFilesToImportByAskingUser(const std::vector<RifSummaryCaseFileImportInfo>& initialFiles,
bool enableApplyToAllField)
{
RicSummaryCaseRestartDialogResult lastResult;
@ -138,16 +138,35 @@ void RifSummaryCaseRestartSelector::determineFilesToImportByAskingUser(const std
m_gridFiles.clear();
m_summaryFileErrors.clear();
for (const std::pair<QString, QString>& initialFile : initialFiles)
for (const RifSummaryCaseFileImportInfo& initialFile : initialFiles)
{
RicSummaryCaseRestartDialogResult result = RicSummaryCaseRestartDialog::openDialog(initialFile,
RicSummaryCaseRestartDialogResult result = RicSummaryCaseRestartDialog::openDialog(initialFile.summaryFileName(),
initialFile.gridFileName(),
initialFile.failOnSummaryFileError(),
enableApplyToAllField,
m_defaultSummaryImportMode,
m_defaultGridImportMode,
&lastResult);
switch (result.status)
lastResult = result;
if (result.status == RicSummaryCaseRestartDialogResult::CANCELLED)
{
// Cancel pressed, cancel everything and return early
m_summaryFileInfos.clear();
m_gridFiles.clear();
m_summaryFileErrors.clear();
return;
}
if (result.status == RicSummaryCaseRestartDialogResult::ERROR ||
result.status == RicSummaryCaseRestartDialogResult::SUMMARY_FILE_WARNING)
{
// A summary import failure occurred with one of the files. The others may still have worked.
m_summaryFileErrors.push_back(initialFile.summaryFileName());
}
else
{
case RicSummaryCaseRestartDialogResult::OK:
for (const QString& file : result.summaryFiles)
{
RifSummaryCaseFileInfo fi(file, result.summaryImportOption == RicSummaryCaseRestartDialog::IMPORT_ALL);
@ -156,24 +175,15 @@ void RifSummaryCaseRestartSelector::determineFilesToImportByAskingUser(const std
m_summaryFileInfos.push_back(fi);
}
}
lastResult = result;
}
if (result.status == RicSummaryCaseRestartDialogResult::OK ||
result.status == RicSummaryCaseRestartDialogResult::SUMMARY_FILE_WARNING)
{
for (const QString& gridFile : result.gridFiles)
{
m_gridFiles.push_back(gridFile);
}
break;
case RicSummaryCaseRestartDialogResult::ERROR:
{
// An error occurred with one of the files. The others may still have worked.
m_summaryFileErrors.push_back(initialFile.first);
break;
}
case RicSummaryCaseRestartDialogResult::CANCELLED:
// Cancel pressed, cancel everything
m_summaryFileInfos.clear();
m_gridFiles.clear();
m_summaryFileErrors.clear();
}
}
}
@ -181,7 +191,7 @@ void RifSummaryCaseRestartSelector::determineFilesToImportByAskingUser(const std
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifSummaryCaseRestartSelector::determineFilesToImportUsingPrefs(const std::vector<std::pair<QString /*sum*/, QString /*grid*/>>& initialFiles)
void RifSummaryCaseRestartSelector::determineFilesToImportUsingPrefs(const std::vector<RifSummaryCaseFileImportInfo>& initialFiles)
{
RicSummaryCaseRestartDialogResult lastResult;
@ -189,10 +199,10 @@ void RifSummaryCaseRestartSelector::determineFilesToImportUsingPrefs(const std::
m_gridFiles.clear();
m_summaryFileErrors.clear();
for (const std::pair<QString, QString>& initialFile : initialFiles)
for (const RifSummaryCaseFileImportInfo& initialFile : initialFiles)
{
QString initialSummaryFile = RiaFilePathTools::toInternalSeparator(initialFile.first);
QString initialGridFile = RiaFilePathTools::toInternalSeparator(initialFile.second);
QString initialSummaryFile = RiaFilePathTools::toInternalSeparator(initialFile.summaryFileName());
QString initialGridFile = RiaFilePathTools::toInternalSeparator(initialFile.gridFileName());
bool handleSummaryFile = false;
bool handleGridFile = !initialGridFile.isEmpty();
@ -203,6 +213,10 @@ void RifSummaryCaseRestartSelector::determineFilesToImportUsingPrefs(const std::
if (!fileInfo.valid())
{
m_summaryFileErrors.push_back(initialSummaryFile);
if (initialFile.failOnSummaryFileError())
{
handleGridFile = false;
}
}
else
{
@ -340,3 +354,39 @@ QString RifSummaryCaseRestartSelector::getSummaryFileFromGridFile(const QString&
}
return "";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifSummaryCaseFileImportInfo::RifSummaryCaseFileImportInfo(const QString& summaryFileName,
const QString& gridFileName,
bool failOnSummaryFileImportError /*= false*/)
: m_summaryFileName(summaryFileName)
, m_gridFileName(gridFileName)
, m_failOnSummaryFileImportError(failOnSummaryFileImportError)
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifSummaryCaseFileImportInfo::failOnSummaryFileError() const
{
return m_failOnSummaryFileImportError;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const QString& RifSummaryCaseFileImportInfo::summaryFileName() const
{
return m_summaryFileName;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const QString& RifSummaryCaseFileImportInfo::gridFileName() const
{
return m_gridFileName;
}

View File

@ -26,10 +26,9 @@
#include <string>
#include <vector>
#include <map>
class RifSummaryCaseFileInfo;
class RifSummaryCaseFileImportInfo;
//==================================================================================================
//
@ -56,19 +55,17 @@ public:
static QString getSummaryFileFromGridFile(const QString& gridFile);
private:
void determineFilesToImport(const std::vector<std::pair<QString /*sum*/, QString /*grid*/>>& initialFiles);
void determineFilesToImport(const std::vector<RifSummaryCaseFileImportInfo>& initialFiles);
void determineFilesToImportByAskingUser(const std::vector<RifSummaryCaseFileImportInfo>& initialFiles, bool enableApplyToAllField);
void determineFilesToImportUsingPrefs(const std::vector<RifSummaryCaseFileImportInfo>& initialFiles);
void determineFilesToImportByAskingUser(const std::vector<std::pair<QString /*sum*/, QString /*grid*/>>& initialFiles,
bool enableApplyToAllField);
void determineFilesToImportUsingPrefs(const std::vector<std::pair<QString /*sum*/, QString /*grid*/>>& initialFiles);
bool m_showDialog;
RicSummaryCaseRestartDialog::ImportOptions m_defaultSummaryImportMode;
RicSummaryCaseRestartDialog::ImportOptions m_defaultGridImportMode;
bool m_showDialog;
RicSummaryCaseRestartDialog::ImportOptions m_defaultSummaryImportMode;
RicSummaryCaseRestartDialog::ImportOptions m_defaultGridImportMode;
std::vector<RifSummaryCaseFileInfo> m_summaryFileInfos;
QStringList m_gridFiles;
QStringList m_summaryFileErrors;
std::vector<RifSummaryCaseFileInfo> m_summaryFileInfos;
QStringList m_gridFiles;
QStringList m_summaryFileErrors;
};
//==================================================================================================
@ -86,3 +83,21 @@ public:
bool operator<(const RifSummaryCaseFileInfo& other) const { return fileName < other.fileName; }
bool operator==(const RifSummaryCaseFileInfo& other) const { return fileName == other.fileName; }
};
//==================================================================================================
///
//==================================================================================================
class RifSummaryCaseFileImportInfo
{
public:
RifSummaryCaseFileImportInfo(const QString& summaryFileName, const QString& gridFileName, bool failOnSummaryFileImportError = false);
const QString& summaryFileName() const;
const QString& gridFileName() const;
bool failOnSummaryFileError() const;
private:
QString m_summaryFileName;
QString m_gridFileName;
bool m_failOnSummaryFileImportError;
};