From 70cd3ab20ffd69249b1eeff5c55b07bde3f20092 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Wed, 4 May 2022 18:23:13 +0200
Subject: [PATCH] impl. aron events / conversion

---
 source/armarx/navigation/core/aron/Events.xml | 12 ++++++
 .../navigation/core/aron_conversions.cpp      | 43 +++++++++++++++++++
 .../armarx/navigation/core/aron_conversions.h | 21 ++++++++-
 .../memory/client/events/Writer.cpp           | 28 +++++++-----
 .../navigation/memory/client/events/Writer.h  |  5 +--
 .../memory/client/parameterization/Writer.h   |  2 +-
 .../event_publishing/MemoryPublisher.cpp      |  2 +-
 7 files changed, 96 insertions(+), 17 deletions(-)

diff --git a/source/armarx/navigation/core/aron/Events.xml b/source/armarx/navigation/core/aron/Events.xml
index d2009212..d7d29939 100644
--- a/source/armarx/navigation/core/aron/Events.xml
+++ b/source/armarx/navigation/core/aron/Events.xml
@@ -41,5 +41,17 @@
             </ObjectChild>
         </Object>
 
+        <Object name='armarx::navigation::core::arondto::UserAbortTriggeredEvent'>
+            <ObjectChild key='pose'>
+                <Pose />
+            </ObjectChild>
+        </Object>
+
+        <Object name='armarx::navigation::core::arondto::GlobalPlanningFailedEvent'>
+            <ObjectChild key='message'>
+                <String />
+            </ObjectChild>
+        </Object>
+
     </GenerateTypes>
 </AronTypeDefinition>
diff --git a/source/armarx/navigation/core/aron_conversions.cpp b/source/armarx/navigation/core/aron_conversions.cpp
index 84b847e3..4a974067 100644
--- a/source/armarx/navigation/core/aron_conversions.cpp
+++ b/source/armarx/navigation/core/aron_conversions.cpp
@@ -3,6 +3,7 @@
 #include <range/v3/range/conversion.hpp>
 #include <range/v3/view/transform.hpp>
 
+#include "RobotAPI/libraries/aron/common/aron_conversions/core.h"
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 #include <RobotAPI/libraries/core/Trajectory.h>
 
@@ -121,6 +122,34 @@ namespace armarx::navigation::core
         aron::fromAron(dto.pose, bo.pose.matrix());
     }
 
+    void
+    fromAron(const armarx::navigation::core::arondto::GlobalPlanningFailedEvent& dto,
+             armarx::navigation::core::GlobalPlanningFailedEvent& bo)
+    {
+        aron::fromAron(dto.message, bo.message);
+    }
+
+    void
+    toAron(armarx::navigation::core::arondto::GlobalPlanningFailedEvent& dto,
+           const armarx::navigation::core::GlobalPlanningFailedEvent& bo)
+    {
+        aron::toAron(dto.message, bo.message);
+    }
+
+    void
+    toAron(armarx::navigation::core::arondto::MovementStartedEvent& dto,
+           const armarx::navigation::core::MovementStartedEvent& bo)
+    {
+        aron::toAron(dto.startPose, bo.startPose.matrix());
+    }
+
+    void
+    fromAron(const armarx::navigation::core::arondto::MovementStartedEvent& dto,
+             armarx::navigation::core::MovementStartedEvent& bo)
+    {
+        aron::fromAron(dto.startPose, bo.startPose.matrix());
+    }
+
     void
     toAron(armarx::navigation::core::arondto::WaypointReachedEvent& dto,
            const armarx::navigation::core::WaypointReachedEvent& bo)
@@ -153,4 +182,18 @@ namespace armarx::navigation::core
         aron::fromAron(dto.message, bo.message);
     }
 
+    void
+    toAron(armarx::navigation::core::arondto::UserAbortTriggeredEvent& dto,
+           const armarx::navigation::core::UserAbortTriggeredEvent& bo)
+    {
+        aron::toAron(dto.pose, bo.pose.matrix());
+    }
+
+    void
+    fromAron(const armarx::navigation::core::arondto::UserAbortTriggeredEvent& dto,
+             armarx::navigation::core::UserAbortTriggeredEvent& bo)
+    {
+        aron::fromAron(dto.pose, bo.pose.matrix());
+    }
+
 } // namespace armarx::navigation::core
