Writer.cpp
Go to the documentation of this file.
1 #include "Writer.h"
2 
3 #include <algorithm>
4 #include <iterator>
5 #include <mutex>
6 #include <string>
7 
9 
15 
16 #include <armarx/navigation/human/aron/Human.aron.generated.h>
20 
22 {
23  Writer::~Writer() = default;
24 
25  bool
27  // const std::string& name,
28  const std::string& providerName,
29  const armem::Time& timestamp)
30  {
31  std::lock_guard g{writeMutex};
32 
33  const auto result =
35 
36  if (not result.success)
37  {
38  ARMARX_ERROR << result.errorMessage;
39 
40  // TODO(fabian.reister): message
41  return false;
42  }
43 
44  const auto providerId = armem::MemoryID(result.segmentID);
45  const auto entityID = providerId.withEntityName("humans").withTimestamp(timestamp);
46 
48  update.entityID = entityID;
49 
50  std::transform(humans.begin(),
51  humans.end(),
52  std::back_inserter(update.instancesData),
54  {
55  navigation::human::arondto::Human dto;
56  toAron(dto, human);
57 
58  return dto.toAron();
59  });
60 
61 
62  update.referencedTime = timestamp;
63 
64  ARMARX_DEBUG << "Committing " << update << " at time " << timestamp;
66 
67  ARMARX_DEBUG << updateResult;
68 
69  if (not updateResult.success)
70  {
71  ARMARX_ERROR << updateResult.errorMessage;
72  }
73 
74  return updateResult.success;
75  }
76 
77  bool
79  // const std::string& name,
80  const std::string& providerName,
81  const armem::Time& timestamp)
82  {
83  std::lock_guard g{writeMutex};
84 
85  const auto result =
87 
88  if (not result.success)
89  {
90  ARMARX_ERROR << result.errorMessage;
91 
92  // TODO(fabian.reister): message
93  return false;
94  }
95 
96  const auto providerId = armem::MemoryID(result.segmentID);
97  const auto entityID = providerId.withEntityName("groups").withTimestamp(timestamp);
98 
100  update.entityID = entityID;
101 
102  std::transform(groups.begin(),
103  groups.end(),
104  std::back_inserter(update.instancesData),
106  {
107  navigation::human::arondto::HumanGroup dto;
108  toAron(dto, group);
109 
110  return dto.toAron();
111  });
112 
113 
114  update.referencedTime = timestamp;
115 
116  ARMARX_DEBUG << "Committing " << update << " at time " << timestamp;
118 
119  ARMARX_DEBUG << updateResult;
120 
121  if (not updateResult.success)
122  {
123  ARMARX_ERROR << updateResult.errorMessage;
124  }
125 
126  return updateResult.success;
127  }
128 
129  std::string
131  {
132  return "mem.nav.human.";
133  }
134 
135  armarx::armem::client::util::SimpleWriterBase::SimpleWriterBase::Properties
137  {
138  return SimpleWriterBase::Properties{.memoryName = memory::constants::NavigationMemoryName,
139  .coreSegmentName =
141  }
142 
143 } // namespace armarx::navigation::memory::client::human
armarx::navigation::human::HumanGroup
Definition: types.h:50
armarx::navigation::human::Human
Definition: types.h:36
armarx::armem::client::Writer::addSegment
data::AddSegmentResult addSegment(const std::string &coreSegmentName, const std::string &providerSegmentName, bool clearWhenExists=false) const
Definition: Writer.cpp:16
armarx::armem::EntityUpdateResult
Result of an EntityUpdate.
Definition: Commit.h:69
MemoryID.h
armarx::navigation::memory::client::human
Definition: Reader.cpp:23
forward_declarations.h
types.h
armarx::navigation::memory::constants::NavigationMemoryName
const std::string NavigationMemoryName
Definition: constants.h:29
armarx::navigation::human::Humans
std::vector< Human > Humans
Definition: types.h:48
Dict.h
armarx::navigation::memory::client::human::Writer::~Writer
~Writer() override
armarx::navigation::memory::client::human::Writer::store
bool store(const armarx::navigation::human::Humans &humans, const std::string &providerName, const armem::Time &timestamp)
Definition: Writer.cpp:26
armarx::armem::client::util::SimpleWriterBase::memoryWriter
armem::client::Writer & memoryWriter()
Definition: SimpleWriterBase.cpp:52
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:184
armarx::armem::client::util::SimpleWriterBase::Properties::memoryName
std::string memoryName
Definition: SimpleWriterBase.h:49
armarx::armem::EntityUpdate
An update of an entity for a specific point in time.
Definition: Commit.h:25
armarx::navigation::memory::client::human::Writer::defaultProperties
Properties defaultProperties() const override
Definition: Writer.cpp:136
aron_conversions.h
armarx::armem::client::Writer::commit
CommitResult commit(const Commit &commit) const
Writes a Commit to the memory.
Definition: Writer.cpp:59
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:196
armarx::navigation::memory::constants::HumanCoreSegmentName
const std::string HumanCoreSegmentName
Definition: constants.h:37
armarx::armem::server::ltm::util::mongodb::detail::update
bool update(mongocxx::collection &coll, const nlohmann::json &query, const nlohmann::json &update)
Definition: mongodb.cpp:68
armarx::transform
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT >>
Convenience function (with less typing) to transform a container of type InputT into the same contain...
Definition: algorithm.h:351
Writer.h
Commit.h
armarx::core::time::DateTime
Represents a point in time.
Definition: DateTime.h:24
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
constants.h
Logging.h
SimpleWriterBase.h
armarx::navigation::human::HumanGroups
std::vector< HumanGroup > HumanGroups
Definition: types.h:60
armarx::navigation::memory::client::human::Writer::propertyPrefix
std::string propertyPrefix() const override
Definition: Writer.cpp:130
armarx::human::MemoryID
const armem::MemoryID MemoryID
Definition: memory_ids.cpp:28