/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /* * File: ProcessShue.cpp * Author: hacene * * Created on December 31, 2020, 3:42 PM */ #include #include #include #include "DicError.hh" #include "AMDA_exception.hh" #include "Operation.hh" #include "ParameterManager.hh" #include "ParamMgr.hh" #include "ParameterCreatorFromExpression.hh" #include "ProcessShue.hh" using namespace std; using namespace boost; using namespace log4cxx; namespace AMDA { namespace Parameters { ProcessShue::ProcessShue(Parameter ¶meter) : SingleParamProcess_CRTP(parameter) { } ProcessShue::ProcessShue(const ProcessShue& pProcess, Parameter ¶meter): SingleParamProcess_CRTP(pProcess, parameter) { } ProcessShue::~ProcessShue() { if (_inputImfParam != nullptr) { _inputImfParam->closeConnection(this); } if (_inputPswParam != nullptr) { _inputPswParam->closeConnection(this); } } void ProcessShue::establishConnection(){ if (_attributList.size() < 2) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("ProcessShue::parse require 3 attributes'"))); } //Imf parameter _inputImfParam = _parameter.getParameterManager().getParameter(_attributList[0]); if (_inputImfParam == nullptr) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("ProcessShue::parse cannot retrieve imf param"))); } _inputImfParam->openConnection(this); //Psw parameter _inputPswParam = _parameter.getParameterManager().getParameter(_attributList[1]); if (_inputPswParam == nullptr) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("ProcessShue::parse cannot retrieve psw param"))); } _inputPswParam->openConnection(this); SingleParamProcess::establishConnection(); } TimeStamp ProcessShue::init() { _model98 = true; if (_attributList.size() > 2 && _attributList[2] == "shue97") _model98 = false; _inGSE = true; if (_attributList.size() > 3 && _attributList[3] == "GSM") _inGSE = false; if (_attributList.size() > 4) _type= _attributList[4]; TimeStamp time = _parameterInput->init( this, _timeIntervalList); _inputImfParam->init( this, _timeIntervalList); ParamData* lImfParamInput = _inputImfParam->getParamData(this).get(); _inputPswParam->init( this, _timeIntervalList); ParamData* lPswParamInput = _inputPswParam->getParamData(this).get(); _paramInput = _parameterInput->getParamData(this).get(); ShueCreator lCreator(*this, *_paramInput, *lImfParamInput, *lPswParamInput, _inGSE,_model98, _type ); _operation = lCreator.getOperation(); _paramData = ParamDataSPtr(_operation->getParamOutput()); _paramData->setMinSampling(_paramInput->getMinSampling()); return time; } unsigned int ProcessShue::write() { getImfData(); getPswData(); return SingleParamProcess::write(); } void ProcessShue::getImfData() { try { ParamDataIndexInfo lParamDataIndexInfo; lParamDataIndexInfo = _inputImfParam->getAsync(this).get(); while ((!lParamDataIndexInfo._noMoreTimeInt && !lParamDataIndexInfo._timeIntToProcessChanged) || (lParamDataIndexInfo._nbDataToProcess > 0)) { reinterpret_cast(_operation)->pushImfData(lParamDataIndexInfo); if (lParamDataIndexInfo._timeIntToProcessChanged || lParamDataIndexInfo._noMoreTimeInt) break; lParamDataIndexInfo = _inputImfParam->getAsync(this).get(); } }catch (...) { throw; } } void ProcessShue::getPswData() { try { ParamDataIndexInfo lParamDataIndexInfo; lParamDataIndexInfo = _inputPswParam->getAsync(this).get(); while ((!lParamDataIndexInfo._noMoreTimeInt && !lParamDataIndexInfo._timeIntToProcessChanged) || (lParamDataIndexInfo._nbDataToProcess > 0)) { reinterpret_cast(_operation)->pushPswData(lParamDataIndexInfo); if (lParamDataIndexInfo._timeIntToProcessChanged || lParamDataIndexInfo._noMoreTimeInt) break; lParamDataIndexInfo = _inputPswParam->getAsync(this).get(); } }catch (...) { throw; } } } }