diff --git a/source/armarx/navigation/core/aron_conversions.h b/source/armarx/navigation/core/aron_conversions.h
index 4e0a7bd4..654fd409 100644
--- a/source/armarx/navigation/core/aron_conversions.h
+++ b/source/armarx/navigation/core/aron_conversions.h
@@ -63,20 +63,39 @@ namespace armarx::navigation::core
     // Events
     void toAron(armarx::navigation::core::arondto::GoalReachedEvent& dto,
                 const armarx::navigation::core::GoalReachedEvent& bo);
+                
     void fromAron(const armarx::navigation::core::arondto::GoalReachedEvent& dto,
                   armarx::navigation::core::GoalReachedEvent& bo);
 
+    void toAron(armarx::navigation::core::arondto::MovementStartedEvent& dto,
+                const armarx::navigation::core::MovementStartedEvent& bo);
+
+    void fromAron(const armarx::navigation::core::arondto::GlobalPlanningFailedEvent& dto,
+                  armarx::navigation::core::GlobalPlanningFailedEvent& bo);
+
+    void toAron(armarx::navigation::core::arondto::GlobalPlanningFailedEvent& dto,
+                const armarx::navigation::core::GlobalPlanningFailedEvent& bo);
+                
+    void fromAron(const armarx::navigation::core::arondto::MovementStartedEvent& dto,
+                  armarx::navigation::core::MovementStartedEvent& bo);
+
     void toAron(armarx::navigation::core::arondto::WaypointReachedEvent& dto,
                 const armarx::navigation::core::WaypointReachedEvent& bo);
+
     void fromAron(const armarx::navigation::core::arondto::WaypointReachedEvent& dto,
                   armarx::navigation::core::WaypointReachedEvent& bo);
 
-
     void toAron(armarx::navigation::core::arondto::InternalErrorEvent& dto,
                 const armarx::navigation::core::InternalErrorEvent& bo);
+
     void fromAron(const armarx::navigation::core::arondto::InternalErrorEvent& dto,
                   armarx::navigation::core::InternalErrorEvent& bo);
 
+    void toAron(armarx::navigation::core::arondto::UserAbortTriggeredEvent& dto,
+                const armarx::navigation::core::UserAbortTriggeredEvent& bo);
+
+    void fromAron(const armarx::navigation::core::arondto::UserAbortTriggeredEvent& dto,
+                  armarx::navigation::core::UserAbortTriggeredEvent& bo);
 
 
 } // namespace armarx::navigation::core
diff --git a/source/armarx/navigation/memory/client/events/Writer.cpp b/source/armarx/navigation/memory/client/events/Writer.cpp
index b15a93ca..4325c44a 100644
--- a/source/armarx/navigation/memory/client/events/Writer.cpp
+++ b/source/armarx/navigation/memory/client/events/Writer.cpp
@@ -64,35 +64,41 @@ namespace armarx::navigation::memory::client::events
     bool
     Writer::store(const core::GoalReachedEvent& event, const std::string& clientID)
     {
-        return storeImpl(event, "GoalReachedEvent", clientID);
+        return storeImpl<core::arondto::GoalReachedEvent>(event, "GoalReachedEvent", clientID);
     }
 
     bool
     Writer::store(const core::WaypointReachedEvent& event, const std::string& clientID)
     {
-        return storeImpl(event, "WaypointReachedEvent", clientID);
+        return storeImpl<core::arondto::WaypointReachedEvent>(event, "WaypointReachedEvent", clientID);
     }
 
     bool
     Writer::store(const core::InternalErrorEvent& event, const std::string& clientID)
     {
-        return storeImpl(event, "InternalErrorEvent", clientID);
+        return storeImpl<core::arondto::InternalErrorEvent>(event, "InternalErrorEvent", clientID);
     }
 
     bool
     Writer::store(const core::GlobalPlanningFailedEvent& event, const std::string& clientID)
     {
-        return storeImpl(event, "GlobalPlanningFailedEvent", clientID);
+        return storeImpl<core::arondto::GlobalPlanningFailedEvent>(event, "GlobalPlanningFailedEvent", clientID);
     }
 
     bool
     Writer::store(const core::MovementStartedEvent& event, const std::string& clientID)
     {
-        return storeImpl(event, "MovementStartedEvent", clientID);
+        return storeImpl<core::arondto::MovementStartedEvent>(event, "MovementStartedEvent", clientID);
+    }
+
+    bool
+    Writer::store(const core::UserAbortTriggeredEvent& event, const std::string& clientID)
+    {
+        return storeImpl<core::arondto::UserAbortTriggeredEvent>(event, "UserAbortTriggered", clientID);
     }
 
 
