Skip to content
Snippets Groups Projects
Commit 549cc194 authored by Rainer Kartmann's avatar Rainer Kartmann
Browse files

Add getObjectClasses()

parent 678b4926
No related branches found
No related tags found
No related merge requests found
#include "ClassReader.h"
#include <RobotAPI/libraries/armem/client/query.h>
#include <RobotAPI/libraries/armem_objects/aron_conversions.h>
#include <RobotAPI/libraries/armem_objects/types.h>
namespace armarx::armem::obj::clazz
{
std::optional<armem::clazz::ObjectClass>
......@@ -27,6 +31,42 @@ namespace armarx::armem::obj::clazz
return std::nullopt;
}
std::map<ObjectID, armem::clazz::ObjectClass>
ClassReader::getObjectClasses(const std::vector<ObjectID>& objectIDs)
{
armem::client::query::Builder builder;
auto entities = builder.coreSegments()
.withName(properties().coreSegmentName)
.providerSegments()
.all()
.entities();
for (const ObjectID& objectID : objectIDs)
{
entities.withName(objectID.getClassID().str()).snapshots().latest();
}
const armem::client::QueryResult result = memoryReader().query(builder);
if (not result.success)
{
throw armem::error::QueryFailed(result.errorMessage);
}
std::map<ObjectID, armem::clazz::ObjectClass> objectClasses;
result.memory.forEachInstance(
[&objectClasses](const armem::wm::EntityInstance& instance) -> bool
{
const ObjectID classID = ObjectID::FromString(instance.id().entityName);
auto aron = instance.dataAs<armarx::armem::arondto::ObjectClass>();
armarx::armem::clazz::fromAron(aron, objectClasses[classID]);
return true;
});
return objectClasses;
}
std::string
ClassReader::propertyPrefix() const
{
......
......@@ -21,11 +21,10 @@
#pragma once
#include <mutex>
#include <map>
#include <optional>
#include <RobotAPI/libraries/armem/client/util/SimpleReaderBase.h>
#include <RobotAPI/libraries/armem_objects/aron_conversions.h>
#include <RobotAPI/libraries/armem_objects/types.h>
namespace armarx::armem::obj::clazz
......@@ -38,11 +37,18 @@ namespace armarx::armem::obj::clazz
std::optional<armem::clazz::ObjectClass> getObjectClass(const std::string& providerName,
const armarx::ObjectID& id);
/**
* @brief Get object class information for object class IDs.
* @param objectIDs The object class IDs.
* @return The corresponding object classes.
* @throw armarx::armem::error::QueryFailed If the memory query failed.
*/
std::map<armarx::ObjectID, armem::clazz::ObjectClass>
getObjectClasses(const std::vector<armarx::ObjectID>& objectIDs);
protected:
std::string propertyPrefix() const final;
Properties defaultProperties() const final;
private:
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment