SkillStatusUpdate.cpp
Go to the documentation of this file.
1#include "SkillStatusUpdate.h"
2#include <optional>
4
6
7namespace armarx
8{
9 namespace skills
10 {
27
30 {
31 switch (d)
32 {
39 }
40 throw error::SkillException(__PRETTY_FUNCTION__, "Should not happen!");
41 }
42
45 {
46 // if both are equal
47 if (t1 == t2)
48 {
49 return t1;
50 }
51
52 // if one is failed (most unspecific result)
54 {
56 }
57
58 // else one must be aborted and the other one must be succeeded
60 }
61
65 {
66 // if both are equal
67 if (t1 == t2)
68 {
69 return t1;
70 }
71
72 // if one is failed (most unspecific result)
75 {
77 }
78
79 // if none is failed and one is aborted (second most unspecific result)
82 {
84 }
85
86 // else one must be running and the other one must be succeeded
88 }
89
90 void
91 toIce(core::dto::Execution::Status& ret, const SkillStatus& status)
92 {
93 switch (status)
94 {
96 ret = core::dto::Execution::Status::Constructing;
97 return;
99 ret = core::dto::Execution::Status::Initializing;
100 return;
102 ret = core::dto::Execution::Status::Preparing;
103 return;
105 ret = core::dto::Execution::Status::Running;
106 return;
108 ret = core::dto::Execution::Status::Failed;
109 return;
111 ret = core::dto::Execution::Status::Succeeded;
112 return;
114 ret = core::dto::Execution::Status::Aborted;
115 return;
116 }
117 throw error::SkillException(__PRETTY_FUNCTION__, "Should not happen!");
118 }
119
120 void
121 toIce(core::dto::Execution::Status& ret, const ActiveOrTerminatedSkillStatus& status)
122 {
123 switch (status)
124 {
126 ret = core::dto::Execution::Status::Running;
127 return;
129 ret = core::dto::Execution::Status::Failed;
130 return;
132 ret = core::dto::Execution::Status::Succeeded;
133 return;
135 ret = core::dto::Execution::Status::Aborted;
136 return;
137 }
138 throw error::SkillException(__PRETTY_FUNCTION__, "Should not happen!");
139 }
140
141 void
142 toIce(core::dto::Execution::Status& ret, const TerminatedSkillStatus& status)
143 {
144 switch (status)
145 {
147 ret = core::dto::Execution::Status::Failed;
148 return;
150 ret = core::dto::Execution::Status::Succeeded;
151 return;
153 ret = core::dto::Execution::Status::Aborted;
154 return;
155 }
156 throw error::SkillException(__PRETTY_FUNCTION__, "Should not happen!");
157 }
158
159 void
160 fromIce(const core::dto::Execution::Status& status, TerminatedSkillStatus& ret)
161 {
162 switch (status)
163 {
164 case core::dto::Execution::Status::Constructing:
165 [[fallthrough]];
166 case core::dto::Execution::Status::Initializing:
167 [[fallthrough]];
168 case core::dto::Execution::Status::Preparing:
169 [[fallthrough]];
170 case core::dto::Execution::Status::Running:
171 break;
172 case core::dto::Execution::Status::Failed:
174 return;
175 case core::dto::Execution::Status::Succeeded:
177 return;
178 case core::dto::Execution::Status::Aborted:
180 return;
181 }
183 __PRETTY_FUNCTION__,
184 "You entered an invalid execution status type to convert to a terminating status.");
185 }
186
187 void
188 fromIce(const core::dto::Execution::Status& status, ActiveOrTerminatedSkillStatus& ret)
189 {
190 switch (status)
191 {
192 case core::dto::Execution::Status::Constructing:
193 [[fallthrough]];
194 case core::dto::Execution::Status::Initializing:
195 [[fallthrough]];
196 case core::dto::Execution::Status::Preparing:
197 break;
198 case core::dto::Execution::Status::Running:
200 return;
201 case core::dto::Execution::Status::Failed:
203 return;
204 case core::dto::Execution::Status::Succeeded:
206 return;
207 case core::dto::Execution::Status::Aborted:
209 return;
210 }
212 __PRETTY_FUNCTION__,
213 "You entered an invalid execution status type to convert to a terminating status.");
214 }
215
216 void
217 fromIce(const core::dto::Execution::Status& status, SkillStatus& ret)
218 {
219 switch (status)
220 {
221 case core::dto::Execution::Status::Constructing:
223 return;
224 case core::dto::Execution::Status::Initializing:
226 return;
227 case core::dto::Execution::Status::Preparing:
229 return;
230 case core::dto::Execution::Status::Running:
232 return;
233 case core::dto::Execution::Status::Failed:
235 return;
236 case core::dto::Execution::Status::Succeeded:
238 return;
239 case core::dto::Execution::Status::Aborted:
241 return;
242 }
243 throw error::SkillException(__PRETTY_FUNCTION__, "Should not happen!");
244 }
245
246 manager::dto::SkillStatusUpdate
248 {
249 manager::dto::SkillStatusUpdate ret;
250 ret.executionId.skillId = executionId.skillId.toManagerIce();
251 ret.executionId.executorName = executionId.executorName;
252 armarx::core::time::toIce(ret.executionId.executionStartedTime,
253 executionId.executionStartedTime);
255 ret.callbackInterface = callbackInterface;
257 return ret;
258 }
259
260 provider::dto::SkillStatusUpdate
262 {
263 provider::dto::SkillStatusUpdate ret;
264 ret.executionId.skillId = executionId.skillId.toProviderIce();
265 ret.executionId.executorName = executionId.executorName;
266 armarx::core::time::toIce(ret.executionId.executionStartedTime,
267 executionId.executionStartedTime);
269 ret.callbackInterface = callbackInterface;
271 return ret;
272 }
273
274 manager::dto::SkillStatusUpdate
276 {
277 manager::dto::SkillStatusUpdate ret = SkillStatusUpdateBase::toManagerIce();
278 skills::toIce(ret.status, status);
279 return ret;
280 }
281
282 provider::dto::SkillStatusUpdate
284 {
285 provider::dto::SkillStatusUpdate ret = SkillStatusUpdateBase::toProviderIce();
286 skills::toIce(ret.status, status);
287 return ret;
288 }
289
290 manager::dto::SkillStatusUpdate
292 {
293 manager::dto::SkillStatusUpdate ret = SkillStatusUpdateBase::toManagerIce();
294 skills::toIce(ret.status, status);
295 return ret;
296 }
297
298 provider::dto::SkillStatusUpdate
300 {
301 provider::dto::SkillStatusUpdate ret = SkillStatusUpdateBase::toProviderIce();
302 skills::toIce(ret.status, status);
303 return ret;
304 }
305
306 manager::dto::SkillStatusUpdate
308 {
309 manager::dto::SkillStatusUpdate ret = SkillStatusUpdateBase::toManagerIce();
310 skills::toIce(ret.status, status);
311 return ret;
312 }
313
314 provider::dto::SkillStatusUpdate
316 {
317 provider::dto::SkillStatusUpdate ret = SkillStatusUpdateBase::toProviderIce();
318 skills::toIce(ret.status, status);
319 return ret;
320 }
321
322 template <class BoT, class DtoT>
323 static void
324 setResultFromIce(BoT& bo, const DtoT& dto)
325 {
326 if (dto.result)
327 {
328 bo.result = aron::make_dict(dto.result);
329 }
330 }
331
332 TerminatedSkillStatusUpdate
333 TerminatedSkillStatusUpdate::FromIce(const manager::dto::SkillStatusUpdate& update)
334 {
336 {.executionId = skills::SkillExecutionID::FromIce(update.executionId),
337 .parameters = armarx::aron::data::Dict::FromAronDictDTO(update.parameters),
338 .callbackInterface = update.callbackInterface}};
339 skills::fromIce(update.status, ret.status);
340 setResultFromIce(ret, update);
341 return ret;
342 }
343
345 TerminatedSkillStatusUpdate::FromIce(const provider::dto::SkillStatusUpdate& update,
346 const std::optional<skills::ProviderID>& providerId)
347 {
349 {.executionId = skills::SkillExecutionID::FromIce(update.executionId, providerId),
350 .parameters = armarx::aron::data::Dict::FromAronDictDTO(update.parameters),
351 .callbackInterface = update.callbackInterface}};
352 skills::fromIce(update.status, ret.status);
353 setResultFromIce(ret, update);
354 return ret;
355 }
356
358 SkillStatusUpdate::FromIce(const manager::dto::SkillStatusUpdate& update)
359 {
361 .executionId = skills::SkillExecutionID::FromIce(update.executionId),
362 .parameters = armarx::aron::data::Dict::FromAronDictDTO(update.parameters),
363 .callbackInterface = update.callbackInterface,
364 }};
365 skills::fromIce(update.status, ret.status);
366 setResultFromIce(ret, update);
367 return ret;
368 }
369
371 SkillStatusUpdate::FromIce(const provider::dto::SkillStatusUpdate& update,
372 const std::optional<skills::ProviderID>& providerId)
373 {
375 {.executionId = skills::SkillExecutionID::FromIce(update.executionId, providerId),
376 .parameters = armarx::aron::data::Dict::FromAronDictDTO(update.parameters),
377 .callbackInterface = update.callbackInterface,
378 .result = armarx::aron::data::Dict::FromAronDictDTO(update.result)}};
379 skills::fromIce(update.status, ret.status);
380 setResultFromIce(ret, update);
381 return ret;
382 }
383
385 ActiveOrTerminatedSkillStatusUpdate::FromIce(const manager::dto::SkillStatusUpdate& update)
386 {
388 {.executionId = skills::SkillExecutionID::FromIce(update.executionId),
389 .parameters = armarx::aron::data::Dict::FromAronDictDTO(update.parameters),
390 .callbackInterface = update.callbackInterface}};
391 skills::fromIce(update.status, ret.status);
392 setResultFromIce(ret, update);
393 return ret;
394 }
395
398 const provider::dto::SkillStatusUpdate& update,
399 const std::optional<skills::ProviderID>& providerId)
400 {
402 {.executionId = skills::SkillExecutionID::FromIce(update.executionId, providerId),
403 .parameters = armarx::aron::data::Dict::FromAronDictDTO(update.parameters),
404 .callbackInterface = update.callbackInterface}};
405 skills::fromIce(update.status, ret.status);
406 setResultFromIce(ret, update);
407 return ret;
408 }
409
410 bool
412 {
414 {
415 return true;
416 }
418 {
419 return true;
420 }
421 if (!hasBeenPrepared() and o.hasBeenPrepared())
422 {
423 return true;
424 }
425 if (!hasBeenRunning() and o.hasBeenRunning())
426 {
427 return true;
428 }
430 {
431 return true;
432 }
433 return false;
434 }
435
436 bool
438 {
439 if (status == o.status)
440 {
441 return true;
442 }
443 return *this < o;
444 }
445
446 bool
451
452 bool
457
458 bool
463
464 bool
469
470 bool
476
477 bool
482
483 bool
490
491 bool
496
497 bool
499 {
500 return true;
501 }
502
503 bool
508
509 bool
511 const std::optional<armarx::skills::TerminatedSkillStatusUpdate>& update)
512 {
513 if (not update.has_value())
514 {
515 ARMARX_VERBOSE << "No skill termination update available.";
516 return true;
517 }
518
519 if (not update->hasBeenSucceeded())
520 {
521 ARMARX_VERBOSE << "Skill execution failed.";
522 return true;
523 }
524
525 return false;
526 }
527
528 bool
530 const std::optional<armarx::skills::TerminatedSkillStatusUpdate>& update)
531 {
532 if (not update.has_value())
533 {
534 ARMARX_VERBOSE << "No skill termination update available.";
535 return false;
536 }
537
538 if (not update->hasBeenSucceeded())
539 {
540 ARMARX_VERBOSE << "Skill execution failed.";
541 return false;
542 }
543
544 return true;
545 }
546 } // namespace skills
547} // namespace armarx
static data::dto::DictPtr ToAronDictDTO(const PointerType &navigator)
Definition Dict.cpp:140
static PointerType FromAronDictDTO(const data::dto::DictPtr &aron)
Definition Dict.cpp:130
A base class for skill exceptions.
Definition Exception.h:35
#define ARMARX_VERBOSE
The logging level for verbose information.
Definition Logging.h:187
aron::data::DictPtr make_dict(_Args &&... args)
Definition Dict.h:107
void toIce(dto::ClockType::ClockTypeEnum &dto, const ClockType &bo)
This file is part of ArmarX.
bool skillExecutionSucceeded(const std::optional< armarx::skills::TerminatedSkillStatusUpdate > &update)
bool skillExecutionFailed(const std::optional< armarx::skills::TerminatedSkillStatusUpdate > &update)
void fromIce(const core::dto::Execution::Status &status, TerminatedSkillStatus &ret)
SkillStatus toSkillStatus(const ActiveOrTerminatedSkillStatus &d)
void toIce(core::dto::Execution::Status &ret, const SkillStatus &status)
TerminatedSkillStatus mergeSkillStatuseses(const TerminatedSkillStatus t1, const TerminatedSkillStatus t2)
This file offers overloads of toIce() and fromIce() functions for STL container types.
manager::dto::SkillStatusUpdate toManagerIce() const
provider::dto::SkillStatusUpdate toProviderIce() const
static ActiveOrTerminatedSkillStatusUpdate FromIce(const provider::dto::SkillStatusUpdate &update, const std::optional< skills::ProviderID > &providerId=std::nullopt)
static SkillExecutionID FromIce(const skills::manager::dto::SkillExecutionID &)
callback::dti::SkillProviderCallbackInterfacePrx callbackInterface
manager::dto::SkillStatusUpdate toManagerIce() const
provider::dto::SkillStatusUpdate toProviderIce() const
static SkillStatusUpdate FromIce(const provider::dto::SkillStatusUpdate &update, const std::optional< skills::ProviderID > &providerId=std::nullopt)
bool operator<=(const SkillStatusUpdate &o) const
manager::dto::SkillStatusUpdate toManagerIce() const
provider::dto::SkillStatusUpdate toProviderIce() const
bool operator<(const SkillStatusUpdate &o) const
static TerminatedSkillStatusUpdate FromIce(const provider::dto::SkillStatusUpdate &update, const std::optional< skills::ProviderID > &providerId=std::nullopt)
manager::dto::SkillStatusUpdate toManagerIce() const
provider::dto::SkillStatusUpdate toProviderIce() const