diff --git a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp index ca365080d21ef1ca6eab5c779d50231e4f1b007a..de1a50c49b2ba21bf256c74dfca3886fa1b12dc9 100644 --- a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp @@ -36,10 +36,10 @@ namespace armarx::armem::obj::clazz { armem::client::query::Builder builder; auto& entities = builder.coreSegments() - .withName(properties().coreSegmentName) - .providerSegments() - .all() - .entities(); + .withName(properties().coreSegmentName) + .providerSegments() + .all() + .entities(); for (const ObjectID& objectID : objectIDs) { @@ -67,6 +67,40 @@ namespace armarx::armem::obj::clazz return objectClasses; } + std::map<ObjectID, armem::clazz::ObjectClass> + ClassReader::getAllObjectClasses() + { + armem::client::query::Builder builder; + + // clang-format off + builder + .coreSegments().withName(properties().coreSegmentName) + .providerSegments().all() + .entities().all() + .snapshots().latest(); + // clang-format on + + 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 { diff --git a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h index 8dd50018a7483d7ce645475dd49f3dd840fe8f75..4fe1943895372fd26c1e7fda7a59dd5b77c42ee6 100644 --- a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h +++ b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h @@ -46,6 +46,8 @@ namespace armarx::armem::obj::clazz std::map<armarx::ObjectID, armem::clazz::ObjectClass> getObjectClasses(const std::vector<armarx::ObjectID>& objectIDs); + std::map<armarx::ObjectID, armem::clazz::ObjectClass> getAllObjectClasses(); + protected: std::string propertyPrefix() const final; Properties defaultProperties() const final;