ProcessShue98.cc 4.35 KB
/*
 * 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:   ProcessShue98.cc
 * Author: hacene
 * 
 * Created on December 14, 2020, 3:21 PM
 */
#include <stdlib.h>
#include <string>

#include <boost/lexical_cast.hpp>

#include "DicError.hh"
#include "AMDA_exception.hh"

#include "Operation.hh"
#include "ParameterManager.hh"
#include "ProcessShue98.hh"
#include "ParameterCreatorFromExpression.hh"
//#include "Shue98.hh"

using namespace std;
using namespace boost;
using namespace log4cxx;

namespace AMDA {
    namespace Parameters {
        
ProcessShue98::ProcessShue98(Parameter &parameter, bool inGSE, const std::string& processType) : SingleParamProcess_CRTP(parameter),
        _inGSE(inGSE),_type(processType) {
        }

ProcessShue98::ProcessShue98(const ProcessShue98& pProcess,Parameter &parameter) :SingleParamProcess_CRTP(pProcess, parameter), _inGSE(pProcess._inGSE), 
        _type(pProcess._type) {
        }

ProcessShue98::~ProcessShue98() {
    	if (_inputImfParam != nullptr) {
		_inputImfParam->closeConnection(this);
	}
	if (_inputPswParam != nullptr) {
		_inputPswParam->closeConnection(this);
	}
}

  void ProcessShue98::establishConnection() {
	if (_attributList.size() != 2) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("ProcessShue98::parse require 2 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("ProcessShue98::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("ProcessShue98::parse cannot retrieve psw param")));
	}
	_inputPswParam->openConnection(this);


	SingleParamProcess::establishConnection();
  }

TimeStamp ProcessShue98::init() {

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();

	Shue98Creator lCreator(*this, *_paramInput, *lImfParamInput, *lPswParamInput, _inGSE, _type);
	_operation = lCreator.getOperation();	
	_paramData = ParamDataSPtr(_operation->getParamOutput());
	_paramData->setMinSampling(_paramInput->getMinSampling());
	return time;

            return time;
        }

unsigned int ProcessShue98::write() {
	getImfData();
	getPswData();
	return SingleParamProcess::write();
}

/*
void ProcessShue98::getImfData() {
	try {
		ParamDataIndexInfo lParamDataIndexInfo;
		lParamDataIndexInfo = _inputImfParam->getAsync(this).get();
		while ((!lParamDataIndexInfo._noMoreTimeInt && !lParamDataIndexInfo._timeIntToProcessChanged) || (lParamDataIndexInfo._nbDataToProcess > 0)) {
			reinterpret_cast<Shue98::Shue98Base*>(_operation)->pushImfData(lParamDataIndexInfo);
			if (lParamDataIndexInfo._timeIntToProcessChanged || lParamDataIndexInfo._noMoreTimeInt)
				break;
			lParamDataIndexInfo = _inputImfParam->getAsync(this).get();
		}
	}catch (...) {
		throw;
	}
}


void ProcessShue98::getPswData() {
	try {
		ParamDataIndexInfo lParamDataIndexInfo;
		lParamDataIndexInfo = _inputPswParam->getAsync(this).get();
		while ((!lParamDataIndexInfo._noMoreTimeInt && !lParamDataIndexInfo._timeIntToProcessChanged) || (lParamDataIndexInfo._nbDataToProcess > 0)) {
			reinterpret_cast<Shue98::Shue98Base*>(_operation)->pushPswData(lParamDataIndexInfo);
			if (lParamDataIndexInfo._timeIntToProcessChanged || lParamDataIndexInfo._noMoreTimeInt)
				break;
			lParamDataIndexInfo = _inputPswParam->getAsync(this).get();
		}
	}catch (...) {
		throw;
	}
		
}
 * */

ProcessShue98PosGSM::ProcessShue98PosGSM(Parameter &parameter) : ProcessShue98(parameter,false,"pos") {
}

ProcessShue98PosGSE::ProcessShue98PosGSE(Parameter &parameter) : ProcessShue98(parameter,true,"pos") {
}
    }
}