/* * MergeProcess.cc * * Created on: Dec 12, 2012 * Author: f.casimir */ #include #include #include "AMDA_exception.hh" #include "DicError.hh" #include "Operation.hh" #include "ParameterManager.hh" #include "MergeProcess.hh" #include "SchedulerCreator.hh" #include "ParameterCreatorFromExpression.hh" using namespace std; using namespace boost; using namespace log4cxx; using namespace AMDA::Parameters; namespace AMDA { namespace Merge { MergeProcess::MergeProcess(Parameter ¶meter) : MultiParamProcess_CRTP(parameter) { } MergeProcess::MergeProcess(const MergeProcess& pProcess, Parameter ¶meter) : MultiParamProcess_CRTP(pProcess,parameter) { //Establish Connection Without Parse MultiParamProcess::establishConnection(); } MergeProcess::~MergeProcess() { } void MergeProcess::parse() { ParameterCreatorFromExpression creator(_parameter.getParameterManager()); ParameterSPtr lParameter = creator.getOneParameterFromExpression(_parameter,_expression); _paramNameList[lParameter->getId()].first = lParameter; _orderParamNameList.push_back(lParameter->getId()); /// get other Parameter in attribute list if (_attributList.size() == 0) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("MergeProcess::parse required at least one attribute'"))); } for ( auto param : _attributList) { lParameter = creator.getOneParameterFromExpression(_parameter,param); _paramNameList[lParameter->getId()].first = lParameter; _orderParamNameList.push_back(lParameter->getId()); } } void MergeProcess::establishConnection() { parse(); MultiParamProcess::establishConnection(); } TimeStamp MergeProcess::init() { TimeStamp timeStamp = MultiParamProcess::init(); /// ParamData result Type is the same as the ParamData input ParamData* lFirstParamInput = _paramNameList[_orderParamNameList[0]].first->getParamData(this).get(); SchedulerCreator lSchedulerCreator(*this,*lFirstParamInput); _operation = lSchedulerCreator.getOperation(); _paramData = ParamDataSPtr(_operation->getParamOutput()); Base::Scheduler* lScheduler = dynamic_cast(_operation); for ( auto lParamName : _orderParamNameList) { lScheduler->push_back(_paramNameList[lParamName].first->getParamData(this).get()); } return timeStamp; } } /* namespace Merge */ } /* namespace AMDA */