From 57ef98fae02f20188df0e0d8dff2cdc86fa17a0c Mon Sep 17 00:00:00 2001
From: Peter Albrecht <albrecpe@gmail.com>
Date: Wed, 8 Nov 2023 17:04:47 +0100
Subject: [PATCH] Merged master; made it compilable and implemented execution
 signature in Ice

---
 .../SkillManagerMonitorWidgetController.cpp   | 25 ++++++++++++-------
 .../SkillManagerMonitorWidgetController.h     |  7 +++---
 .../skills/SkillManagerInterface.ice          |  1 +
 .../skills/SkillProviderInterface.ice         |  1 +
 .../server/segment/SkillEventSegment.cpp      |  2 +-
 .../skills/core/SkillExecutionID.cpp          | 23 ++++++++++++++---
 .../libraries/skills/core/SkillExecutionID.h  | 17 +++++--------
 .../RobotAPI/libraries/skills/core/SkillID.h  |  1 +
 .../provider/SkillProviderComponentPlugin.cpp |  7 +++---
 9 files changed, 52 insertions(+), 32 deletions(-)

diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
index a8dac1d29..557e7c5ad 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
@@ -450,8 +450,8 @@ namespace armarx
 
                 // update maps
                 skillStatusUpdates.insert_or_assign(executionId, statusUpdate);
-                skillExecutionParams.insert_or_assign(executionId,
-                                                      statusUpdate.usedParameterization);
+                //skillExecutionParams.insert_or_assign(executionId,
+                //                                      statusUpdate.usedParameterization);
 
                 SkillExecutionInfoTreeWidgetItem* found = nullptr;
                 for (int i = 0; i < widget.treeWidgetSkillExecutions->topLevelItemCount(); ++i)
@@ -531,10 +531,13 @@ namespace armarx
     void
     SkillManagerMonitorWidgetController::rerunSkillWithSimilarParams()
     {
-        skills::SkillParameterization selectedExecutionParams =
-            skillExecutionParams.at(selectedSkill.skillExecutionId);
-        executeSkillWithParams(selectedSkill.skillExecutionId.skillId,
-                               selectedExecutionParams.parameterization);
+        // TODO: disabled until skillparameterization is replaced
+        //skills::SkillParameterization selectedExecutionParams =
+        //skillExecutionParams.at(selectedSkill.skillExecutionId);
+        //executeSkillWithParams(selectedSkill.skillExecutionId.skillId,
+        //                       selectedExecutionParams.parameterization);
+
+        executeSelectedSkill();
     }
 
     void
