FluxioExecutor.cpp
Go to the documentation of this file.
1#include "FluxioExecutor.h"
2
3#include <memory>
4#include <mutex>
5
7
11
13
14namespace armarx::skills
15{
16 void
18 {
19 const skills::FluxioSkillStatusUpdate update = {.timestamp = armarx::DateTime::Now(),
20 .executionId = this->id,
21 .subSkillNodeId = nodeId,
22 .status = status};
23
24 std::scoped_lock statusLock(statusMutex, statusUpdatesMutex);
25 this->status = update;
26 this->statusUpdates.push_front(update);
27 }
28
30 FluxioExecutor::getPossibleInputCopy(const std::string nodeId, const std::string parameterId)
31 {
32 std::scoped_lock l(possibleInputsMutex);
33 const auto& dictIt = possibleInputs.find(nodeId);
34 if (dictIt == possibleInputs.end())
35 {
36 ARMARX_WARNING << "No possible input found for node " << nodeId;
37 return nullptr;
38 }
39 if (dictIt->second == nullptr || !dictIt->second->hasElement(parameterId))
40 {
41 ARMARX_WARNING << "No possible input found for parameter " << parameterId;
42 return nullptr;
43 }
44 const auto& res = dictIt->second->getElement(parameterId);
45 if (res == nullptr)
46 {
47 return nullptr;
48 }
49 return res->cloneAsVariant();
50 }
51
54 {
55 std::scoped_lock l(resultMutex);
56 if (result == nullptr)
57 {
58 return nullptr;
59 }
60
61 return result->clone();
62 }
63
64 std::optional<std::vector<skills::FluxioSkillStatusUpdate>>
66 {
67 return std::nullopt;
68 }
69
70 std::optional<skills::FluxioSkillStatusUpdate>
72 {
73 return status;
74 }
75
79 const FluxioParameter& parameter) const
80 {
82 armarx::aron::data::VariantPtr value = nullptr;
83 while (value == nullptr)
84 {
85 const auto& valueIt = std::find_if(parameter.values.begin(),
86 parameter.values.end(),
87 [idPtr](const FluxioValue& v)
88 { return v.profilePtr->id == idPtr->id; });
89 if (valueIt == parameter.values.end())
90 {
91 if (idPtr->parentPtr == nullptr)
92 {
93 ARMARX_WARNING << "Value for parameter " << parameter.id
94 << " not found in profile " << profilePtr->id;
95 return nullptr;
96 }
97 idPtr = idPtr->parentPtr;
98 }
99 else
100 {
101 value = valueIt->content;
102 }
103 }
104 return value->cloneAsVariant();
105 }
106} // namespace armarx::skills
static DateTime Now()
Definition DateTime.cpp:51
armarx::aron::data::DictPtr result
armarx::aron::data::VariantPtr findParameterValue(const std::experimental::observer_ptr< const FluxioProfile > profilePtr, const FluxioParameter &parameter) const
virtual armarx::aron::data::VariantPtr getPossibleInputCopy(const std::string nodeId, const std::string parameterId)
std::optional< skills::FluxioSkillStatusUpdate > status
std::optional< skills::FluxioSkillStatusUpdate > getStatus() const
virtual armarx::aron::data::DictPtr getResultsCopy()
std::list< skills::FluxioSkillStatusUpdate > statusUpdates
std::shared_mutex statusUpdatesMutex
std::map< std::string, armarx::aron::data::DictPtr > possibleInputs
virtual void setStatus(skills::SkillStatus status, const std::string &nodeId="noId")
std::shared_mutex possibleInputsMutex
virtual std::optional< std::vector< skills::FluxioSkillStatusUpdate > > getStatusUpdate()
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:193
std::shared_ptr< Dict > DictPtr
Definition Dict.h:42
std::shared_ptr< Variant > VariantPtr
This file is part of ArmarX.
std::list< FluxioValue > values