10#include <VisionX/libraries/armem_human/aron/HumanActivity.aron.generated.h>
28 if (not
query.providerName.empty())
51 if (not
query.providerName.empty())
63 std::vector<HumanActivity>
69 std::vector<HumanActivity> activities;
78 entitySnapshot.forEachInstance(
79 [&activities, &
timestamp, &maxAge](
const auto& entityInstance)
84 timestamp - entityInstance.metadata().referencedTime;
90 ARMARX_CHECK(aronDto) <<
"Failed casting to HumanActivity";
95 activities.push_back(activity);
106 return "mem.human.activity.";
112 return {.memoryName =
"Human", .coreSegmentName =
"HumanActivity"};
139 return {.activities = {},
147 if (
query.providerName.empty())
151 std::vector<HumanActivity> allActivities;
153 coreSegment.forEachProviderSegment(
154 [
this, &allActivities, &
query](
const auto& providerSegment)
156 const std::vector<HumanActivity> activities =
158 std::copy(activities.begin(),
160 std::back_inserter(allActivities));
163 if (allActivities.empty())
165 return {.activities = {},
167 .errorMessage =
"No entities"};
176 if (not coreSegment.hasProviderSegment(
query.providerName))
179 <<
"` does not exist (yet).";
186 coreSegment.getProviderSegment(
query.providerName);
188 if (providerSegment.
empty())
191 return {.activities = {},
193 .errorMessage =
"No entities"};
210 std::vector<HumanActivity>
212 const std::string& lastName,
214 const std::string& providerName)
216 Query queryDefinition =
Query{.providerName = providerName,
220 auto queryResult =
query(queryDefinition,
true);
222 std::vector<HumanActivity> matchingActivities;
226 for (
const auto& activity : queryResult.activities)
228 if (activity.personID.has_value() &&
229 activity.personID.value().firstName == firstName &&
230 activity.personID.value().lastName == lastName)
232 matchingActivities.push_back(activity);
236 if (matchingActivities.empty())
238 ARMARX_INFO <<
"No activities found for person " << firstName <<
" " << lastName;
246 return matchingActivities;
249 std::optional<HumanActivity>
251 const std::string& lastName,
252 const std::string& providerName)
254 Query queryDefinition =
Query{.providerName = providerName,
258 auto queryResult =
query(queryDefinition,
true);
263 std::optional<HumanActivity> latestActivity;
266 for (
const auto& activity : queryResult.activities)
268 if (activity.personID.has_value() &&
269 activity.personID.value().firstName == firstName &&
270 activity.personID.value().lastName == lastName)
272 if (!latestActivity.has_value() || activity.startTime > latestTime)
274 latestActivity = activity;
275 latestTime = activity.startTime;
280 if (latestActivity.has_value())
282 return latestActivity;
286 ARMARX_INFO <<
"No activities found for person " << firstName <<
" " << lastName;
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
static Duration Minutes(std::int64_t minutes)
Constructs a duration in minutes.
CoreSegmentT & getCoreSegment(const std::string &name)
bool forEachEntity(EntityFunctionT &&func)
QueryResult query(const QueryInput &input) const
Perform a query on the WM.
The query::Builder class provides a fluent-style specification of hierarchical queries.
QueryInput buildQueryInput() const
CoreSegmentSelector & coreSegments()
Start specifying core segments.
CoreSegmentSelector & withName(const std::string &name) override
ProviderSegmentSelector & providerSegments()
Start specifying provider segments.
EntitySelector & all() override
SnapshotSelector & snapshots()
Start specifying entity snapshots.
ProviderSegmentSelector & withName(const std::string &name) override
EntitySelector & entities()
Start specifying entities.
ProviderSegmentSelector & all() override
SnapshotSelector & beforeOrAtTime(Time timestamp)
SnapshotSelector & latest()
const armem::client::Reader & memoryReader() const
const Properties & properties() const
Result query(const Query &query, bool latest) const
Properties defaultProperties() const override
std::optional< HumanActivity > queryLatestActivityForPerson(const std::string &firstName, const std::string &lastName, const std::string &providerName="")
std::string propertyPrefix() const override
::armarx::armem::client::query::Builder buildQuery(const Query &query) const
~ActivityReader() override
std::vector< HumanActivity > queryActivitiesForPerson(const std::string &firstName, const std::string &lastName, const Duration &maxAge, const std::string &providerName="")
::armarx::armem::client::query::Builder buildLatestQuery(const Query &query) const
std::vector< HumanActivity > asHumanActivities(const wm::ProviderSegment &providerSegment, const DateTime ×tamp, const Duration &maxAge) const
Represents a point in time.
bool isPositive() const
Tests whether the duration is positive (value in µs > 0).
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
#define ARMARX_INFO
The normal logging level.
#define ARMARX_DEBUG
The logging level for output that is only interesting while debugging.
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
void fromAron(const armarx::human::arondto::HumanPose &dto, HumanPose &bo)
armarx::core::time::Duration Duration
std::optional< AronClass > tryCast(const wm::EntityInstance &item)
Tries to cast a armem::EntityInstance to AronClass.
std::string GetHandledExceptionString()
auto & getLatestSnapshot(int snapshotIndex=0)
Retrieve the latest entity snapshot.
wm::Memory memory
The slice of the memory that matched the query.