From d9d30318ed20dadb6954a73ec656e3a1064742a2 Mon Sep 17 00:00:00 2001
From: Firat Yusuf Duran <uzivy@student.kit.edu>
Date: Fri, 13 Sep 2024 16:03:33 +0200
Subject: [PATCH] add profile core segment to skillmemory

---
 .../server/SkillsMemory/SkillsMemory.cpp      |  3 ++
 .../armem/server/SkillsMemory/SkillsMemory.h  |  2 +
 .../libraries/armem_skills/CMakeLists.txt     |  2 +
 .../server/segment/ProfileLibrarySegment.cpp  | 53 +++++++++++++++++++
 .../server/segment/ProfileLibrarySegment.h    | 35 ++++++++++++
 5 files changed, 95 insertions(+)
 create mode 100644 source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp
 create mode 100644 source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.h

diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp
index efb6e446e..1e0842b2c 100644
--- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp
+++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.cpp
@@ -47,6 +47,7 @@ namespace armarx
         statechartListenerProviderSegment(iceAdapter()),
         executableSkillCoreSegment(iceAdapter()),
         composedSkillCoreSegment(iceAdapter()),
+        profileCoreSegment(iceAdapter()),
         skillEventCoreSegment(iceAdapter()),
         skillExecutionRequestCoreSegment(iceAdapter())
     {
@@ -62,6 +63,7 @@ namespace armarx
         statechartListenerProviderSegment.defineProperties(defs, prefix + "statechartlistener.");
         executableSkillCoreSegment.defineProperties(defs, prefix + "executableskill.");
         composedSkillCoreSegment.defineProperties(defs, prefix + "composedskill.");
+        profileCoreSegment.defineProperties(defs, prefix + "profile.");
         skillExecutionRequestCoreSegment.defineProperties(defs, prefix + "executionrequest.");
         skillEventCoreSegment.defineProperties(defs, prefix + "event.");
 
@@ -81,6 +83,7 @@ namespace armarx
         statechartListenerProviderSegment.init();
         executableSkillCoreSegment.init();
         composedSkillCoreSegment.init();
+        profileCoreSegment.init();
         skillExecutionRequestCoreSegment.init();
         skillEventCoreSegment.init();
     }
diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h
index cd40868e6..30de2d17d 100644
--- a/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h
+++ b/source/RobotAPI/components/armem/server/SkillsMemory/SkillsMemory.h
@@ -29,6 +29,7 @@
 #include <ArmarXCore/interface/core/Profiler.h>
 #include <ArmarXCore/observers/ObserverObjectFactories.h>
 
+#include "RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.h"
 #include <RobotAPI/interface/skills/SkillMemoryInterface.h>
 #include <RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h>
 #include <RobotAPI/libraries/armem_skills/aron/Statechart.aron.generated.h>
@@ -135,6 +136,7 @@ namespace armarx
         skills::segment::StatechartListenerProviderSegment statechartListenerProviderSegment;
         skills::segment::ExecutableSkillLibraryCoreSegment executableSkillCoreSegment;
         skills::segment::ComposedSkillLibraryCoreSegment composedSkillCoreSegment;
+        skills::segment::ProfileLibraryCoreSegment profileCoreSegment;
         skills::segment::SkillEventCoreSegment skillEventCoreSegment;
         skills::segment::SkillExecutionRequestCoreSegment skillExecutionRequestCoreSegment;
     };