@@ -543,8 +546,12 @@ namespace armarx
     {
         std::scoped_lock l(updateMutex);
 
-        auto providerId = skills::ProviderID(skillId);
-        const auto& skillDescriptions = skills.at(providerId);
+        auto providerId = skillId.providerId;
+        if (!providerId.has_value())
+        {
+            return;
+        }
+        const auto& skillDescriptions = skills.at(providerId.value());
         if (skillDescriptions.find(skillId) == skillDescriptions.end())
         {
             return;
@@ -553,7 +560,7 @@ namespace armarx
         char hostname[HOST_NAME_MAX];
         gethostname(hostname, HOST_NAME_MAX);
 
-        skills::SkillExecutionRequest req{selectedSkill.skillId,
+        skills::SkillExecutionRequest req(selectedSkill.skillId,
                                           "Skills.Manager GUI (hostname: " + std::string(hostname) +
                                               ")",
                                           params);
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
index 63c26f1a8..0480e13c6 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
@@ -155,8 +155,9 @@ namespace armarx
         std::map<skills::ProviderID, std::map<skills::SkillID, skills::SkillDescription>> skills =
             {};
         std::map<skills::SkillExecutionID, skills::SkillStatusUpdate> skillStatusUpdates = {};
+
         // store copies (!) of skill descriptions
-        std::map<skills::SkillExecutionID, skills::SkillParameterization> skillExecutionParams = {};
+        //std::map<skills::SkillExecutionID, skills::SkillParameterization> skillExecutionParams = {};
 
         // User Input
         struct SelectedSkill
@@ -166,8 +167,8 @@ namespace armarx
 
             // make default constructable
             SelectedSkill() :
-                skillId({skills::SkillID::UNKNOWN}, skills::SkillID::UNKNOWN),
-                skillExecutionId({{skills::SkillID::UNKNOWN}, skills::SkillID::UNKNOWN},
+                skillId({}, skills::SkillID::UNKNOWN),
+                skillExecutionId({{}, skills::SkillID::UNKNOWN},
                                  skills::SkillExecutionID::UNKNOWN,
                                  armarx::core::time::DateTime::Invalid())
             {
diff --git a/source/RobotAPI/interface/skills/SkillManagerInterface.ice b/source/RobotAPI/interface/skills/SkillManagerInterface.ice
index f22738bda..9fe27d639 100644
--- a/source/RobotAPI/interface/skills/SkillManagerInterface.ice
+++ b/source/RobotAPI/interface/skills/SkillManagerInterface.ice
@@ -67,6 +67,7 @@ module armarx
                 {
                     SkillID skillId;
                     string executorName;
+                    string executionSignature;
                     armarx::core::time::dto::DateTime executionStartedTime;
                     string uuid;
                 };
diff --git a/source/RobotAPI/interface/skills/SkillProviderInterface.ice b/source/RobotAPI/interface/skills/SkillProviderInterface.ice
index 3066c962e..e9ea82deb 100644
--- a/source/RobotAPI/interface/skills/SkillProviderInterface.ice
+++ b/source/RobotAPI/interface/skills/SkillProviderInterface.ice
@@ -136,6 +136,7 @@ module armarx
                 {
                     SkillID skillId;
                     string executorName;
+                    string executionSignature;
                     armarx::core::time::dto::DateTime executionStartedTime;
                     string uuid;
                 };
diff --git a/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp b/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp
index 11dc8d0df..7b179a615 100644
--- a/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp
+++ b/source/RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.cpp
@@ -63,7 +63,7 @@ namespace armarx::skills::segment
             [&](const armem::wm::EntityInstance& i)
             {
                 auto event = i.dataAs<armarx::skills::arondto::SkillStatusUpdate>();
-                skills::SkillStatusUpdate up;
+                skills::SkillStatusUpdate up = {};
                 armem::fromAron(event, up);
 
                 if (auto it = ret.find(up.executionId); it != ret.end() && up < it->second)
diff --git a/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp b/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp
index bb2494ac2..e46be421d 100644
--- a/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp
+++ b/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp
@@ -4,12 +4,20 @@ namespace armarx
 {
     namespace skills
     {
+        /*SkillExecutionID::SkillExecutionID(const SkillID& id,
+                                           const std::string& executorName,
+                                           const armarx::core::time::DateTime& time) :
+            skillId(id), executorName(executorName), executionStartedTime(time)
+        {
+        }*/
+
         skills::manager::dto::SkillExecutionID
         SkillExecutionID::toManagerIce() const
         {
             skills::manager::dto::SkillExecutionID ret;
             ret.skillId = skillId.toManagerIce();
             ret.executorName = executorName;
+            ret.executionSignature = executionSignature;
             armarx::core::time::toIce(ret.executionStartedTime, executionStartedTime);
             return ret;
         }
@@ -20,6 +28,7 @@ namespace armarx
             skills::provider::dto::SkillExecutionID ret;
             ret.skillId = skillId.toProviderIce();
             ret.executorName = executorName;
+            ret.executionSignature = executionSignature;
             armarx::core::time::toIce(ret.executionStartedTime, executionStartedTime);
             return ret;
         }
@@ -29,7 +38,10 @@ namespace armarx
         {
             armarx::core::time::DateTime t;
             armarx::core::time::fromIce(i.executionStartedTime, t);
-            return {skills::SkillID::FromIce(i.skillId), i.executorName, t};
+            return {.skillId = skills::SkillID::FromIce(i.skillId),
+                    .executorName = i.executorName,
+                    .executionSignature = i.executionSignature,
+                    .executionStartedTime = t};
         }
 
         SkillExecutionID
@@ -38,13 +50,16 @@ namespace armarx
         {
             armarx::core::time::DateTime t;
             armarx::core::time::fromIce(i.executionStartedTime, t);
-            return {skills::SkillID::FromIce(i.skillId, providerName), i.executorName, t};
+            return {skills::SkillID::FromIce(i.skillId, providerName),
+                    i.executorName,
+                    i.executionSignature,
+                    t};
         }
 
         std::string
-        SkillExecutionID::toString(const std::string& prefix) const
+        SkillExecutionID::toString() const
         {
-            return skillId.toString(prefix) + ENTER_SEPARATOR + executorName + SEPARATOR +
+            return skillId.toString() + ENTER_SEPARATOR + executorName + SEPARATOR +
                    executionStartedTime.toDateTimeString() + EXIT_SEPARATOR;
         }
 
diff --git a/source/RobotAPI/libraries/skills/core/SkillExecutionID.h b/source/RobotAPI/libraries/skills/core/SkillExecutionID.h
index 474eef2f6..8bf17cab3 100644
--- a/source/RobotAPI/libraries/skills/core/SkillExecutionID.h
+++ b/source/RobotAPI/libraries/skills/core/SkillExecutionID.h
@@ -20,6 +20,7 @@ namespace armarx
         {
             SkillID skillId;
             std::string executorName;
+            std::string executionSignature;
             armarx::core::time::DateTime executionStartedTime;
 
             static const constexpr char* UNKNOWN = "UNKNOWN";
@@ -27,10 +28,11 @@ namespace armarx
             static const constexpr char* EXIT_SEPARATOR = "]";
             static const constexpr char* SEPARATOR = "@";
 
-            SkillExecutionID() = delete;
-            SkillExecutionID(const SkillID&,
+            //SkillExecutionID() = delete;
+
+            /*SkillExecutionID(const SkillID& id,
                              const std::string& executorName,
-                             const armarx::core::time::DateTime&);
+                             const armarx::core::time::DateTime& time);*/
 
             bool
             operator==(const SkillExecutionID& other) const
@@ -50,13 +52,6 @@ namespace armarx
                 return this->toString() <= other.toString();
             }
 
-            std::string
-            toString() const
-            {
-                return skillId.toString() + " requested by " + executorName + " at " +
-                       executionStartedTime.toDateTimeString();
-            }
-
             skills::manager::dto::SkillExecutionID toManagerIce() const;
 
             skills::provider::dto::SkillExecutionID toProviderIce() const;
@@ -66,7 +61,7 @@ namespace armarx
             static SkillExecutionID FromIce(const skills::provider::dto::SkillExecutionID&,
                                             const std::optional<skills::ProviderID>& providerName);
 
-            std::string toString(const std::string& prefix = "") const;
+            std::string toString() const;
         };
 
     } // namespace skills
diff --git a/source/RobotAPI/libraries/skills/core/SkillID.h b/source/RobotAPI/libraries/skills/core/SkillID.h
index e611a8282..91494c78c 100644
--- a/source/RobotAPI/libraries/skills/core/SkillID.h
+++ b/source/RobotAPI/libraries/skills/core/SkillID.h
@@ -18,6 +18,7 @@ namespace armarx
         {
         public:
             static const constexpr char* NAME_SEPARATOR = "/";
+            static const constexpr char* UNKNOWN = "UNKNOWN";
 
             bool operator==(const SkillID& other) const;
             bool operator!=(const SkillID& other) const;
diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp
index a42d78082..e4d3235a3 100644
--- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp
@@ -190,10 +190,9 @@ namespace armarx::plugins
     {
         ARMARX_CHECK(executionRequest.skillId.isFullySpecified());
 
-        skills::SkillExecutionID executionId{.skillId = executionRequest.skillId,
-                                             .executorName = executionRequest.executorName,
-                                             .executionStartedTime =
-                                                 armarx::core::time::DateTime::Now()};
+        skills::SkillExecutionID executionId(executionRequest.skillId,
+                                             executionRequest.executorName,
+                                             armarx::core::time::DateTime::Now());
 
         skills::SkillStatusUpdate ret{
             {executionId, executionRequest.parameters, executionRequest.callbackInterface}};
-- 
GitLab