From 76b3f5ecc7e7d2173041a43ca7fcc44ee2abf536 Mon Sep 17 00:00:00 2001
From: Raphael Grimm <raphael.grimm@kit.edu>
Date: Thu, 9 Jul 2020 13:06:02 +0200
Subject: [PATCH] Improve RobotNameHelper

* const correct
* constructors
* add getProfiles()
* add code to test statechart
---
 .../RobotNameHelper.cpp                       | 11 ++++++---
 .../RobotStatechartHelpers/RobotNameHelper.h  | 23 ++++++++++++++-----
 .../RobotNameHelperTestGroup/TestGetNames.cpp |  1 +
 3 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
index 10cb284d6..1a5afd0c7 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
@@ -65,12 +65,12 @@ namespace armarx
         return RobotNameHelperPtr(new RobotNameHelper(robotInfo, profile));
     }
 
-    RobotNameHelper::Arm RobotNameHelper::getArm(const std::string& side)
+    RobotNameHelper::Arm RobotNameHelper::getArm(const std::string& side) const
     {
         return Arm(shared_from_this(), side);
     }
 
-    RobotNameHelper::RobotArm RobotNameHelper::getRobotArm(const std::string& side, const VirtualRobot::RobotPtr& robot)
+    RobotNameHelper::RobotArm RobotNameHelper::getRobotArm(const std::string& side, const VirtualRobot::RobotPtr& robot) const
     {
         return RobotArm(Arm(shared_from_this(), side), robot);
     }
@@ -185,7 +185,7 @@ namespace armarx
         return RobotArm(*this, robot);
     }
 
-    RobotNameHelper::Arm::Arm(const std::shared_ptr<RobotNameHelper>& rnh, const std::string& side)
+    RobotNameHelper::Arm::Arm(const std::shared_ptr<const RobotNameHelper>& rnh, const std::string& side)
         : rnh(rnh), side(side)
     {
 
@@ -236,4 +236,9 @@ namespace armarx
     {
 
     }
+
+    const std::vector<std::string>& RobotNameHelper::getProfiles() const
+    {
+        return profiles;
+    }
 }
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
index eca096cc5..23c773124 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
@@ -71,11 +71,16 @@ namespace armarx
             std::string getHandModelPackage() const;
             RobotArm addRobot(const VirtualRobot::RobotPtr& robot) const;
 
+            Arm(const std::shared_ptr<const RobotNameHelper>& rnh, const std::string& side);
+            Arm() = default;
+            Arm(Arm&&) = default;
+            Arm(const Arm&) = default;
+            Arm& operator=(Arm&&) = default;
+            Arm& operator=(const Arm&) = default;
         private:
-            Arm(const std::shared_ptr<RobotNameHelper>& rnh, const std::string& side);
             std::string select(const std::string& path) const;
 
-            std::shared_ptr<RobotNameHelper> rnh;
+            std::shared_ptr<const RobotNameHelper> rnh;
             std::string side;
         };
 
@@ -92,8 +97,13 @@ namespace armarx
             Eigen::Matrix4f getTcp2HandRootTransform() const;
             Arm getArm() const;
 
-        private:
             RobotArm(const Arm& arm, const VirtualRobot::RobotPtr& robot);
+            RobotArm() = default;
+            RobotArm(RobotArm&&) = default;
+            RobotArm(const RobotArm&) = default;
+            RobotArm& operator=(RobotArm&&) = default;
+            RobotArm& operator=(const RobotArm&) = default;
+        private:
 
             const Arm arm;
             VirtualRobot::RobotPtr robot;
@@ -103,11 +113,12 @@ namespace armarx
 
         static RobotNameHelperPtr Create(const RobotInfoNodePtr& robotInfo, const StatechartProfilePtr& profile);
 
-        Arm getArm(const std::string& side);
-        RobotArm getRobotArm(const std::string& side, const VirtualRobot::RobotPtr& robot);
+        RobotNameHelper(const RobotInfoNodePtr& robotInfo, const StatechartProfilePtr& profile = nullptr);
 
+        Arm getArm(const std::string& side) const;
+        RobotArm getRobotArm(const std::string& side, const VirtualRobot::RobotPtr& robot) const;
+        const std::vector<std::string>& getProfiles() const;
     private:
-        RobotNameHelper(const RobotInfoNodePtr& robotInfo, const StatechartProfilePtr& profile);
         RobotNameHelper& self()
         {
             return *this;
diff --git a/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp b/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp
index 50740dd9d..ee40934a1 100644
--- a/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp
+++ b/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp
@@ -47,6 +47,7 @@ void TestGetNames::run()
     ARMARX_IMPORTANT << "LeftArm: " << arm.getKinematicChain()->getName();
     ARMARX_IMPORTANT << "LeftArm TCP: " << arm.getTCP()->getName();
     //ARMARX_IMPORTANT << "HandControllerName: " << arm.getHandControllerName();
+    ARMARX_IMPORTANT << "Profiles: " << getRobotNameHelper()->getProfiles();
 
 
 }
-- 
GitLab