diff --git a/source/RobotAPI/libraries/armem_skills/CMakeLists.txt b/source/RobotAPI/libraries/armem_skills/CMakeLists.txt
index 967384b58..5735dafed 100644
--- a/source/RobotAPI/libraries/armem_skills/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_skills/CMakeLists.txt
@@ -22,6 +22,7 @@ armarx_add_library(
         ./server/segment/StatechartListenerSegment.cpp
         ./server/segment/ExecutableSkillLibrarySegment.cpp
         ./server/segment/ComposedSkillLibrarySegment.cpp
+        ./server/segment/ProfileLibrarySegment.cpp
         ./server/segment/SkillExecutionRequestSegment.cpp
         ./server/segment/SkillEventSegment.cpp
     HEADERS  
@@ -32,6 +33,7 @@ armarx_add_library(
         ./server/segment/StatechartListenerSegment.h
         ./server/segment/ExecutableSkillLibrarySegment.h
         ./server/segment/ComposedSkillLibrarySegment.h
+        ./server/segment/ProfileLibrarySegment.h
         ./server/segment/SkillExecutionRequestSegment.h
         ./server/segment/SkillEventSegment.h
 )
diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp
new file mode 100644
index 000000000..f1d93114a
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.cpp
@@ -0,0 +1,53 @@
+#include "ProfileLibrarySegment.h"
+
+#include <SimoxUtility/algorithm/string.h>
+
+#include <ArmarXCore/core/time/ice_conversions.h>
+
+#include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
+#include <RobotAPI/libraries/armem_skills/aron_conversions.h>
+#include <RobotAPI/libraries/aron/converter/datatype/DatatypeConverterVisitor.h>
+#include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h>
+#include <RobotAPI/libraries/skills/core/aron/FluxioProfile.aron.generated.h>
+
+namespace armarx::skills::segment
+{
+    ProfileLibraryCoreSegment::ProfileLibraryCoreSegment(
+        armem::server::MemoryToIceAdapter& iceMemory) :
+        Base(iceMemory, CoreSegmentName, skills::manager::arondto::FluxioProfile::ToAronType())
+    {
+    }
+
+    void
+    ProfileLibraryCoreSegment::defineProperties(PropertyDefinitionsPtr defs,
+                                                      const std::string& prefix)
+    {
+        this->setDefaultMaxHistorySize(3);
+        Base::defineProperties(defs, prefix);
+    }
+
+    void
+    ProfileLibraryCoreSegment::init()
+    {
+        Base::init();
+    }
+
+    void
+    ProfileLibraryCoreSegment::addProfile(const skills::manager::arondto::FluxioProfile& profile)
+    {
+        // // add skills
+        // auto provId = id().withProviderSegmentName(skill.skillProviderId.id);
+
+        // armem::Commit commit;
+        // auto& entityUpdate = commit.add();
+        // entityUpdate.confidence = 1.0;
+        // entityUpdate.referencedTime = armem::Time::Now();
+        // entityUpdate.sentTime = armem::Time::Now();
+        // entityUpdate.arrivedTime = armem::Time::Now();
+        // entityUpdate.instancesData = {skill.toAron()};
+        // entityUpdate.entityID = provId.withEntityName("ArmarBlow");
+
+        // // Commit data to memory and notify
+        // iceMemory.commit(commit);
+    }
+} // 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
new file mode 100644
index 000000000..a05bca90e
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_skills/server/segment/ProfileLibrarySegment.h
@@ -0,0 +1,35 @@
+#pragma once
+
+// Base Class
+#include <RobotAPI/libraries/armem/server/segment/SpecializedSegment.h>
+
+// ArmarX
+#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
+#include <ArmarXCore/interface/core/Profiler.h>
+#include <ArmarXCore/observers/ObserverObjectFactories.h>
+
+#include <RobotAPI/interface/skills/SkillManagerInterface.h>
+#include <RobotAPI/interface/skills/SkillProviderInterface.h>
+#include <RobotAPI/libraries/armem_skills/aron/Skill.aron.generated.h>
+#include <RobotAPI/libraries/skills/core/ProviderInfo.h>
+#include <RobotAPI/libraries/skills/core/aron/FluxioProfile.aron.generated.h>
+
+namespace armarx::skills::segment
+{
+    class ProfileLibraryCoreSegment : public armem::server::segment::SpecializedCoreSegment
+    {
+        using Base = armem::server::segment::SpecializedCoreSegment;
+
+    public:
+        static constexpr const char* CoreSegmentName = "Profile";
+
+        ProfileLibraryCoreSegment(armem::server::MemoryToIceAdapter& iceMemory);
+
+        void defineProperties(PropertyDefinitionsPtr defs, const std::string& prefix);
+        void init();
+
+        void addProfile(const skills::manager::arondto::FluxioProfile& profile);
+
+        size_t size() const;
+};
+} // namespace armarx::skills::segment
-- 
GitLab