diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp index c94e2b4d33825b02d7a2271625a4fbc0aa66ba4f..1119465a14585990e083facb42e45aca521b4448 100644 --- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp +++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp @@ -247,9 +247,9 @@ namespace armarx return composedSkillCoreSegment.getSkills(); } - std::optional<std::vector<skills::manager::arondto::FluxioSkill>> SkillsMemory::loadCompositeSkillsOfProvider(const std::string& providerName) + std::optional<std::vector<skills::manager::arondto::FluxioSkill>> SkillsMemory::loadCompositeSkillsOfProvider(const std::string& providerId) { - return composedSkillCoreSegment.getSkillsOfProvider(providerName); + return composedSkillCoreSegment.getSkillsOfProvider(providerId); } void SkillsMemory::addProfile(const skills::manager::arondto::FluxioProfile& profile) diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h index b5066346cbd79909de6a71ba6e493085dae0cd8c..1155b05d8cc8737a64855c9cb5c9b3ddf9d3d552 100644 --- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h +++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h @@ -115,7 +115,7 @@ namespace armarx void saveSkill(const skills::manager::arondto::FluxioSkill& skillt) override; std::optional<std::vector<skills::manager::arondto::FluxioSkill>> loadCompositeSkills() override; - std::optional<std::vector<skills::manager::arondto::FluxioSkill>> loadCompositeSkillsOfProvider(const std::string& providerName) override; + std::optional<std::vector<skills::manager::arondto::FluxioSkill>> loadCompositeSkillsOfProvider(const std::string& providerId) override; void addProfile(const skills::manager::arondto::FluxioProfile& profile) override; diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.cpp index d03f11177ad63ef95305715c53cc81e5cd0dfe25..ac2c9f665a8e312826299d33819aebe80bc938ed 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.cpp +++ b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.cpp @@ -43,7 +43,7 @@ namespace armarx::skills::segment ComposedSkillLibraryCoreSegment::addSkill(const skills::manager::arondto::FluxioSkill& skill) { // add skills - armem::MemoryID provId = id().withProviderSegmentName(skill.skillProviderId.hint); + armem::MemoryID provId = id().withProviderSegmentName(skill.skillProviderId.id); armem::Commit commit; armem::EntityUpdate& entityUpdate = commit.add(); @@ -52,7 +52,7 @@ namespace armarx::skills::segment entityUpdate.sentTime = armem::Time::Now(); entityUpdate.arrivedTime = armem::Time::Now(); entityUpdate.instancesData = {skill.toAron()}; - entityUpdate.entityID = provId.withEntityName(skill.name); + entityUpdate.entityID = provId.withEntityName(skill.id); // Commit data to memory and notify iceMemory.commit(commit); @@ -88,23 +88,30 @@ namespace armarx::skills::segment } std::optional<std::vector<skills::manager::arondto::FluxioSkill>> - ComposedSkillLibraryCoreSegment::getSkillsOfProvider(const std::string& providerName) const + ComposedSkillLibraryCoreSegment::getSkillsOfProvider(const std::string& providerId) const { - std::optional<std::vector<skills::manager::arondto::FluxioSkill>> opt = getSkills(); - if (!opt.has_value()) + std::vector<skills::manager::arondto::FluxioSkill> ret; + armarx::armem::client::query::Builder qb; + qb.allLatestInProviderSegment(id().withProviderSegmentName(providerId)); + armem::client::QueryResult qresult = iceMemory.query(qb.buildQueryInput()); + if (!qresult.success) { + ARMARX_WARNING << "Query failed: " << qresult.errorMessage; return std::nullopt; } - std::vector<skills::manager::arondto::FluxioSkill> ret; - for (const auto& skill : opt.value()) - { - //TODO: check if id or name should be used here - if (skill.skillProviderId.hint == providerName) + const armem::wm::Memory& data = qresult.memory; + + data.forEachInstance( + [&ret](const armem::wm::EntityInstance& instance) { + auto skill = instance.dataAs<skills::manager::arondto::FluxioSkill>(); + if (skill.deleted) + { + return; + } ret.push_back(skill); - } - } + }); return ret; } diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h index 0fdf34138fafe40b8b7062bb494ad31d3c99cdf0..afb8fa9d5705dc4f9fc298fdbf1a5a345097f621 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h +++ b/source/RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h @@ -32,6 +32,6 @@ namespace armarx::skills::segment void addSkill(const skills::manager::arondto::FluxioSkill& skill); std::optional<std::vector<skills::manager::arondto::FluxioSkill>> getSkills() const; - std::optional<std::vector<skills::manager::arondto::FluxioSkill>> getSkillsOfProvider(const std::string& providerName) const; + std::optional<std::vector<skills::manager::arondto::FluxioSkill>> getSkillsOfProvider(const std::string& providerId) const; }; } // namespace armarx::skills::segment diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp index 747d90b497689ea6a96a3b08ff0125b29ee02973..39b5d2d716fe1295f9893a7098a1ee3970372909 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp @@ -4,6 +4,7 @@ #include <optional> #include <string> #include <vector> +#include <boost/uuid/uuid_io.hpp> #include <Ice/Exception.h> #include <Ice/OutputStream.h> @@ -40,8 +41,9 @@ namespace armarx { auto i = skills::ProviderInfo::FromIce(info); this->plugin->addProvider(i); + std::string providerId = boost::uuids::to_string(armarx::plugins::SkillManagerComponentPlugin::createUuidWithString(info.providerId.providerName)); std::optional<std::vector<skills::manager::arondto::FluxioSkill>> opt = - loadCompositeSkillsOfProvider(info.providerId.providerName); + loadCompositeSkillsOfProvider(providerId); if (!opt.has_value()) { ARMARX_ERROR << "Failed to load composite skills for provider " << info.providerId.providerName;