From aa1ccc5682e050b81b40b9a6baf77688f73c6014 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 26 Sep 2024 16:41:51 +0200
Subject: [PATCH] ObjectPoseProviderPlugin: using Proxy instead of Topic

---
 .../plugins/ObjectPoseProviderPlugin.cpp      | 54 +++++++++----------
 .../plugins/ObjectPoseProviderPlugin.h        | 30 ++++-------
 2 files changed, 37 insertions(+), 47 deletions(-)

diff --git a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp
index 6aef209e6..ca1aab83a 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp
@@ -2,43 +2,48 @@
 
 #include <ArmarXCore/core/Component.h>
 
-
 namespace armarx::plugins
 {
 
-    void ObjectPoseProviderPlugin::postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties)
+    void
+    ObjectPoseProviderPlugin::postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties)
     {
         if (!properties->hasDefinition(makePropertyName(PROPERTY_NAME)))
         {
             properties->defineOptionalProperty<std::string>(
-                makePropertyName(PROPERTY_NAME),
-                "ObjectPoseTopic",
-                "Name of the object pose topic.");
+                makePropertyName(PROPERTY_NAME), "ObjectMemory", "Name of the object memory.");
         }
     }
 
-    void ObjectPoseProviderPlugin::preOnInitComponent()
+    void
+    ObjectPoseProviderPlugin::preOnInitComponent()
     {
-        parent<Component>().offeringTopicFromProperty(makePropertyName(PROPERTY_NAME));
+        parent<Component>().usingProxyFromProperty(makePropertyName(PROPERTY_NAME));
     }
 
-    void ObjectPoseProviderPlugin::preOnConnectComponent()
+    void
+    ObjectPoseProviderPlugin::preOnConnectComponent()
     {
-        parent<ObjectPoseProviderPluginUser>().objectPoseTopic = createObjectPoseTopic();
+        parent<ObjectPoseProviderPluginUser>().objectPoseTopic =
+            parent<Component>().getProxyFromProperty<objpose::ObjectPoseStorageInterfacePrx>(
+                makePropertyName(PROPERTY_NAME));
     }
 
-    void ObjectPoseProviderPlugin::postOnConnectComponent()
+    void
+    ObjectPoseProviderPlugin::postOnConnectComponent()
     {
-        ObjectPoseProviderPluginUser& parent = this->parent<ObjectPoseProviderPluginUser>();
-        objpose::ObjectPoseTopicPrx& topic = parent.objectPoseTopic;
-        if (topic)
+        auto& parent = this->parent<ObjectPoseProviderPluginUser>();
+        if (parent.objectPoseTopic)
         {
             objpose::ProviderInfo info = parent.getProviderInfo();
             if (!info.proxy)
             {
-                info.proxy = ::armarx::objpose::ObjectPoseProviderPrx::checkedCast(parent.getProxy());
+                info.proxy =
+                    ::armarx::objpose::ObjectPoseProviderPrx::checkedCast(parent.getProxy());
             }
-            topic->reportProviderAvailable(parent.getName(), info);
+
+            ARMARX_INFO << "Reporting provider `" << parent.getName() << "` availability.";
+            parent.objectPoseTopic->reportProviderAvailable(parent.getName(), info);
         }
         else
         {
@@ -46,13 +51,7 @@ namespace armarx::plugins
         }
     }
 
-    objpose::ObjectPoseTopicPrx ObjectPoseProviderPlugin::createObjectPoseTopic()
-    {
-        return parent<Component>().getTopicFromProperty<objpose::ObjectPoseTopicPrx>(makePropertyName(PROPERTY_NAME));
-    }
-
-}
-
+} // namespace armarx::plugins
 
 namespace armarx
 {
@@ -62,7 +61,10 @@ namespace armarx
         addPlugin(plugin);
     }
 
-    objpose::provider::RequestObjectsOutput ObjectPoseProviderPluginUser::requestObjects(const objpose::provider::RequestObjectsInput& input, const Ice::Current&)
+    objpose::provider::RequestObjectsOutput
+    ObjectPoseProviderPluginUser::requestObjects(
+        const objpose::provider::RequestObjectsInput& input,
+        const Ice::Current&)
     {
         // ARMARX_INFO << "Requested " << input.objectIDs.size() << " objects for " << input.relativeTimeoutMS << " ms.";
         objpose::provider::RequestObjectsOutput output;
@@ -73,9 +75,5 @@ namespace armarx
         return output;
     }
 
-    objpose::ObjectPoseTopicPrx ObjectPoseProviderPluginUser::createObjectPoseTopic()
-    {
-        return plugin->createObjectPoseTopic();
-    }
 
-}
+} // namespace armarx
diff --git a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h
index 1d0191ed6..6e7fd2ebb 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h
+++ b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h
@@ -3,7 +3,7 @@
 #include <ArmarXCore/core/ComponentPlugin.h>
 
 #include <RobotAPI/interface/objectpose/ObjectPoseProvider.h>
-
+#include <RobotAPI/interface/objectpose/ObjectPoseStorageInterface.h>
 
 namespace armarx::plugins
 {
@@ -11,7 +11,6 @@ namespace armarx::plugins
     class ObjectPoseProviderPlugin : public ComponentPlugin
     {
     public:
-
         using ComponentPlugin::ComponentPlugin;
 
         void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override;
@@ -20,17 +19,12 @@ namespace armarx::plugins
         void preOnConnectComponent() override;
         void postOnConnectComponent() override;
 
-        objpose::ObjectPoseTopicPrx createObjectPoseTopic();
-
-
     private:
-
-        static constexpr const char* PROPERTY_NAME = "ObjectPoseTopicName";
+        static constexpr const char* PROPERTY_NAME = "ObjectMemoryName";
 
     };
 
-}
-
+} // namespace armarx::plugins
 
 #include <ArmarXCore/core/ManagedIceObject.h>
 
@@ -41,24 +35,22 @@ namespace armarx
      * @brief Provides an `objpose::ObjectPoseTopicPrx objectPoseTopic` as member variable.
      */
     class ObjectPoseProviderPluginUser :
-        virtual public ManagedIceObject
-        , virtual public objpose::ObjectPoseProvider
+        virtual public ManagedIceObject,
+        virtual public objpose::ObjectPoseProvider
     {
     public:
-
         ObjectPoseProviderPluginUser();
 
         /// Implement to process object requests (empty default implementation).
-        objpose::provider::RequestObjectsOutput requestObjects(const objpose::provider::RequestObjectsInput& input, const Ice::Current&) override;
-
-        objpose::ObjectPoseTopicPrx createObjectPoseTopic();
+        objpose::provider::RequestObjectsOutput
+        requestObjects(const objpose::provider::RequestObjectsInput& input,
+                       const Ice::Current&) override;
 
-        objpose::ObjectPoseTopicPrx objectPoseTopic;
+        // objpose::ObjectPoseStorageInterfacePrx createObjectPoseStorage();
 
+        objpose::ObjectPoseStorageInterfacePrx objectPoseTopic;
 
     private:
-
         armarx::plugins::ObjectPoseProviderPlugin* plugin = nullptr;
-
     };
-}
+} // namespace armarx
-- 
GitLab