From 00e41e609466b7f70ada45bbd34c74315b8457b8 Mon Sep 17 00:00:00 2001
From: Raphael Grimm <raphael.grimm@kit.edu>
Date: Wed, 3 Jun 2020 16:43:37 +0200
Subject: [PATCH] Clean up RobotUnitComponentPlugin

* make functions const
* allow to set the name of the robot unit (if it is set manually, the property is not read). This makes it possible to use the plugin from a gui
* clean up formatting
---
 .../RobotUnitComponentPlugin.cpp              | 59 +++++++++++--------
 .../RobotUnitComponentPlugin.h                |  9 ++-
 2 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
index 383de616a..1e94a3958 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
@@ -1,53 +1,64 @@
 #include "RobotUnitComponentPlugin.h"
 
-namespace armarx
+namespace armarx::plugins
 {
-    namespace plugins
+    void RobotUnitComponentPlugin::preOnInitComponent()
     {
-
-        void RobotUnitComponentPlugin::preOnInitComponent()
-        {
-            parent<Component>().usingProxyFromProperty(PROPERTY_NAME);
-        }
-
-        void RobotUnitComponentPlugin::preOnConnectComponent()
+        if (_robotUnitName.empty())
         {
-            parent<Component>().getProxyFromProperty(_robotUnit, PROPERTY_NAME);
+            parent<Component>().getProperty(_robotUnitName, PROPERTY_NAME);
         }
+        parent<Component>().usingProxy(_robotUnitName);
+    }
 
-        void RobotUnitComponentPlugin::postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties)
-        {
-            if (!properties->hasDefinition(PROPERTY_NAME))
-            {
-                properties->defineRequiredProperty<std::string>(
-                    PROPERTY_NAME,
-                    "Name of the RobotUnit");
-            }
-        }
+    void RobotUnitComponentPlugin::preOnConnectComponent()
+    {
+        parent<Component>().getProxy(_robotUnit, _robotUnitName);
+    }
 
-        RobotUnitInterfacePrx RobotUnitComponentPlugin::getRobotUnit()
+    void RobotUnitComponentPlugin::postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties)
+    {
+        if (!properties->hasDefinition(PROPERTY_NAME))
         {
-            return _robotUnit;
+            properties->defineRequiredProperty<std::string>(
+                PROPERTY_NAME,
+                "Name of the RobotUnit");
         }
+    }
 
+    RobotUnitInterfacePrx RobotUnitComponentPlugin::getRobotUnit() const
+    {
+        return _robotUnit;
+    }
 
+    void RobotUnitComponentPlugin::setRobotUnitName(const std::string& name)
+    {
+        ARMARX_CHECK_NOT_EMPTY(name);
+        ARMARX_CHECK_EMPTY(_robotUnitName);
+        _robotUnitName = name;
+    }
+    const std::string& RobotUnitComponentPlugin::getRobotUnitName() const
+    {
+        return _robotUnitName;
     }
 }
 
 namespace armarx
 {
-
     RobotUnitComponentPluginUser::RobotUnitComponentPluginUser()
     {
         addPlugin(plugin);
     }
 
-    RobotUnitInterfacePrx RobotUnitComponentPluginUser::getRobotUnit()
+    RobotUnitInterfacePrx RobotUnitComponentPluginUser::getRobotUnit() const
     {
         return plugin->getRobotUnit();
     }
 
-
+    plugins::RobotUnitComponentPlugin& RobotUnitComponentPluginUser::getRobotUnitComponentPlugin()
+    {
+        return *plugin;
+    }
 }
 
 
diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
index 4dc53dcb9..b3cbf9a3b 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
@@ -20,11 +20,14 @@ namespace armarx
 
             void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override;
 
-            RobotUnitInterfacePrx getRobotUnit();
+            RobotUnitInterfacePrx getRobotUnit() const;
 
+            void setRobotUnitName(const std::string& name);
+            const std::string& getRobotUnitName() const;
         private:
             static constexpr const char* PROPERTY_NAME = "RobotUnitName";
             RobotUnitInterfacePrx _robotUnit;
+            std::string           _robotUnitName;
         };
 
     }
@@ -39,8 +42,8 @@ namespace armarx
     {
     public:
         RobotUnitComponentPluginUser();
-        RobotUnitInterfacePrx getRobotUnit();
-
+        RobotUnitInterfacePrx getRobotUnit() const;
+        plugins::RobotUnitComponentPlugin& getRobotUnitComponentPlugin();
     private:
         armarx::plugins::RobotUnitComponentPlugin* plugin = nullptr;
     };
-- 
GitLab