31#include <MemoryX/interface/core/EntityBase.h>
32#include <MemoryX/interface/memorytypes/MemoryEntities.h>
33#include <MemoryX/interface/memorytypes/MemorySegments.h>
44 virtual public PersistentObjectClassSegmentBase
58 PersistentObjectClassSegmentBase()
70 const ::Ice::Current& = Ice::emptyCurrent)
const override
83 const ::Ice::Current& = Ice::emptyCurrent)
const override
96 const ::Ice::Current& = Ice::emptyCurrent)
const override
98 ObjectClassBasePtr objClass = ObjectClassBasePtr::dynamicCast(
getEntityByName(name));
106 objClass->clearParentClasses();
111 for (
size_t i = 0; i < parents.size(); i++)
113 objClass->addParentClass(parents.at(i)->getName());
128 const ::Ice::Current& = Ice::emptyCurrent)
const override
130 ObjectClassList result;
133 for (EntityBaseList::const_iterator it = children.begin(); it != children.end(); ++it)
135 result.push_back(ObjectClassBasePtr::dynamicCast(*it));
149 const ::Ice::Current& = Ice::emptyCurrent)
const override
156 throw armarx::LocalException(
"Could not find class with name ") << className;
159 ObjectClassBasePtr objClass = ObjectClassBasePtr::dynamicCast(entity);
163 throw armarx::LocalException(
"Could not cast class with name ") << className;
166 NameList parentClassNameList = objClass->getParentClasses();
167 ObjectClassList parentClassList;
169 for (NameList::const_iterator it = parentClassNameList.begin();
170 it != parentClassNameList.end();
178 ObjectClassBasePtr ptr = ObjectClassBasePtr::dynamicCast(
getEntityByName(*it));
182 ARMARX_INFO_S <<
"Could not cast parent " << *it <<
" of class " << className;
186 parentClassList.push_back(ptr);
190 return parentClassList;
201 const ::Ice::Current& = Ice::emptyCurrent)
const override
204 ObjectClassList relevantClasses;
210 <<
"' does not exist in segment!";
211 return ObjectClassList();
214 relevantClasses.push_back(root);
218 while (
index !=
int(relevantClasses.size()))
220 ObjectClassBasePtr current = relevantClasses.at(
index);
225 if (childs.size() != 0)
227 std::copy(childs.begin(), childs.end(), std::back_inserter(relevantClasses));
235 return relevantClasses;
245 const ::Ice::Current& = Ice::emptyCurrent)
const override
247 ObjectClassList relevantClasses, classesLeftToCheck;
249 ObjectClassBasePtr current =
254 return relevantClasses;
262 throw armarx::LocalException(
"current is NULL!");
268 if (parents.size() != 0)
270 std::copy(parents.begin(), parents.end(), std::back_inserter(relevantClasses));
272 parents.begin(), parents.end(), std::back_inserter(classesLeftToCheck));
274 unique(classesLeftToCheck);
275 if (classesLeftToCheck.size() == 0)
279 current = *classesLeftToCheck.rbegin();
280 classesLeftToCheck.pop_back();
284 return relevantClasses;
293 ObjectComparisonResult
295 const ObjectClassBasePtr& other,
296 const Ice::Current& = Ice::emptyCurrent)
const override
298 if (other->getName() == objClass->getName())
307 for (ObjectClassList::iterator itOther = otherParentClasses.begin();
308 itOther != otherParentClasses.end();
311 if (objClass->getName() ==
312 (*itOther)->getName())
317 for (ObjectClassList::iterator it = parentClasses.begin();
318 it != parentClasses.end();
321 if ((*it)->getName() ==
325 return eEqualParentClass;
330 for (ObjectClassList::iterator it = parentClasses.begin(); it != parentClasses.end();
333 if ((*it)->getName() ==
337 return eEqualParentClass;
341 return eNotEqualClass;
346 const ::std::string& parentCandidate,
347 const ::Ice::Current& = Ice::emptyCurrent)
const override
351 for (
const auto& parent : parentClasses)
353 if (parent->getName() == parentCandidate)
365 auto objectClassPtrCompareLess =
366 [](
const ObjectClassBasePtr& lhs,
const ObjectClassBasePtr& rhs)
367 {
return lhs->getName() < rhs->getName(); };
368 auto objectClassPtrCompareEq =
369 [](
const ObjectClassBasePtr& lhs,
const ObjectClassBasePtr& rhs)
370 {
return lhs->getName() == rhs->getName(); };
371 std::sort(classes.begin(), classes.end(), objectClassPtrCompareLess);
372 auto newEnd = std::unique(classes.begin(), classes.end(), objectClassPtrCompareEq);
373 classes.erase(newEnd, classes.end());
#define ARMARXCOMPONENT_IMPORT_EXPORT
PersistentEntitySegment(CollectionInterfacePrx entityCollection, Ice::CommunicatorPtr ic, bool useMongoIds=true)
EntityBasePtr getEntityById(const ::std::string &entityId, const ::Ice::Current &=Ice::emptyCurrent) const override
EntityBaseList getEntitiesByAttrValue(const ::std::string &attrName, const ::std::string &attrValue, const ::Ice::Current &=Ice::emptyCurrent) const override
EntityBasePtr getEntityByName(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) const override
ObjectClassBasePtr getObjectClassById(const ::std::string &id, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve a persistent object class by id.
ObjectClassList getParentClasses(const std::string &className, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve direct parent classes of a class.
ObjectClassBasePtr getObjectClassByNameWithAllParents(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve a object class with all the parent classes, that means also the parent classes of the direct...
ObjectComparisonResult compare(const ObjectClassBasePtr &objClass, const ObjectClassBasePtr &other, const Ice::Current &=Ice::emptyCurrent) const override
Checks whether an object class is equal to another or if they contain an equal parent class.
ObjectClassList getAllParentClasses(const std::string &className, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieves recursively all parent classes for an object class from the database.
static void unique(ObjectClassList &classes)
bool isParentClass(const ::std::string &className, const ::std::string &parentCandidate, const ::Ice::Current &=Ice::emptyCurrent) const override
ObjectClassBasePtr getObjectClassByName(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve a persistent object class by name.
ObjectClassList getClassWithSubclasses(const std::string &rootClassName, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve class and all subclasses.
ObjectClassList getChildClasses(const std::string &parentClassName, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve child classes of a class.
PersistentObjectClassSegment(CollectionInterfacePrx entityCollection, Ice::CommunicatorPtr ic, bool useMongoIds=true)
Creates a new peristent object class segment.
#define ARMARX_ERROR_S
The logging level for unexpected behaviour, that must be fixed.
#define ARMARX_WARNING_S
The logging level for unexpected behaviour, but not a serious problem.
::IceInternal::Handle<::Ice::Communicator > CommunicatorPtr
IceInternal::Handle< PersistentObjectClassSegment > PersistentObjectClassSegmentPtr
IceInternal::Handle< ObjectClass > ObjectClassPtr