ifw-slm 0.1.2
 
Loading...
Searching...
No Matches
baseLoopActions.hpp
Go to the documentation of this file.
1
11#ifndef IFWSLM_BASE_LOOP_ACTIONS_HPP
12#define IFWSLM_BASE_LOOP_ACTIONS_HPP
13
19
20#include <rad/configurableActionGroup.hpp>
21#include <rad/application.hpp>
22#include <scxml4cpp/Context.h>
23#include <memory>
24#include <string>
25
26namespace ifw::slm {
27
30
38class BaseLoopActions : public rad::ConfigurableActionGroup {
39public:
48 BaseLoopActions(const std::string& name,
49 rad::Application& appl,
50 rad::ConfigurableActionMgr& action_mgr,
51 DataContext& data,
52 int loop_index,
53 std::shared_ptr<LoopCompletionHandler> completion_handler = nullptr);
54
55 virtual ~BaseLoopActions() = default;
56
57 void Initialize() override;
58 void Configure(const std::vector<std::string>& keys) override;
59
64 virtual void Init(scxml4cpp::Context* c);
65 virtual void Execute(scxml4cpp::Context* c);
66 virtual void Complete(scxml4cpp::Context* c);
67 virtual void Abort(scxml4cpp::Context* c);
68 virtual void InstallTimer(scxml4cpp::Context* c);
69
78 virtual bool DoExecute();
79
82
86 template<typename T>
87 T GetLoopParam(const std::string& name) const {
88 return GetLoopParamFromConfig<T>(m_data.GetConfig(), m_loop_index, name);
89 }
90
91 template<typename T>
92 T GetLoopParam(const std::string& name, const T& default_value) const {
93 return GetLoopParamFromConfig<T>(m_data.GetConfig(), m_loop_index, name, default_value);
94 }
95
96protected:
97 rad::Application& m_appl;
98 rad::ConfigurableActionMgr& m_action_mgr;
101 std::shared_ptr<LoopCompletionHandler> m_completion_handler;
102 LoopStateData m_loop_state; // Per-loop OLDB state manager
103
104 // Virtual helper methods for state transitions (can be overridden by derived classes)
105 virtual void OnLoopOpen();
106 virtual void OnLoopClose();
107 virtual void OnLoopSuspend();
108 virtual void OnCycleStart();
109 virtual void OnCycleComplete(bool success);
110 virtual void OnCycleError();
111};
112
121public:
122 BaseLoopExecuteActivity(const std::string& id,
123 rad::SMAdapter& sm,
124 DataContext& data,
125 int loop_index,
126 LoopCompletionHandler* completion_handler = nullptr);
127
128 virtual ~BaseLoopExecuteActivity() = default;
129
130 void Run() override;
131
134
148 template<typename T>
149 T GetLoopParam(const std::string& name) const {
150 return GetLoopParamFromConfig<T>(m_data.GetConfig(), m_loop_index, name);
151 }
152
156 template<typename T>
157 T GetLoopParam(const std::string& name, const T& default_value) const {
158 return GetLoopParamFromConfig<T>(m_data.GetConfig(), m_loop_index, name, default_value);
159 }
160
167 template<typename T>
168 bool ReadLoopOldb(const std::string& name, T& out) const {
169 try {
170 m_data.GetOldbInterface().GetValue<T>(GetLoopOldbKey(m_loop_index, name), out);
171 return true;
172 } catch (...) {
173 return false;
174 }
175 }
176
177protected:
186 virtual bool DoExecute() = 0;
187
188 rad::SMAdapter& m_sm;
191 LoopStateData m_loop_state; // Per-loop OLDB state manager
193
194protected:
195 log4cplus::Logger m_logger = log4cplus::Logger::getInstance(LOGGER_NAME + ".BaseLoopExecuteActivity");
196};
197
203class BaseLoopSuspendedActions : public rad::ConfigurableActionGroup {
204public:
205 BaseLoopSuspendedActions(const std::string& name,
206 rad::Application& appl,
207 rad::ConfigurableActionMgr& action_mgr,
208 DataContext& data,
209 int loop_index,
210 std::shared_ptr<LoopCompletionHandler> completion_handler = nullptr);
211
212 virtual ~BaseLoopSuspendedActions() = default;
213
214 void Initialize() override;
215 void Configure(const std::vector<std::string>& keys) override;
216
217 virtual void Execute(scxml4cpp::Context* c);
218 virtual void Complete(scxml4cpp::Context* c);
219 virtual void Abort(scxml4cpp::Context* c);
220 virtual void InstallTimer(scxml4cpp::Context* c);
221
224
225protected:
226 rad::Application& m_appl;
227 rad::ConfigurableActionMgr& m_action_mgr;
230 std::shared_ptr<LoopCompletionHandler> m_completion_handler;
231 LoopStateData m_loop_state; // Per-loop OLDB state manager
232
233 // Virtual helper methods for state transitions (can be overridden by derived classes)
234 virtual void OnLoopOpen();
235 virtual void OnLoopClose();
236 virtual void OnLoopSuspend();
237 virtual void OnCycleStart();
238 virtual void OnCycleComplete(bool success);
239 virtual void OnCycleError();
240};
241
247template<int LOOP_INDEX>
249public:
251
252 ActionsLoopSuspended(const std::string& name,
253 rad::Application& appl,
254 rad::ConfigurableActionMgr& action_mgr,
255 DataContext& data,
256 int loop_index,
257 std::shared_ptr<LoopCompletionHandler> completion_handler)
258 : base_type(name, appl, action_mgr, data, loop_index, completion_handler) {
259 RAD_TRACE(GetLogger());
260 LOG4CPLUS_INFO(GetLogger(),
261 "Creating ActionsLoop" << LOOP_INDEX << "Suspended");
262 }
263
265 RAD_TRACE(GetLogger());
266 }
267
268 void Execute(scxml4cpp::Context* c) override {
269 RAD_TRACE(GetLogger());
270 LOG4CPLUS_INFO(GetLogger(),
271 "Loop " << m_loop_index << " Suspended - Execute called");
272 base_type::Execute(c); // mark the loop SUSPENDED
273 }
274
275 void Complete(scxml4cpp::Context* c) override {
276 RAD_TRACE(GetLogger());
277 LOG4CPLUS_INFO(GetLogger(),
278 "Loop " << m_loop_index << " Suspended - Complete called");
280 }
281
282 void Abort(scxml4cpp::Context* c) override {
283 RAD_TRACE(GetLogger());
284 LOG4CPLUS_INFO(GetLogger(),
285 "Loop " << m_loop_index << " Suspended - Aborting");
287 }
288
291};
292
299class BaseLoopCloseActions : public rad::ConfigurableActionGroup {
300public:
301 BaseLoopCloseActions(const std::string& name,
302 rad::Application& appl,
303 rad::ConfigurableActionMgr& action_mgr,
304 DataContext& data,
305 int loop_index,
306 std::shared_ptr<LoopCompletionHandler> completion_handler = nullptr);
307
308 virtual ~BaseLoopCloseActions() = default;
309
310 void Initialize() override;
311 void Configure(const std::vector<std::string>& keys) override;
312
313 virtual void Execute(scxml4cpp::Context* c);
314 virtual void Complete(scxml4cpp::Context* c);
315 virtual void Abort(scxml4cpp::Context* c);
316 virtual void InstallTimer(scxml4cpp::Context* c);
317 virtual void CycleError(scxml4cpp::Context* c);
318
321
325 template<typename T>
326 T GetLoopParam(const std::string& name) const {
327 return GetLoopParamFromConfig<T>(m_data.GetConfig(), m_loop_index, name);
328 }
329
330 template<typename T>
331 T GetLoopParam(const std::string& name, const T& default_value) const {
332 return GetLoopParamFromConfig<T>(m_data.GetConfig(), m_loop_index, name, default_value);
333 }
334
335protected:
336 rad::Application& m_appl;
337 rad::ConfigurableActionMgr& m_action_mgr;
340 std::shared_ptr<LoopCompletionHandler> m_completion_handler;
341 LoopStateData m_loop_state; // Per-loop OLDB state manager
342
343 // Virtual helper methods for state transitions (can be overridden by derived classes)
344 virtual void OnLoopOpen();
345 virtual void OnLoopClose();
346 virtual void OnLoopSuspend();
347 virtual void OnCycleStart();
348 virtual void OnCycleComplete(bool success);
349 virtual void OnCycleError();
350};
351
352// Type aliases for the 9 suspended loop action classes
362
363} // namespace ifw::slm
364
365#endif // IFWSLM_BASE_LOOP_ACTIONS_HPP
Definition baseLoopActions.hpp:248
ActionsLoopSuspended(const std::string &name, rad::Application &appl, rad::ConfigurableActionMgr &action_mgr, DataContext &data, int loop_index, std::shared_ptr< LoopCompletionHandler > completion_handler)
Definition baseLoopActions.hpp:252
ActionsLoopSuspended & operator=(const ActionsLoopSuspended &)=delete
BaseLoopSuspendedActions base_type
Definition baseLoopActions.hpp:250
void Abort(scxml4cpp::Context *c) override
Definition baseLoopActions.hpp:282
ActionsLoopSuspended(const ActionsLoopSuspended &)=delete
~ActionsLoopSuspended() override
Definition baseLoopActions.hpp:264
void Complete(scxml4cpp::Context *c) override
Definition baseLoopActions.hpp:275
void Execute(scxml4cpp::Context *c) override
Definition baseLoopActions.hpp:268
virtual void Abort(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:67
rad::Application & m_appl
Definition baseLoopActions.hpp:97
T GetLoopParam(const std::string &name, const T &default_value) const
Definition baseLoopActions.hpp:92
DataContext & m_data
Definition baseLoopActions.hpp:99
int m_loop_index
Definition baseLoopActions.hpp:100
rad::ConfigurableActionMgr & m_action_mgr
Definition baseLoopActions.hpp:98
std::shared_ptr< LoopCompletionHandler > m_completion_handler
Definition baseLoopActions.hpp:101
virtual void OnLoopOpen()
Definition baseLoopActions.cpp:79
virtual ~BaseLoopActions()=default
virtual void Complete(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:61
void Configure(const std::vector< std::string > &keys) override
Definition baseLoopActions.cpp:40
BaseLoopActions(const std::string &name, rad::Application &appl, rad::ConfigurableActionMgr &action_mgr, DataContext &data, int loop_index, std::shared_ptr< LoopCompletionHandler > completion_handler=nullptr)
Definition baseLoopActions.cpp:20
virtual void OnLoopSuspend()
Definition baseLoopActions.cpp:89
virtual void Execute(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:49
BaseLoopActions & operator=(const BaseLoopActions &)=delete
virtual void OnLoopClose()
Definition baseLoopActions.cpp:84
T GetLoopParam(const std::string &name) const
Definition baseLoopActions.hpp:87
BaseLoopActions(const BaseLoopActions &)=delete
virtual void OnCycleError()
Definition baseLoopActions.cpp:102
void Initialize() override
Definition baseLoopActions.cpp:36
virtual void OnCycleComplete(bool success)
Definition baseLoopActions.cpp:98
virtual void InstallTimer(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:73
virtual bool DoExecute()
Definition baseLoopActions.cpp:54
virtual void OnCycleStart()
Definition baseLoopActions.cpp:93
LoopStateData m_loop_state
Definition baseLoopActions.hpp:102
virtual void Init(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:44
rad::Application & m_appl
Definition baseLoopActions.hpp:336
BaseLoopCloseActions & operator=(const BaseLoopCloseActions &)=delete
T GetLoopParam(const std::string &name, const T &default_value) const
Definition baseLoopActions.hpp:331
virtual void InstallTimer(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:231
BaseLoopCloseActions(const std::string &name, rad::Application &appl, rad::ConfigurableActionMgr &action_mgr, DataContext &data, int loop_index, std::shared_ptr< LoopCompletionHandler > completion_handler=nullptr)
Definition baseLoopActions.cpp:185
virtual void OnCycleComplete(bool success)
Definition baseLoopActions.cpp:257
virtual void OnLoopOpen()
Definition baseLoopActions.cpp:238
T GetLoopParam(const std::string &name) const
Definition baseLoopActions.hpp:326
virtual void CycleError(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:265
virtual void OnCycleError()
Definition baseLoopActions.cpp:261
int m_loop_index
Definition baseLoopActions.hpp:339
virtual void Complete(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:215
virtual void Abort(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:222
BaseLoopCloseActions(const BaseLoopCloseActions &)=delete
void Initialize() override
Definition baseLoopActions.cpp:201
virtual void OnLoopSuspend()
Definition baseLoopActions.cpp:248
rad::ConfigurableActionMgr & m_action_mgr
Definition baseLoopActions.hpp:337
virtual void OnCycleStart()
Definition baseLoopActions.cpp:252
void Configure(const std::vector< std::string > &keys) override
Definition baseLoopActions.cpp:205
LoopStateData m_loop_state
Definition baseLoopActions.hpp:341
DataContext & m_data
Definition baseLoopActions.hpp:338
virtual ~BaseLoopCloseActions()=default
virtual void OnLoopClose()
Definition baseLoopActions.cpp:243
std::shared_ptr< LoopCompletionHandler > m_completion_handler
Definition baseLoopActions.hpp:340
virtual void Execute(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:209
Definition baseLoopActions.hpp:120
rad::SMAdapter & m_sm
Definition baseLoopActions.hpp:188
DataContext & m_data
Definition baseLoopActions.hpp:189
virtual ~BaseLoopExecuteActivity()=default
log4cplus::Logger m_logger
Definition baseLoopActions.hpp:195
BaseLoopExecuteActivity(const BaseLoopExecuteActivity &)=delete
int m_loop_index
Definition baseLoopActions.hpp:190
LoopCompletionHandler * m_completion_handler
Definition baseLoopActions.hpp:192
bool ReadLoopOldb(const std::string &name, T &out) const
Definition baseLoopActions.hpp:168
void Run() override
Definition baseLoopActions.cpp:311
LoopStateData m_loop_state
Definition baseLoopActions.hpp:191
BaseLoopExecuteActivity & operator=(const BaseLoopExecuteActivity &)=delete
BaseLoopExecuteActivity(const std::string &id, rad::SMAdapter &sm, DataContext &data, int loop_index, LoopCompletionHandler *completion_handler=nullptr)
Definition baseLoopActions.cpp:297
T GetLoopParam(const std::string &name, const T &default_value) const
Definition baseLoopActions.hpp:157
T GetLoopParam(const std::string &name) const
Definition baseLoopActions.hpp:149
int m_loop_index
Definition baseLoopActions.hpp:229
virtual ~BaseLoopSuspendedActions()=default
virtual void OnLoopClose()
Definition baseLoopActions.cpp:161
LoopStateData m_loop_state
Definition baseLoopActions.hpp:231
std::shared_ptr< LoopCompletionHandler > m_completion_handler
Definition baseLoopActions.hpp:230
virtual void OnLoopOpen()
Definition baseLoopActions.cpp:156
rad::Application & m_appl
Definition baseLoopActions.hpp:226
virtual void InstallTimer(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:150
virtual void Execute(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:132
BaseLoopSuspendedActions & operator=(const BaseLoopSuspendedActions &)=delete
virtual void OnCycleStart()
Definition baseLoopActions.cpp:170
virtual void OnCycleComplete(bool success)
Definition baseLoopActions.cpp:175
virtual void Complete(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:139
void Initialize() override
Definition baseLoopActions.cpp:124
virtual void OnCycleError()
Definition baseLoopActions.cpp:179
BaseLoopSuspendedActions(const std::string &name, rad::Application &appl, rad::ConfigurableActionMgr &action_mgr, DataContext &data, int loop_index, std::shared_ptr< LoopCompletionHandler > completion_handler=nullptr)
Definition baseLoopActions.cpp:108
rad::ConfigurableActionMgr & m_action_mgr
Definition baseLoopActions.hpp:227
BaseLoopSuspendedActions(const BaseLoopSuspendedActions &)=delete
virtual void OnLoopSuspend()
Definition baseLoopActions.cpp:166
DataContext & m_data
Definition baseLoopActions.hpp:228
virtual void Abort(scxml4cpp::Context *c)
Definition baseLoopActions.cpp:144
void Configure(const std::vector< std::string > &keys) override
Definition baseLoopActions.cpp:128
Definition dataContext.hpp:29
KillableThreadActivity(const KillableThreadActivity &)=delete
Interface for handling loop completion events.
Definition loopCompletionHandler.hpp:32
Definition loopStateData.hpp:22
DataContext class header file.
KillableThreadActivity - a thread-based activity with timed join.
Default logger name.
LoopStateData class for managing per-loop OLDB runtime state.
Definition actionMgr.cpp:29
ActionsLoopSuspended< 3 > ActionsLoop3S
Definition baseLoopActions.hpp:355
ActionsLoopSuspended< 4 > ActionsLoop4S
Definition baseLoopActions.hpp:356
T GetLoopParamFromConfig(const rad::Config &config, int loop_index, const std::string &name)
Definition slConfig.hpp:217
ActionsLoopSuspended< 1 > ActionsLoop1S
Definition baseLoopActions.hpp:353
std::string GetLoopOldbKey(int loop_index, const std::string &param_name)
Definition oldbInterface.cpp:23
ActionsLoopSuspended< 7 > ActionsLoop7S
Definition baseLoopActions.hpp:359
ActionsLoopSuspended< 5 > ActionsLoop5S
Definition baseLoopActions.hpp:357
ActionsLoopSuspended< 6 > ActionsLoop6S
Definition baseLoopActions.hpp:358
log4cplus::Logger & GetLogger()
Definition logger.cpp:14
ActionsLoopSuspended< 9 > ActionsLoop9S
Definition baseLoopActions.hpp:361
const std::string LOGGER_NAME
Definition logger.hpp:19
ActionsLoopSuspended< 8 > ActionsLoop8S
Definition baseLoopActions.hpp:360
ActionsLoopSuspended< 2 > ActionsLoop2S
Definition baseLoopActions.hpp:354
Secondary Loop configuration constants and helper functions.