From 77975d3233b690916ddf16b8c087658449679bc0 Mon Sep 17 00:00:00 2001
From: Fabian Peller <fabian.peller-konrad@kit.edu>
Date: Thu, 12 Oct 2023 18:05:58 +0200
Subject: [PATCH] added SpecializedSKillProxy that takes a ParamType

---
 .../libraries/skills/provider/SkillProxy.h    |  2 +-
 .../skills/provider/SpecializedSkillProxy.cpp |  8 ++++
 .../skills/provider/SpecializedSkillProxy.h   | 41 +++++++++++++++++++
 3 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100644 source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.cpp
 create mode 100644 source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.h

diff --git a/source/RobotAPI/libraries/skills/provider/SkillProxy.h b/source/RobotAPI/libraries/skills/provider/SkillProxy.h
index 06f034a9c..8f0fb34be 100644
--- a/source/RobotAPI/libraries/skills/provider/SkillProxy.h
+++ b/source/RobotAPI/libraries/skills/provider/SkillProxy.h
@@ -29,7 +29,7 @@ namespace armarx
             // Utiliy methods
             aron::data::DictPtr getDefaultParameters(const std::string& profileName = "root");
 
-        private:
+        protected:
             manager::dti::SkillManagerInterfacePrx manager;
             SkillDescription skillDescription;
         };
diff --git a/source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.cpp b/source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.cpp
new file mode 100644
index 000000000..1074f5499
--- /dev/null
+++ b/source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.cpp
@@ -0,0 +1,8 @@
+#include "SkillProxy.h"
+
+namespace armarx
+{
+    namespace skills
+    {
+    } // namespace skills
+} // namespace armarx
diff --git a/source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.h b/source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.h
new file mode 100644
index 000000000..37ecd5a77
--- /dev/null
+++ b/source/RobotAPI/libraries/skills/provider/SpecializedSkillProxy.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include "SkillProxy.h"
+
+namespace armarx
+{
+    namespace skills
+    {
+        template <class AronT>
+        class SpecializedSkillProxy : public SkillProxy
+        {
+        public:
+            using SkillProxy::SkillProxy;
+
+            // Provide a similar API as the skillprovider
+            TerminatedSkillStatusUpdate
+            executeSkill(const std::string& executorName, const AronT& params)
+            {
+                return SkillProxy::executeSkill(executorName, params.toAron());
+            }
+
+            SkillExecutionID
+            executeSkillAsync(const std::string& executorName, const AronT& params = nullptr)
+            {
+                return SkillProxy::executeSkillAsync(executorName, params.toAron());
+            }
+
+            // Utiliy methods
+            AronT
+            getDefaultParameters(const std::string& profileName = "root")
+            {
+                auto dict = SkillProxy::getDefaultParameters(profileName);
+                if (dict)
+                {
+                    return AronT::FromAron(dict);
+                }
+                return {};
+            }
+        };
+    } // namespace skills
+} // namespace armarx
-- 
GitLab