-    template <typename EventT>
+    template <typename AronEventT, typename EventT>
     bool
     Writer::storeImpl(const EventT& event,
                       const std::string& eventName,
@@ -102,7 +108,7 @@ namespace armarx::navigation::memory::client::events
 
         ARMARX_INFO << "Storing event `" << eventName << "` in memory.";
 
-        armem::Time ts = armem::Time(armem::Duration::MicroSeconds(event.timestamp.count()));
+        const auto& timestamp = event.timestamp;
 
         armem::EntityUpdate update;
         update.entityID = armem::MemoryID()
@@ -110,14 +116,14 @@ namespace armarx::navigation::memory::client::events
                               .withCoreSegmentName(properties().coreSegmentName)
                               .withProviderSegmentName(clientID)
                               .withEntityName(eventName)
-                              .withTimestamp(ts);
-        update.timeCreated = ts;
+                              .withTimestamp(timestamp);
+        update.timeCreated = timestamp;
 
-        // FIXME auto dto = core::toAron(event);
+        const auto dto = core::toAron<AronEventT>(event);
 
         aron::data::DictPtr element(new aron::data::Dict);
         element->addElement("event", std::make_shared<aron::data::String>(eventName));
-        // FIXME element->addElement("data", dto.toAron());
+        element->addElement("data", dto.toAron());
 
         update.instancesData = {element};
 
diff --git a/source/armarx/navigation/memory/client/events/Writer.h b/source/armarx/navigation/memory/client/events/Writer.h
index 833f3705..16812c15 100644
--- a/source/armarx/navigation/memory/client/events/Writer.h
+++ b/source/armarx/navigation/memory/client/events/Writer.h
@@ -43,7 +43,7 @@ namespace armarx::navigation::memory::client::events
 
         bool store(const core::InternalErrorEvent& event, const std::string& clientID);
 
-        // bool store(const core::GoalReachedEvent& event, const std::string& clientID);
+        bool store(const core::UserAbortTriggeredEvent& event, const std::string& clientID);
 
         bool store(const core::GlobalPlanningFailedEvent& event, const std::string& clientID);
         bool store(const core::MovementStartedEvent& event, const std::string& clientID);
@@ -57,8 +57,7 @@ namespace armarx::navigation::memory::client::events
         bool store(const armem::Commit& commit);
         bool store(const armem::EntityUpdate& commit);
 
-
-        template <typename EventT>
+        template <typename AronEventT, typename EventT>
         bool
         storeImpl(const EventT& event, const std::string& eventName, const std::string& clientID);
     };
diff --git a/source/armarx/navigation/memory/client/parameterization/Writer.h b/source/armarx/navigation/memory/client/parameterization/Writer.h
index 58c6cd22..73b927d7 100644
--- a/source/armarx/navigation/memory/client/parameterization/Writer.h
+++ b/source/armarx/navigation/memory/client/parameterization/Writer.h
@@ -38,7 +38,7 @@ namespace armarx::navigation::memory::client::param
 
         bool store(const std::unordered_map<core::StackLayer, aron::data::DictPtr>& stack,
                    const std::string& clientID,
-                   const core::TimestampUs& timestamp);
+                   const armarx::core::time::DateTime& timestamp);
 
         std::string propertyPrefix() const override;
         Properties defaultProperties() const override;
diff --git a/source/armarx/navigation/server/event_publishing/MemoryPublisher.cpp b/source/armarx/navigation/server/event_publishing/MemoryPublisher.cpp
index 60adb3a6..8f3b9d42 100644
--- a/source/armarx/navigation/server/event_publishing/MemoryPublisher.cpp
+++ b/source/armarx/navigation/server/event_publishing/MemoryPublisher.cpp
@@ -35,7 +35,7 @@ namespace armarx::navigation::server
     void
     MemoryPublisher::userAbortTriggered(const core::UserAbortTriggeredEvent& event)
     {
-        // eventsWriter->store(event, clientId);
+        eventsWriter->store(event, clientId);
     }
 
 
-- 
GitLab