From 8f33a7f54d2e3d33bfd0bfcef3cc1ef354c18064 Mon Sep 17 00:00:00 2001
From: Peter Albrecht <albrecpe@gmail.com>
Date: Sat, 21 Oct 2023 17:17:53 +0200
Subject: [PATCH] Implemented toString for SkillExecutionID

---
 .../SkillManagerMonitorWidgetController.cpp   | 39 +++++++++++--------
 .../skills/core/SkillExecutionID.cpp          |  8 ++++
 .../libraries/skills/core/SkillExecutionID.h  |  6 +++
 3 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
index bb7ac21c9..db2a98e79 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
@@ -488,23 +488,28 @@ namespace armarx
     void
     SkillManagerMonitorWidgetController::stopSkill()
     {
-        std::string c = selectedSkill.skillExecutionId.skillId.skillName;
-        ARMARX_IMPORTANT << "Stop skill triggered: " << c;
-        //        std::scoped_lock l(updateMutex);
-        //        if (selectedSkill.skillId.fullySpecified())
-        //        {
-        //            return;
-        //        }
-
-        //        const auto& skillDescriptions = skills.at(*selectedSkill.skillId.providerId);
-        //        if (!skillDescriptions.count(selectedSkill.skillId.skillName))
-        //        {
-        //            return;
-        //        }
-
-        //        ARMARX_INFO << "Stopping skill from GUI: " << selectedSkill.skillId;
-
-        //        manager->abortSkill(selectedSkill.skillId);
+        std::scoped_lock l(updateMutex);
+
+        /*
+         * Example skills are not fully specified; disabled check
+         *
+        if (selectedSkill.skillExecutionId.skillId.fullySpecified())
+        {
+            ARMARX_INFO << "The user requested to stop a skill, which was not fully specified!";
+            return;
+        }
+
+        const auto& skillDescriptions = skills.at(*selectedSkill.skillId.providerId);
+        if (!skillDescriptions.count(selectedSkill.skillId.skillName))
+        {
+            return;
+        }
+        */
+
+        ARMARX_INFO << "Stopping skill from GUI: "
+                    << selectedSkill.skillExecutionId.skillId.skillName;
+
+        memory->abortSkill(selectedSkill.skillExecutionId.toManagerIce());
     }
 
     void
diff --git a/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp b/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp
index f048167a1..3c52c6be7 100644
--- a/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp
+++ b/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp
@@ -47,5 +47,13 @@ namespace armarx
             armarx::core::time::fromIce(i.executionStartedTime, t);
             return {skills::SkillID::FromIce(i.skillId, providerName), i.executorName, t};
         }
+
+        std::string
+        SkillExecutionID::toString(const std::string& prefix) const
+        {
+            return skillId.toString(prefix) + ENTER_SEPARATOR + executorName + SEPARATOR +
+                   executionStartedTime.toDateTimeString() + EXIT_SEPARATOR;
+        }
+
     } // namespace skills
 } // namespace armarx
diff --git a/source/RobotAPI/libraries/skills/core/SkillExecutionID.h b/source/RobotAPI/libraries/skills/core/SkillExecutionID.h
index a39d82bd2..bd1bfb326 100644
--- a/source/RobotAPI/libraries/skills/core/SkillExecutionID.h
+++ b/source/RobotAPI/libraries/skills/core/SkillExecutionID.h
@@ -21,7 +21,11 @@ namespace armarx
             SkillID skillId;
             std::string executorName;
             armarx::core::time::DateTime executionStartedTime;
+
             static const constexpr char* UNKNOWN = "UNKNOWN";
+            static const constexpr char* ENTER_SEPARATOR = "[";
+            static const constexpr char* EXIT_SEPARATOR = "]";
+            static const constexpr char* SEPARATOR = "@";
 
             SkillExecutionID() = delete;
             SkillExecutionID(const SkillID&,
@@ -61,6 +65,8 @@ namespace armarx
 
             static SkillExecutionID FromIce(const skills::provider::dto::SkillExecutionID&,
                                             const std::optional<skills::ProviderID>& providerName);
+
+            std::string toString(const std::string& prefix = "") const;
         };
 
     } // namespace skills
-- 
GitLab