From 5f04ce8d4364d4fb2fe2a0a75f6c4cf58ff343ce Mon Sep 17 00:00:00 2001
From: "Christian R. G. Dreher" <c.dreher@kit.edu>
Date: Tue, 12 Jan 2021 12:08:30 +0100
Subject: [PATCH] feature: Add setter methods to initialize plugins with a
 Memory from component.

---
 .../armem/ArMemExampleClient/ArMemExampleClient.cpp        | 1 +
 source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp | 7 +++++++
 source/RobotAPI/libraries/armem/client/ComponentPlugin.h   | 4 ++++
 source/RobotAPI/libraries/armem/client/Reader.cpp          | 7 +++++++
 source/RobotAPI/libraries/armem/client/Reader.h            | 3 ++-
 .../libraries/armem/client/ReaderComponentPlugin.cpp       | 7 +++++++
 .../libraries/armem/client/ReaderComponentPlugin.h         | 4 ++++
 source/RobotAPI/libraries/armem/client/Writer.cpp          | 7 +++++++
 source/RobotAPI/libraries/armem/client/Writer.h            | 2 +-
 .../libraries/armem/client/WriterComponentPlugin.cpp       | 7 +++++++
 .../libraries/armem/client/WriterComponentPlugin.h         | 4 ++++
 11 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp
index 37a59b28d..fb757767b 100644
--- a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp
+++ b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp
@@ -84,6 +84,7 @@ namespace armarx
                              << " (took " << armem::toStringMilliSeconds(armem::Time::now() - start) << ").";
         }
         ARMARX_CHECK_NOT_NULL(memory);
+        setMemory(memory);
 
         if (true)
         {
diff --git a/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp b/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp
index f67ed63b5..853e41cf6 100644
--- a/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp
@@ -19,3 +19,10 @@ armarx::armem::client::ComponentPluginUser::~ComponentPluginUser()
     // pass
 }
 
+
+void
+armarx::armem::client::ComponentPluginUser::setMemory(MemoryInterfacePrx memory)
+{
+    setReadingMemory(memory);
+    setWritingMemory(memory);
+}
diff --git a/source/RobotAPI/libraries/armem/client/ComponentPlugin.h b/source/RobotAPI/libraries/armem/client/ComponentPlugin.h
index cb8f3cd0b..2bcf857c2 100644
--- a/source/RobotAPI/libraries/armem/client/ComponentPlugin.h
+++ b/source/RobotAPI/libraries/armem/client/ComponentPlugin.h
@@ -28,6 +28,10 @@ namespace armarx::armem::client
         ComponentPluginUser();
         ~ComponentPluginUser() override;
 
+    protected:
+
+        void setMemory(MemoryInterfacePrx memory);
+
     };
 
 }
diff --git a/source/RobotAPI/libraries/armem/client/Reader.cpp b/source/RobotAPI/libraries/armem/client/Reader.cpp
index 0a0985bd2..07a00a40e 100644
--- a/source/RobotAPI/libraries/armem/client/Reader.cpp
+++ b/source/RobotAPI/libraries/armem/client/Reader.cpp
@@ -99,4 +99,11 @@ namespace armarx::armem::client
         callbacks[id] = callback;
     }
 
+
+    void
+    Reader::setReadingMemory(ReadingInterfacePrx memory)
+    {
+        this->memory = memory;
+    }
+
 }
diff --git a/source/RobotAPI/libraries/armem/client/Reader.h b/source/RobotAPI/libraries/armem/client/Reader.h
index 3ab4b5e45..d169cb539 100644
--- a/source/RobotAPI/libraries/armem/client/Reader.h
+++ b/source/RobotAPI/libraries/armem/client/Reader.h
@@ -32,7 +32,6 @@ namespace armarx::armem::client
          */
         Reader(ReadingInterfacePrx memory = nullptr);
 
-
         MemoryPtr getLatestSnapshots();
         MemoryPtr getAllData();
 
@@ -45,6 +44,8 @@ namespace armarx::armem::client
         void updated(const std::vector<MemoryID>& updatedIDs);
         void subscribe(const MemoryID& entityID, callback callback);
 
+        void setReadingMemory(ReadingInterfacePrx memory);
+
         operator bool() const
         {
             return bool(memory);
diff --git a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp
index ed1fc7b87..357e3d690 100644
--- a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp
@@ -41,3 +41,10 @@ armarx::armem::client::ReaderComponentPluginUser::memoryUpdated(const std::vecto
     fromIce(updatedIDsIce, updatedIDs);
     memoryReader.updated(updatedIDs);
 }
+
+
+void
+armarx::armem::client::ReaderComponentPluginUser::setReadingMemory(ReadingInterfacePrx memory)
+{
+    memoryReader.setReadingMemory(memory);
+}
diff --git a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h
index 20680ab18..54a77363c 100644
--- a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h
+++ b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h
@@ -45,6 +45,10 @@ namespace armarx::armem::client
 
         void memoryUpdated(const std::vector<data::MemoryID>& updatedIDs, const Ice::Current& current) override;
 
+    protected:
+
+        void setReadingMemory(ReadingInterfacePrx memory);
+
     protected:
 
         Reader memoryReader;
diff --git a/source/RobotAPI/libraries/armem/client/Writer.cpp b/source/RobotAPI/libraries/armem/client/Writer.cpp
index cd6b409f8..7941b1768 100644
--- a/source/RobotAPI/libraries/armem/client/Writer.cpp
+++ b/source/RobotAPI/libraries/armem/client/Writer.cpp
@@ -84,4 +84,11 @@ namespace armarx::armem::client
         return result.results.at(0);
     }
 
+
+    void
+    Writer::setWritingMemory(WritingInterfacePrx memory)
+    {
+        this->memory = memory;
+    }
+
 }
diff --git a/source/RobotAPI/libraries/armem/client/Writer.h b/source/RobotAPI/libraries/armem/client/Writer.h
index e7c7d67c1..acd1a575b 100644
--- a/source/RobotAPI/libraries/armem/client/Writer.h
+++ b/source/RobotAPI/libraries/armem/client/Writer.h
@@ -32,7 +32,7 @@ namespace armarx::armem::client
         CommitResult commit(Commit commit);
         EntityUpdateResult commit(const EntityUpdate& update);
 
-
+        void setWritingMemory(WritingInterfacePrx memory);
 
     public:
 
diff --git a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp
index 7b8780f32..f5c648090 100644
--- a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp
@@ -24,3 +24,10 @@ armarx::armem::client::WriterComponentPluginUser::~WriterComponentPluginUser()
 {
     // pass
 }
+
+
+void
+armarx::armem::client::WriterComponentPluginUser::setWritingMemory(WritingInterfacePrx memory)
+{
+    memoryWriter.setWritingMemory(memory);
+}
diff --git a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h
index ea8136d97..f93c9a230 100644
--- a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h
+++ b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h
@@ -36,6 +36,10 @@ namespace armarx::armem::client
         WriterComponentPluginUser();
         ~WriterComponentPluginUser() override;
 
+    protected:
+
+        void setWritingMemory(WritingInterfacePrx memory);
+
     protected:
 
         Writer memoryWriter;
-- 
GitLab