2017-09-18 10:47:59 +02:00
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017 Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicImportObservedDataFeature.h"
#include "RiaApplication.h"
2017-09-18 14:16:35 +02:00
#include "RimObservedData.h"
2017-09-18 10:47:59 +02:00
#include "RimObservedDataCollection.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimSummaryObservedDataFile.h"
2017-10-16 13:31:06 +02:00
#include "RiuMainPlotWindow.h"
2017-09-18 14:16:35 +02:00
#include "cafSelectionManager.h"
2017-09-18 10:47:59 +02:00
#include <QAction>
#include <QFileDialog>
2017-11-03 08:11:27 +01:00
#include <QMessageBox>
2017-09-18 10:47:59 +02:00
CAF_CMD_SOURCE_INIT ( RicImportObservedDataFeature , "RicImportObservedDataFeature" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RicImportObservedDataFeature :: RicImportObservedDataFeature ()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-09-18 14:16:35 +02:00
void RicImportObservedDataFeature :: selectObservedDataFileInDialog ()
2017-09-18 10:47:59 +02:00
{
RiaApplication * app = RiaApplication :: instance ();
QString defaultDir = app -> lastUsedDialogDirectory ( "INPUT_FILES" );
2017-10-09 15:23:50 +02:00
QStringList fileNames = QFileDialog :: getOpenFileNames ( nullptr , "Import Observed Time History Data" , defaultDir , "Observed Data (*.RSM *.txt *.inc);;All Files (*.*)" );
2017-09-18 10:47:59 +02:00
if ( fileNames . isEmpty ()) return ;
// Remember the path to next time
app -> setLastUsedDialogDirectory ( "INPUT_FILES" , QFileInfo ( fileNames . last ()). absolutePath ());
RimProject * proj = app -> project ();
RimObservedDataCollection * observedDataCollection = proj -> activeOilField () ? proj -> activeOilField () -> observedDataCollection () : nullptr ;
if ( ! observedDataCollection ) return ;
2017-11-03 08:11:27 +01:00
QString aggregatedErrorStrings ;
2017-10-16 13:31:06 +02:00
for ( const QString & fileName : fileNames )
2017-09-18 10:47:59 +02:00
{
2017-11-03 08:11:27 +01:00
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 ();
2017-09-18 10:47:59 +02:00
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-09-18 14:16:35 +02:00
bool RicImportObservedDataFeature :: isCommandEnabled ()
{
std :: vector < RimObservedDataCollection *> selectionObservedDataCollection ;
caf :: SelectionManager :: instance () -> objectsByType ( & selectionObservedDataCollection );
std :: vector < RimObservedData *> selectionObservedData ;
caf :: SelectionManager :: instance () -> objectsByType ( & selectionObservedData );
return ( selectionObservedDataCollection . size () > 0 || selectionObservedData . size () > 0 );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicImportObservedDataFeature :: onActionTriggered ( bool isChecked )
{
RicImportObservedDataFeature :: selectObservedDataFileInDialog ();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-09-18 10:47:59 +02:00
void RicImportObservedDataFeature :: setupActionLook ( QAction * actionToSetup )
{
actionToSetup -> setIcon ( QIcon ( ":/Default.png" ));
2017-09-29 11:39:07 +02:00
actionToSetup -> setText ( "Import Observed Time History Data" );
2017-09-18 10:47:59 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-11-03 08:11:27 +01:00
bool RicImportObservedDataFeature :: createAndAddObservedDataFromFile ( const QString & fileName , QString * errorText )
2017-09-18 10:47:59 +02:00
{
RiaApplication * app = RiaApplication :: instance ();
RimProject * proj = app -> project ();
RimObservedDataCollection * observedDataCollection = proj -> activeOilField () ? proj -> activeOilField () -> observedDataCollection () : nullptr ;
if ( ! observedDataCollection ) return false ;
2017-11-03 08:11:27 +01:00
RimObservedData * newObservedData = observedDataCollection -> createAndAddObservedDataFromFileName ( fileName , errorText );
2017-09-18 10:47:59 +02:00
2017-10-16 13:31:06 +02:00
RiaApplication :: instance () -> getOrCreateAndShowMainPlotWindow () -> selectAsCurrentItem ( newObservedData );
2017-09-18 10:47:59 +02:00
return true ;
}