From aebb6ae37887d8083f5fa5aeed0580413b26a5ec Mon Sep 17 00:00:00 2001 From: Firat Yusuf Duran <uzivy@student.kit.edu> Date: Fri, 13 Sep 2024 21:56:30 +0200 Subject: [PATCH] skillID/Description to FluxioSkill conversion changed - Conversion made it's own method - Conversion only run once on addition of provider - Loading of composite skills from provider still needs to be thought out --- .../manager/SkillManagerComponentPlugin.cpp | 35 +++++++++++++------ .../manager/SkillManagerComponentPlugin.h | 2 ++ .../SkillManagerComponentPluginUser.cpp | 12 +++++++ 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp index a31c15b7c..acec36d35 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 320627aa4..c7ccdfa10 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 e5c7edd46..f948e8d51 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 -- GitLab