CSV import. Reopen dialog on parse error

This commit is contained in:
Bjørn Erik Jensen 2017-12-01 12:15:30 +01:00
parent 8d7a578d6f
commit 9eb85966ed
4 changed files with 79 additions and 95 deletions

View File

@ -62,30 +62,45 @@ void RicImportObservedDataFeature::selectObservedDataFileInDialog()
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
if (!observedDataCollection) return;
QString aggregatedErrorStrings;
RimObservedData* observedData = nullptr;
for (const QString& fileName : fileNames)
{
QString s;
RicImportObservedDataFeature::createAndAddObservedDataFromFile(fileName, &s);
if (!s.isEmpty())
bool retryImport = false;
do
{
aggregatedErrorStrings += fileName;
aggregatedErrorStrings += "\n";
aggregatedErrorStrings += s;
aggregatedErrorStrings += "\n";
aggregatedErrorStrings += "\n";
QString errorText;
if (fileName.endsWith(".rsm", Qt::CaseInsensitive))
{
observedData = observedDataCollection->createAndAddRsmObservedDataFromFile(fileName, &errorText);
retryImport = false;
}
else if (fileName.endsWith(".txt", Qt::CaseInsensitive) || fileName.endsWith(".csv", Qt::CaseInsensitive))
{
bool useSavedFieldValuesInDialog = retryImport;
observedData = observedDataCollection->createAndAddCvsObservedDataFromFile(fileName, useSavedFieldValuesInDialog, &errorText);
retryImport = !errorText.isEmpty();
}
else
{
errorText = "Not able to import file. Make sure '*.rsm' is used as extension if data is in RMS format or '*.txt' or '*.csv' if data is in CSV format.";
retryImport = false;
}
if (!aggregatedErrorStrings.isEmpty())
if (!errorText.isEmpty())
{
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Warning);
msgBox.setText("Errors detected during import ");
msgBox.setDetailedText(aggregatedErrorStrings);
msgBox.setDetailedText(errorText);
msgBox.exec();
}
} while (retryImport);
}
RiaApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem(observedData);
}
//--------------------------------------------------------------------------------------------------
@ -118,22 +133,3 @@ void RicImportObservedDataFeature::setupActionLook(QAction* actionToSetup)
actionToSetup->setIcon(QIcon(":/Default.png"));
actionToSetup->setText("Import Observed Time History Data");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicImportObservedDataFeature::createAndAddObservedDataFromFile(const QString& fileName, QString* errorText)
{
RiaApplication* app = RiaApplication::instance();
RimProject* proj = app->project();
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
if (!observedDataCollection) return false;
RimObservedData* newObservedData = observedDataCollection->createAndAddObservedDataFromFileName(fileName, errorText);
RiaApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem(newObservedData);
return true;
}

View File

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

View File

