Blame view

src/ExternLib/Merge/MergeProcess.cc 2.46 KB
fbe3c2bb   Benjamin Renard   First commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
 * MergeProcess.cc
 *
 *  Created on: Dec 12, 2012
 *      Author: f.casimir
 */
#include <stdlib.h>
#include <string>

#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 &parameter)
		  : MultiParamProcess_CRTP(parameter) {
		}

		MergeProcess::MergeProcess(const MergeProcess& pProcess, Parameter &parameter)
		: MultiParamProcess_CRTP(pProcess,parameter) {
		  //Establish Connection Without Parse
		  MultiParamProcess::establishConnection();
		}

		MergeProcess::~MergeProcess() {
		}

		void MergeProcess::parse() {
			ParameterCreatorFromExpression creator(_parameter.getParameterManager());
854a7fcf   Benjamin Renard   First implementat...
42
			ParameterSPtr lParameter = creator.getOneParameterFromExpression(_parameter,_expression, isUserProcess());
fbe3c2bb   Benjamin Renard   First commit
43
44
45
46
47
48
49
			_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) {
854a7fcf   Benjamin Renard   First implementat...
50
				lParameter = creator.getOneParameterFromExpression(_parameter,param, isUserProcess());
fbe3c2bb   Benjamin Renard   First commit
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
				_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<Base::Scheduler*>(_operation);
			for ( auto lParamName : _orderParamNameList) {
				lScheduler->push_back(_paramNameList[lParamName].first->getParamData(this).get());
			}
			return timeStamp;
		}

	} /* namespace Merge */
} /* namespace AMDA */