From 94b541a471bb9cc5875435b6fc07987c535c49d2 Mon Sep 17 00:00:00 2001 From: Firat Yusuf Duran <uzivy@student.kit.edu> Date: Sun, 15 Sep 2024 13:35:57 +0200 Subject: [PATCH] add loadProfiles to skillmemory --- .../server/SkillsMemory/SkillsMemory.cpp | 5 ++++ .../armem/server/SkillsMemory/SkillsMemory.h | 1 + .../server/segment/ProfileLibrarySegment.cpp | 29 +++++++++++++++++++ .../server/segment/ProfileLibrarySegment.h | 3 ++ .../SkillManagerComponentPluginUser.cpp | 7 +++++ .../manager/SkillManagerComponentPluginUser.h | 1 + 6 files changed, 46 insertions(+) diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp index 1119465a1..a02a8f8af 100644 --- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp +++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp @@ -256,4 +256,9 @@ namespace armarx { profileCoreSegment.addProfile(profile); } + + std::optional<std::vector<skills::manager::arondto::FluxioProfile>> SkillsMemory::loadProfiles() + { + return profileCoreSegment.getProfiles(); + } } // namespace armarx diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h index 1155b05d8..8f117a5cb 100644 --- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h +++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h @@ -118,6 +118,7 @@ namespace armarx std::optional<std::vector<skills::manager::arondto::FluxioSkill>> loadCompositeSkillsOfProvider(const std::string& providerId) override; void addProfile(const skills::manager::arondto::FluxioProfile& profile) override; + std::optional<std::vector<skills::manager::arondto::FluxioProfile>> loadProfiles() override; protected: /// @see armarx::ManagedIceObject::onInitComponent() diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp index 0d3d49d1f..075e0f192 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp +++ b/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp @@ -1,9 +1,11 @@ #include "ProfileLibrarySegment.h" +#include <vector> #include <SimoxUtility/algorithm/string.h> #include <ArmarXCore/core/time/ice_conversions.h> +#include "RobotAPI/libraries/armem/client/query/Builder.h" #include "RobotAPI/libraries/armem/core/Commit.h" #include "RobotAPI/libraries/armem/core/MemoryID.h" #include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h> @@ -52,4 +54,31 @@ namespace armarx::skills::segment // Commit data to memory and notify iceMemory.commit(commit); } + + std::optional<std::vector<skills::manager::arondto::FluxioProfile>> ProfileLibraryCoreSegment::getProfiles() const { + std::vector<skills::manager::arondto::FluxioProfile> ret; + armarx::armem::client::query::Builder qb; + qb.allLatestInCoreSegment(id()); + armem::client::QueryResult qresult = iceMemory.query(qb.buildQueryInput()); + if (!qresult.success) + { + ARMARX_WARNING << "Query failed: " << qresult.errorMessage; + return std::nullopt; + } + + const armem::wm::Memory& data = qresult.memory; + + data.forEachInstance( + [&ret](const armem::wm::EntityInstance& instance) + { + auto profile = instance.dataAs<skills::manager::arondto::FluxioProfile>(); + if (profile.deleted) + { + return; + } + ret.push_back(profile); + }); + + return ret; + } } // namespace armarx::skills::segment diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.h b/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.h index 61c5a9fc1..2032163c5 100644 --- a/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.h +++ b/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.h @@ -1,6 +1,8 @@ #pragma once // Base Class +#include <optional> +#include <vector> #include <RobotAPI/libraries/armem/server/segment/SpecializedSegment.h> // ArmarX @@ -29,5 +31,6 @@ namespace armarx::skills::segment void init(); void addProfile(const skills::manager::arondto::FluxioProfile& profile); + std::optional<std::vector<skills::manager::arondto::FluxioProfile>> getProfiles() const; }; } // namespace armarx::skills::segment diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp index 39b5d2d71..31b002a43 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp @@ -771,4 +771,11 @@ namespace armarx { // Implemented in derived class } + + std::optional<std::vector<skills::manager::arondto::FluxioProfile>> + SkillManagerComponentPluginUser::loadProfiles() + { + // Implemented in derived class + return {}; + } } // namespace armarx diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.h b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.h index 89d148029..1eb873f36 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.h +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.h @@ -156,6 +156,7 @@ namespace armarx virtual std::optional<std::vector<skills::manager::arondto::FluxioSkill>> loadCompositeSkillsOfProvider(const std::string& providerId); virtual void addProfile(const skills::manager::arondto::FluxioProfile& profile); + virtual std::optional<std::vector<skills::manager::arondto::FluxioProfile>> loadProfiles(); private: armarx::plugins::SkillManagerComponentPlugin* plugin = nullptr; -- GitLab