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; RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
if (!observedDataCollection) return; if (!observedDataCollection) return;
QString aggregatedErrorStrings; RimObservedData* observedData = nullptr;
for (const QString& fileName : fileNames) for (const QString& fileName : fileNames)
{ {
QString s; bool retryImport = false;
RicImportObservedDataFeature::createAndAddObservedDataFromFile(fileName, &s);
if (!s.isEmpty()) do
{ {
aggregatedErrorStrings += fileName; QString errorText;
aggregatedErrorStrings += "\n";
aggregatedErrorStrings += s; if (fileName.endsWith(".rsm", Qt::CaseInsensitive))
aggregatedErrorStrings += "\n"; {
aggregatedErrorStrings += "\n"; 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 (!errorText.isEmpty())
{
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Warning);
msgBox.setText("Errors detected during import ");
msgBox.setDetailedText(errorText);
msgBox.exec();
}
} while (retryImport);
} }
if (!aggregatedErrorStrings.isEmpty()) RiaApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem(observedData);
{
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Warning);
msgBox.setText("Errors detected during import ");
msgBox.setDetailedText(aggregatedErrorStrings);
msgBox.exec();
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -118,22 +133,3 @@ void RicImportObservedDataFeature::setupActionLook(QAction* actionToSetup)
actionToSetup->setIcon(QIcon(":/Default.png")); actionToSetup->setIcon(QIcon(":/Default.png"));
actionToSetup->setText("Import Observed Time History Data"); 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 bool isCommandEnabled() override;
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, QString* errorText = nullptr);
}; };

View File

@ -77,44 +77,6 @@ void RimObservedDataCollection::addObservedData(RimObservedData* observedData)
m_observedDataArray.push_back(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; 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*/) RimObservedData* RimObservedDataCollection::createAndAddRsmObservedDataFromFile(const QString& fileName, QString* errorText /*= nullptr*/)
{ {
if (!fileExists(fileName, errorText)) return nullptr;
RimObservedData* observedData = nullptr; RimObservedData* observedData = nullptr;
RimObservedEclipseUserData* columnBasedUserData = new RimObservedEclipseUserData(); RimObservedEclipseUserData* columnBasedUserData = new RimObservedEclipseUserData();
observedData = columnBasedUserData; 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; RimObservedData* observedData = nullptr;
bool parseOk = false;
RicPasteAsciiDataToSummaryPlotFeatureUi parseOptionsUi; RicPasteAsciiDataToSummaryPlotFeatureUi parseOptionsUi;
if (useSavedFieldsValuesInDialog)
{
caf::PdmSettings::readFieldsFromApplicationStore(&parseOptionsUi);
}
parseOptionsUi.setUiModeImport(fileName); parseOptionsUi.setUiModeImport(fileName);
caf::PdmUiPropertyViewDialog propertyDialog(NULL, &parseOptionsUi, "CSV Import Options", ""); caf::PdmUiPropertyViewDialog propertyDialog(NULL, &parseOptionsUi, "CSV Import Options", "");
@ -175,35 +163,37 @@ RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile(
return nullptr; return nullptr;
} }
RimCsvUserData* columnBasedUserData = new RimCsvUserData(); caf::PdmSettings::writeFieldsToApplicationStore(&parseOptionsUi);
columnBasedUserData->setParseOptions(parseOptionsUi.parseOptions());
observedData = columnBasedUserData;
observedData->setSummaryHeaderFileName(fileName); RimCsvUserData* userData = new RimCsvUserData();
observedData->createSummaryReaderInterface(); userData->setParseOptions(parseOptionsUi.parseOptions());
observedData->updateMetaData(); userData->setSummaryHeaderFileName(fileName);
observedData->updateOptionSensitivity(); 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 else
{ {
delete columnBasedUserData; delete userData;
return nullptr; return nullptr;
} }
RiuMainPlotWindow* mainPlotWindow = RiaApplication::instance()->getOrCreateAndShowMainPlotWindow(); RiuMainPlotWindow* mainPlotWindow = RiaApplication::instance()->getOrCreateAndShowMainPlotWindow();
if (mainPlotWindow) if (mainPlotWindow)
{ {
mainPlotWindow->selectAsCurrentItem(observedData); mainPlotWindow->selectAsCurrentItem(userData);
mainPlotWindow->setExpanded(observedData); mainPlotWindow->setExpanded(userData);
} }
this->updateConnectedEditors(); this->updateConnectedEditors();

View File

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