From 1169f0c0858067b8263d8a07200e992bdaf275db Mon Sep 17 00:00:00 2001
From: Firat Yusuf Duran <uzivy@student.kit.edu>
Date: Sun, 15 Sep 2024 12:54:09 +0200
Subject: [PATCH] skillmemory: change save by name to id

---
 .../server/SkillsMemory/SkillsMemory.cpp      |  4 +--
 .../armem/server/SkillsMemory/SkillsMemory.h  |  2 +-
 .../segment/ComposedSkillLibrarySegment.cpp   | 31 ++++++++++++-------
 .../segment/ComposedSkillLibrarySegment.h     |  2 +-
 .../SkillManagerComponentPluginUser.cpp       |  4 ++-
 5 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp
index c94e2b4d3..1119465a1 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 b5066346c..1155b05d8 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 d03f11177..ac2c9f665 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 0fdf34138..afb8fa9d5 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 747d90b49..39b5d2d71 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;
-- 
GitLab