diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp index a31c15b7cf991bbaa96b80ba6c4145b5e9c88dbd..acec36d35b35b958aa5d11ea13fc65b757710053 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp @@ -42,6 +42,7 @@ #include "RobotAPI/libraries/skills/core/FluxioSubSkillNode.h" #include "RobotAPI/libraries/skills/core/FluxioTypeIdentificator.h" #include "RobotAPI/libraries/skills/core/FluxioValue.h" +#include "RobotAPI/libraries/skills/core/SkillDescription.h" #include "RobotAPI/libraries/skills/core/error/FluxioErrorMessages.h" #include "RobotAPI/libraries/skills/core/error/FluxioException.h" #include "RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.h" @@ -158,6 +159,12 @@ namespace armarx::plugins << "Overwriting the old provider info."; skillProviderMap[providerInfo.providerId] = providerInfo.providerInterface; } + + for (const auto& [skillID, skillDesc] : providerInfo.providedSkills) + { + descriptionIdToFluxioSkill(skillID, skillDesc); + ARMARX_INFO << "Adding skill '" << skillID.skillName << "as FluxioSkill."; + } } void @@ -945,14 +952,16 @@ namespace armarx::plugins return generator(str); } - skills::Result<std::vector<std::experimental::observer_ptr<const skills::FluxioSkill>>, - skills::error::FluxioException> - SkillManagerComponentPlugin::getSkillList() + /** + * @brief Converts the old skill structure to the new FluxioSkill structure. + * @param skillId The id of the skill. + * @param skillDescription The description of the skill. + */ + void + SkillManagerComponentPlugin::descriptionIdToFluxioSkill( + skills::SkillID skillId, + skills::SkillDescription skillDescription) { - std::map<skills::SkillID, skills::SkillDescription> skillDescriptions = - getSkillDescriptions(); - - for (const auto& [skillId, skillDescription] : skillDescriptions) { // generate skill id (idempotent) const auto& providerId = createUuidWithString(skillId.providerId->providerName); @@ -963,7 +972,7 @@ namespace armarx::plugins if (skillsEntry != fluxioDC.skills.end()) { skillsLock.unlock(); - continue; + return; } skills::FluxioSkill s; @@ -994,7 +1003,7 @@ namespace armarx::plugins << skillId.providerId->providerName << "'. Skill: '" << s.name << " with id: '" << s.id << "' will not be added."; skillsLock.unlock(); - continue; + return; } const auto p = res.getResult(); // TODO: nullptr check s.skillProviderPtr = p; @@ -1007,7 +1016,7 @@ namespace armarx::plugins << s.id << "' will not be added."; typesLock.unlock(); skillsLock.unlock(); - continue; + return; } typesLock.unlock(); const auto& eventType = eventTypeIt->second->getMemberType("Event"); @@ -1109,8 +1118,12 @@ namespace armarx::plugins fluxioDC.skills.emplace(s.id, std::move(s)); skillsLock.unlock(); } + } - + skills::Result<std::vector<std::experimental::observer_ptr<const skills::FluxioSkill>>, + skills::error::FluxioException> + SkillManagerComponentPlugin::getSkillList() + { return {convertMapValuesToObserverVector(fluxioDC.skills)}; } diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h index 320627aa4e7c22cbfdecc8808c52a79a1d3b6884..c7ccdfa10a57b590ac9022173841b39dcc198219 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h @@ -219,6 +219,8 @@ namespace armarx::plugins const std::string& userId, const std::string& skillId); + void descriptionIdToFluxioSkill(skills::SkillID skillId, skills::SkillDescription skillDescription); + friend class armarx::SkillManagerComponentPluginUser; }; } // namespace armarx::plugins diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp index e5c7edd4644698d4727cc96aff65fe71decdc65d..f948e8d5129f539116259f4dddfecd392e3971b9 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp @@ -40,6 +40,18 @@ namespace armarx { auto i = skills::ProviderInfo::FromIce(info); this->plugin->addProvider(i); + std::optional<std::vector<skills::manager::arondto::FluxioSkill>> opt = + loadCompositeSkillsOfProvider(info.providerId.providerName); + + if (!opt.has_value()) { + ARMARX_ERROR << "Failed to load composite skills for provider " << info.providerId.providerName; + return; + } + + for (const auto& skill : opt.value()) + { + // TODO: Implement a proper way to load all skills from memory without breaking dependencies etc. + } } void