17#include <RobotAPI/interface/aron/Aron.h>
18#include <RobotAPI/interface/skills/SkillManagerInterface.h>
19#include <RobotAPI/libraries/skills/core/aron/FluxioEdge.aron.generated.h>
20#include <RobotAPI/libraries/skills/core/aron/FluxioNode.aron.generated.h>
21#include <RobotAPI/libraries/skills/core/aron/FluxioParameter.aron.generated.h>
22#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
34 std::optional<manager::dto::FluxioSkill>
39 ARMARX_WARNING <<
"SkillProvider for Skill with id " <<
id <<
" not set";
43 manager::dto::FluxioSkill ret;
53 skills::manager::dto::FluxioParameterList ret_parameters;
56 ret_parameters.push_back(parameter.toManagerIce());
58 ret.parameters = ret_parameters;
60 skills::manager::dto::FluxioNodeList ret_nodes;
61 skills::manager::dto::FluxioEdgeList ret_edges;
64 ret.nodesHasValue =
false;
65 ret.edgesHasValue =
false;
69 ret.nodesHasValue =
true;
70 ret.edgesHasValue =
true;
72 for (
const auto& [
id, nodePtr] :
nodes)
74 const auto& node = nodePtr->toManagerIce();
76 if (!node.has_value())
78 ARMARX_WARNING <<
"Node with id " <<
id <<
" could not be converted";
82 ret_nodes.push_back(node.value());
85 for (
const auto& edge :
edges)
87 const auto& edgeDTO = edge.toManagerIce();
89 if (!edgeDTO.has_value())
95 ret_edges.push_back(edgeDTO.value());
98 ret.nodes = ret_nodes;
99 ret.edges = ret_edges;
106 manager::dto::FluxioIdentificator
109 manager::dto::FluxioIdentificator ret;
117 manager::arondto::FluxioIdentificator
120 manager::arondto::FluxioIdentificator ret;
130 std::map<std::string, FluxioProvider>& providersMap,
131 std::map<std::string, FluxioProfile>& profilesMap,
132 std::map<std::string, FluxioSkill>& skillsMap,
133 std::map<std::string, aron::type::ObjectPtr>& typesMap)
137 ARMARX_WARNING <<
"Trying to update Skill with id " <<
id <<
" with Skill with id "
161 std::map<std::string, manager::dto::FluxioParameter> parameterDTOMap;
162 for (
const auto& parameter : i.parameters)
164 parameterDTOMap[parameter.id] = parameter;
168 std::list<std::string> parameterIdsToDelete;
171 const auto& paramIt = parameterDTOMap.find(
id);
172 if (paramIt == parameterDTOMap.end())
174 parameterIdsToDelete.push_back(
id);
179 for (
const std::string& paramId : parameterIdsToDelete)
181 for (
auto& [k, s] : skillsMap)
183 s.deleteParameter(paramId);
187 for (
const auto& [
id, paramDTO] : parameterDTOMap)
196 parameters[
id].updateFromIce(paramDTO, profilesMap, typesMap);
204 auto controllNodes = std::vector<manager::dto::FluxioNode>();
205 for (
const manager::dto::FluxioNode& node : i.nodes)
210 controllNodes.push_back(node);
217 nodes.emplace(n->nodeId, std::move(n));
220 for (
const manager::dto::FluxioNode& node : controllNodes)
226 nodes.emplace(n->nodeId, std::move(n));
235 for (
const manager::dto::FluxioEdge& edge : i.edges)
241 edges.push_back(e.value());
255 std::map<std::string, FluxioProvider>& providersMap,
256 std::map<std::string, FluxioProfile>& profilesMap,
257 std::map<std::string, FluxioSkill>& skillsMap,
258 std::map<std::string, aron::type::ObjectPtr>& typesMap)
262 if (!dict->fullfillsType(manager::arondto::FluxioSkill::ToAronType()))
268 const manager::arondto::FluxioSkill i = manager::arondto::FluxioSkill::FromAron(d);
272 ARMARX_WARNING <<
"Trying to update Skill with id " <<
id <<
" with Skill with id "
291 i.skillProviderId, providersMap);
296 std::map<std::string, manager::arondto::FluxioParameter> parameterDTOMap;
297 for (
const auto& parameter : i.parameters)
299 parameterDTOMap[parameter.id] = parameter;
303 std::list<std::string> parameterIdsToDelete;
306 const auto& paramIt = parameterDTOMap.find(
id);
307 if (paramIt == parameterDTOMap.end())
309 parameterIdsToDelete.push_back(
id);
314 for (
const std::string& paramId : parameterIdsToDelete)
316 for (
auto& [k, s] : skillsMap)
318 s.deleteParameter(paramId);
322 for (
const auto& [
id, paramDTO] : parameterDTOMap)
331 parameters[
id].updateFromAron(paramDTO, profilesMap, typesMap);
339 auto controllNodes = std::vector<manager::arondto::FluxioNode>();
340 for (
const manager::arondto::FluxioNode& node : i.nodes)
345 controllNodes.push_back(node);
352 nodes.emplace(n->nodeId, std::move(n));
355 for (
const manager::arondto::FluxioNode& node : controllNodes)
361 nodes.emplace(n->nodeId, std::move(n));
370 for (
const manager::arondto::FluxioEdge& edge : i.edges)
376 edges.push_back(e.value());
390 bool keepParameterNodes)
392 std::vector<std::string> nodeIdsToDelete = {};
393 for (
const auto& [nodeId, nodePtr] :
nodes)
395 if (nodePtr ==
nullptr)
408 if (parameterNodePtr ==
nullptr)
414 if (parameterNodePtr->parameterPtr ==
nullptr)
419 if (parameterNodePtr->parameterPtr->id == parameterId)
428 nodeIdsToDelete.push_back(nodeId);
432 if (!keepParameterNodes)
434 for (
const auto&
id : nodeIdsToDelete)
451 std::vector<std::string> nodeIdsToDelete = {};
452 for (
const auto& [nodeId, nodePtr] :
nodes)
454 if (nodePtr ==
nullptr)
467 if (subSkillNodePtr ==
nullptr)
473 if (subSkillNodePtr->skillPtr ==
nullptr)
479 if (subSkillNodePtr->skillPtr->id == skillId)
486 nodeIdsToDelete.push_back(nodeId);
490 for (
const auto&
id : nodeIdsToDelete)
518 std::map<std::string, FluxioSkill>& skillsMap)
520 const auto& skillIt = skillsMap.find(i.id);
522 if (skillIt == skillsMap.end())
533 std::map<std::string, FluxioSkill>& skillsMap)
535 const auto& skillIt = skillsMap.find(i.id);
537 if (skillIt == skillsMap.end())
546 std::unique_ptr<FluxioSkill>
548 std::map<std::string, FluxioProvider>& providersMap,
549 std::map<std::string, FluxioProfile>& profilesMap,
550 std::map<std::string, FluxioSkill>& skillsMap,
551 std::map<std::string, aron::type::ObjectPtr>& typesMap)
553 const auto& providerPtr =
555 if (providerPtr ==
nullptr)
557 ARMARX_WARNING <<
"Provider for Skill with id " << i.id <<
" not found";
571 ret.
parameters = std::map<std::string, FluxioParameter>();
572 ret.
nodes = std::map<const std::string, const std::unique_ptr<FluxioNode>>();
573 ret.
edges = std::list<FluxioEdge>();
575 for (
const manager::dto::FluxioParameter& parameter : i.parameters)
584 return std::make_unique<FluxioSkill>(std::move(ret));
589 auto controllNodes = std::vector<manager::dto::FluxioNode>();
590 for (
const manager::dto::FluxioNode& node : i.nodes)
595 controllNodes.push_back(node);
603 ret.
nodes.emplace(n->nodeId, std::move(n));
606 for (
const manager::dto::FluxioNode& node : controllNodes)
613 ret.
nodes.emplace(n->nodeId, std::move(n));
620 for (
const manager::dto::FluxioEdge& edge : i.edges)
626 ret.
edges.push_back(e.value());
631 return std::make_unique<FluxioSkill>(std::move(ret));
634 std::unique_ptr<FluxioSkill>
636 std::map<std::string, FluxioProvider>& providersMap,
637 std::map<std::string, FluxioProfile>& profilesMap,
638 std::map<std::string, FluxioSkill>& skillsMap,
639 std::map<std::string, aron::type::ObjectPtr>& typesMap)
642 if (!dict->fullfillsType(manager::arondto::FluxioSkill::ToAronType()))
648 const manager::arondto::FluxioSkill i = manager::arondto::FluxioSkill::FromAron(d);
650 const auto& providerPtr =
653 if (providerPtr ==
nullptr)
655 ARMARX_WARNING <<
"Provider for Skill with id " << i.id <<
" not found";
669 ret.
parameters = std::map<std::string, FluxioParameter>();
670 ret.
nodes = std::map<const std::string, const std::unique_ptr<FluxioNode>>();
671 ret.
edges = std::list<FluxioEdge>();
673 for (
const manager::arondto::FluxioParameter& parameter : i.parameters)
682 return std::make_unique<FluxioSkill>(std::move(ret));
687 auto controllNodes = std::vector<manager::arondto::FluxioNode>();
688 for (
const manager::arondto::FluxioNode& node : i.nodes)
693 controllNodes.push_back(node);
701 ret.
nodes.emplace(n->nodeId, std::move(n));
704 for (
const manager::arondto::FluxioNode& node : i.nodes)
711 ret.
nodes.emplace(n->nodeId, std::move(n));
718 for (
const manager::arondto::FluxioEdge& edge : i.edges)
724 ret.
edges.push_back(e.value());
729 return std::make_unique<FluxioSkill>(std::move(ret));
732 std::unique_ptr<FluxioNode>
734 const manager::dto::FluxioNode& i,
735 std::map<std::string, FluxioParameter>& parametersMap,
736 std::map<std::string, FluxioSkill>& skillsMap,
737 std::map<std::string, FluxioProfile>& profilesMap,
738 std::map<std::string, aron::type::ObjectPtr>& typesMap,
739 std::map<
const std::string,
const std::unique_ptr<FluxioNode>>& nodesMap)
749 return std::make_unique<FluxioParameterNode>(n.value());
752 ARMARX_WARNING <<
"ParameterNode with id " << i.nodeId <<
" could not be converted";
760 return std::make_unique<FluxioSubSkillNode>(n.value());
762 ARMARX_WARNING <<
"SubSkillNode with id " << i.nodeId <<
" could not be converted";
770 return std::make_unique<FluxioControlNode>(n.value());
772 ARMARX_WARNING <<
"controlNode with id " << i.nodeId <<
" could not be converted";
776 ARMARX_WARNING <<
"Node with id " << i.nodeId <<
" has unknown type";
780 ARMARX_INFO <<
"Node type " << i.nodeType <<
" not supported yet. Ignoring.";
786 std::unique_ptr<FluxioNode>
788 const manager::arondto::FluxioNode& i,
789 std::map<std::string, FluxioParameter>& parametersMap,
790 std::map<std::string, FluxioSkill>& skillsMap,
791 std::map<std::string, FluxioProfile>& profilesMap,
792 std::map<std::string, aron::type::ObjectPtr>& typesMap,
793 std::map<
const std::string,
const std::unique_ptr<FluxioNode>>& nodesMap)
803 return std::make_unique<FluxioParameterNode>(n.value());
806 ARMARX_WARNING <<
"ParameterNode with id " << i.nodeId <<
" could not be converted";
814 return std::make_unique<FluxioSubSkillNode>(n.value());
816 ARMARX_WARNING <<
"SubSkillNode with id " << i.nodeId <<
" could not be converted";
824 return std::make_unique<FluxioControlNode>(n.value());
826 ARMARX_WARNING <<
"controlNode with id " << i.nodeId <<
" could not be converted";
830 ARMARX_WARNING <<
"Node with id " << i.nodeId <<
" has unknown type";
834 ARMARX_INFO <<
"Node type " << i.nodeType <<
" not supported yet. Ignoring.";
840 std::optional<manager::arondto::FluxioSkill>
845 ARMARX_WARNING <<
"SkillProvider for Skill with id " <<
id <<
" not set";
849 manager::arondto::FluxioSkill ret;
859 std::vector<manager::arondto::FluxioParameter> ret_parameters;
861 for (
const auto& [
id, parameter] :
parameters)
863 ret_parameters.push_back(parameter.toAron());
865 ret.parameters = ret_parameters;
867 std::vector<manager::arondto::FluxioNode> ret_nodes;
868 std::vector<manager::arondto::FluxioEdge> ret_edges;
871 ret.nodesHasValue =
false;
872 ret.edgesHasValue =
false;
876 ret.nodesHasValue =
true;
877 ret.edgesHasValue =
true;
879 for (
const auto& [
id, nodePtr] :
nodes)
881 const auto& node = nodePtr->toAron();
883 if (!node.has_value())
885 ARMARX_WARNING <<
"Node with id " <<
id <<
" could not be converted";
889 ret_nodes.push_back(node.value());
892 for (
const auto& edge :
edges)
894 const auto& edgeDTO = edge.toAron();
896 if (!edgeDTO.has_value())
902 ret_edges.push_back(edgeDTO.value());
905 ret.nodes = ret_nodes;
906 ret.edges = ret_edges;
913 std::optional<aron::data::dto::DictPtr>
916 const std::optional<manager::arondto::FluxioSkill> ret =
toAronXml();
917 if (!ret.has_value())
std::string toDateTimeString() const
#define ARMARX_INFO
The normal logging level.
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
::IceInternal::Handle< Dict > DictPtr
std::shared_ptr< Dict > DictPtr
aron::data::DictPtr make_dict(_Args &&... args)
void toIce(dto::ClockType::ClockTypeEnum &dto, const ClockType &bo)
void fromIce(const dto::ClockType::ClockTypeEnum &dto, ClockType &bo)
This file is part of ArmarX.
FluxioNodeType FluxioNodeTypeFromString(const std::string &type)
This file offers overloads of toIce() and fromIce() functions for STL container types.
observer_ptr< _Tp > make_observer(_Tp *__p) noexcept
static std::optional< FluxioControlNode > FromIce(const manager::dto::FluxioNode &i, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, aron::type::ObjectPtr > &typesMap, std::map< const std::string, const std::unique_ptr< FluxioNode > > &nodesMap)
static std::optional< FluxioControlNode > FromAron(const manager::arondto::FluxioNode &i, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, aron::type::ObjectPtr > &typesMap, std::map< const std::string, const std::unique_ptr< FluxioNode > > &nodesMap)
std::experimental::observer_ptr< const FluxioParameter > fromParameterPtr
static std::optional< FluxioEdge > FromAron(const manager::arondto::FluxioEdge &i, const std::map< const std::string, const std::unique_ptr< FluxioNode > > &nodesMap, const std::map< std::string, FluxioParameter > ¶metersMap)
static std::optional< FluxioEdge > FromIce(const manager::dto::FluxioEdge &i, const std::map< const std::string, const std::unique_ptr< FluxioNode > > &nodesMap, const std::map< std::string, FluxioParameter > ¶metersMap)
std::experimental::observer_ptr< const FluxioParameter > toParameterPtr
std::experimental::observer_ptr< const FluxioNode > fromNodePtr
std::experimental::observer_ptr< const FluxioNode > toNodePtr
static std::optional< FluxioParameterNode > FromIce(const manager::dto::FluxioNode &i, std::map< std::string, FluxioParameter > ¶metersMap)
static std::optional< FluxioParameterNode > FromAron(const manager::arondto::FluxioNode &i, std::map< std::string, FluxioParameter > ¶metersMap)
static FluxioParameter FromIce(const manager::dto::FluxioParameter &i, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, aron::type::ObjectPtr > &typesMap)
static FluxioParameter FromAron(const manager::arondto::FluxioParameter &i, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, aron::type::ObjectPtr > &typesMap)
static std::experimental::observer_ptr< const FluxioProvider > FromFluxioIdentificatorAron(const manager::arondto::FluxioIdentificator &i, std::map< std::string, FluxioProvider > &providersMap)
static std::experimental::observer_ptr< const FluxioProvider > FromFluxioIdentificatorIce(const manager::dto::FluxioIdentificator &i, std::map< std::string, FluxioProvider > &providersMap)
manager::arondto::FluxioIdentificator toFluxioIdentificatorAron() const
FluxioSkill(const FluxioSkill &)=delete
void deleteParameter(const std::string ¶meterId)
bool updateFromAron(const aron::data::dto::DictPtr &i, std::map< std::string, FluxioProvider > &providersMap, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, FluxioSkill > &skillsMap, std::map< std::string, aron::type::ObjectPtr > &typesMap)
armarx::Duration timeout
How long (in ms) to wait for the skill to finish execution before timing out.
static std::unique_ptr< FluxioSkill > FromIce(const manager::dto::FluxioSkill &i, std::map< std::string, FluxioProvider > &providersMap, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, FluxioSkill > &skillsMap, std::map< std::string, aron::type::ObjectPtr > &typesMap)
static std::unique_ptr< FluxioSkill > FromAron(const aron::data::dto::DictPtr &d, std::map< std::string, FluxioProvider > &providersMap, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, FluxioSkill > &skillsMap, std::map< std::string, aron::type::ObjectPtr > &typesMap)
std::optional< manager::arondto::FluxioSkill > toAronXml() const
std::map< std::string, FluxioParameter > parameters
std::list< FluxioEdge > edges
void removeEdgesConnectedToParameter(const std::string ¶meterId)
bool updateFromIce(const manager::dto::FluxioSkill &i, std::map< std::string, FluxioProvider > &providersMap, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, FluxioSkill > &skillsMap, std::map< std::string, aron::type::ObjectPtr > &typesMap)
std::map< const std::string, const std::unique_ptr< FluxioNode > > nodes
static std::experimental::observer_ptr< const FluxioSkill > FromFluxioIdentificatorIce(const manager::dto::FluxioIdentificator &i, std::map< std::string, FluxioSkill > &skillsMap)
std::optional< aron::data::dto::DictPtr > toAronDTO() const
void removeSubSkillNodesAndEdges(const std::string &skillId)
static std::experimental::observer_ptr< const FluxioSkill > FromFluxioIdentificatorAron(const manager::arondto::FluxioIdentificator &i, std::map< std::string, FluxioSkill > &skillsMap)
std::optional< manager::dto::FluxioSkill > toManagerIce() const
manager::dto::FluxioIdentificator toFluxioIdentificatorIce() const
static std::unique_ptr< skills::FluxioNode > CreateNode(const manager::dto::FluxioNode &i, std::map< std::string, FluxioParameter > ¶metersMap, std::map< std::string, FluxioSkill > &skillsMap, std::map< std::string, FluxioProfile > &profilesMap, std::map< std::string, aron::type::ObjectPtr > &typesMap, std::map< const std::string, const std::unique_ptr< FluxioNode > > &nodesMap)
void removeParameterNodesAndEdges(const std::string ¶meterId, bool keepParameterNodes=false)
std::experimental::observer_ptr< const FluxioProvider > skillProviderPtr
static std::optional< FluxioSubSkillNode > FromIce(const manager::dto::FluxioNode &i, std::map< std::string, FluxioSkill > &skillsMap)
static std::optional< FluxioSubSkillNode > FromAron(const manager::arondto::FluxioNode &i, std::map< std::string, FluxioSkill > &skillsMap)