@ -77,44 +77,6 @@ void RimObservedDataCollection::addObservedData(RimObservedData* observedData)
m_observedDataArray.push_back(observedData);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName(const QString& fileName, QString* errorText)
{
RimObservedData* observedData = nullptr;
{
QFile file(fileName);
if (!file.exists())
{
QString s = QString("File does not exist, %1").arg(fileName);
RiaLogging::error(s);
if (errorText) errorText->append(s);
return nullptr;
}
}
if (fileName.endsWith(".rsm", Qt::CaseInsensitive))
{
return createAndAddRsmObservedDataFromFile(fileName, errorText);
}
else if (fileName.endsWith(".txt", Qt::CaseInsensitive) || fileName.endsWith(".csv", Qt::CaseInsensitive))
{
return createAndAddCvsObservedDataFromFile(fileName, errorText);
}
else
{
if (errorText)
{
errorText->append("Not able to import file. Make sure '*.rsm' is used as extension if data is in RMS format or '*.txt' or '*.csv' if data is in CSV format.");
}
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -127,11 +89,30 @@ std::vector<RimSummaryCase*> RimObservedDataCollection::allObservedData()
return allObservedData;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimObservedDataCollection::fileExists(const QString& fileName, QString* errorText /*= nullptr*/)
{
QFile file(fileName);
if (!file.exists())
{
QString s = QString("File does not exist, %1").arg(fileName);
RiaLogging::error(s);
if (errorText) errorText->append(s);
return false;
}
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimObservedData* RimObservedDataCollection::createAndAddRsmObservedDataFromFile(const QString& fileName, QString* errorText /*= nullptr*/)
{
if (!fileExists(fileName, errorText)) return nullptr;
RimObservedData* observedData = nullptr;
RimObservedEclipseUserData* columnBasedUserData = new RimObservedEclipseUserData();
observedData = columnBasedUserData;
@ -162,11 +143,18 @@ RimObservedData* RimObservedDataCollection::createAndAddRsmObservedDataFromFile(
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile(const QString& fileName, QString* errorText /*= nullptr*/)
RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile(const QString& fileName, bool useSavedFieldsValuesInDialog, QString* errorText /*= nullptr*/)
{
if (!fileExists(fileName, errorText)) return nullptr;
RimObservedData* observedData = nullptr;
bool parseOk = false;
RicPasteAsciiDataToSummaryPlotFeatureUi parseOptionsUi;
if (useSavedFieldsValuesInDialog)
{
caf::PdmSettings::readFieldsFromApplicationStore(&parseOptionsUi);
}
parseOptionsUi.setUiModeImport(fileName);
caf::PdmUiPropertyViewDialog propertyDialog(NULL, &parseOptionsUi, "CSV Import Options", "");
@ -175,35 +163,37 @@ RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile(
return nullptr;
}
RimCsvUserData* columnBasedUserData = new RimCsvUserData();
columnBasedUserData->setParseOptions(parseOptionsUi.parseOptions());
observedData = columnBasedUserData;
caf::PdmSettings::writeFieldsToApplicationStore(&parseOptionsUi);
observedData->setSummaryHeaderFileName(fileName);
observedData->createSummaryReaderInterface();
observedData->updateMetaData();
observedData->updateOptionSensitivity();
RimCsvUserData* userData = new RimCsvUserData();
userData->setParseOptions(parseOptionsUi.parseOptions());
userData->setSummaryHeaderFileName(fileName);
userData->createSummaryReaderInterface();
userData->updateMetaData();
userData->updateOptionSensitivity();
if (errorText && !observedData->errorMessagesFromReader().isEmpty())
if (errorText && !userData->errorMessagesFromReader().isEmpty())
{
errorText->append(observedData->errorMessagesFromReader());
errorText->append(userData->errorMessagesFromReader());
}
if (observedData->summaryReader())
if (userData->summaryReader())
{
this->m_observedDataArray.push_back(observedData);
this->m_observedDataArray.push_back(userData);
observedData = userData;
parseOk = true;
}
else
{
delete columnBasedUserData;
delete userData;
return nullptr;
}
RiuMainPlotWindow* mainPlotWindow = RiaApplication::instance()->getOrCreateAndShowMainPlotWindow();
if (mainPlotWindow)
{
mainPlotWindow->selectAsCurrentItem(observedData);
mainPlotWindow->setExpanded(observedData);
mainPlotWindow->selectAsCurrentItem(userData);
mainPlotWindow->setExpanded(userData);
}
this->updateConnectedEditors();

View File

@ -38,12 +38,12 @@ public:
void removeObservedData(RimObservedData* observedData);
void addObservedData(RimObservedData* observedData);
RimObservedData* createAndAddObservedDataFromFileName(const QString& fileName, QString* errorText = nullptr);
RimObservedData* createAndAddRsmObservedDataFromFile(const QString& fileName, QString* errorText = nullptr);
RimObservedData* createAndAddCvsObservedDataFromFile(const QString& fileName, bool useSavedFieldsValuesInDialog, QString* errorText = nullptr);
std::vector<RimSummaryCase*> allObservedData();
private:
RimObservedData* createAndAddRsmObservedDataFromFile(const QString& fileName, QString* errorText = nullptr);
RimObservedData* createAndAddCvsObservedDataFromFile(const QString& fileName, QString* errorText = nullptr);
bool fileExists(const QString& fileName, QString* errorText = nullptr);
private:
caf::PdmChildArrayField<RimObservedData*> m_observedDataArray;