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
56 bool useMongoIds =
true) :
58 PersistentObjectClassSegmentBase()
70 const ::Ice::Current& = Ice::emptyCurrent)
const override
72 return ObjectClassBasePtr::dynamicCast(getEntityById(
id));
83 const ::Ice::Current& = Ice::emptyCurrent)
const override
85 return ObjectClassBasePtr::dynamicCast(getEntityByName(name));
96 const ::Ice::Current& = Ice::emptyCurrent)
const override
98 ObjectClassBasePtr objClass = ObjectClassBasePtr::dynamicCast(getEntityByName(name));
106 objClass->clearParentClasses();
107 ObjectClassList parents = getAllParentClasses(objClass->getName());
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;
131 EntityBaseList children = getEntitiesByAttrValue(
"parentClasses", parentClassName);
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
152 EntityBasePtr entity = getEntityByName(className);
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;
205 ObjectClassPtr root = ObjectClassPtr::dynamicCast(getEntityByName(rootClassName));
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);
223 ObjectClassList childs = getChildClasses(current->getName());
225 if (childs.size() != 0)
227 std::copy(childs.begin(), childs.end(), std::back_inserter(relevantClasses));
233 unique(relevantClasses);
235 return relevantClasses;
245 const ::Ice::Current& = Ice::emptyCurrent)
const override
247 ObjectClassList relevantClasses, classesLeftToCheck;
249 ObjectClassBasePtr current =
250 ObjectClassBasePtr::dynamicCast(getEntityByName(className));
254 return relevantClasses;
262 throw armarx::LocalException(
"current is NULL!");
266 ObjectClassList parents = getParentClasses(current->getName());
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();
283 unique(relevantClasses);
284 return relevantClasses;
293 ObjectComparisonResult
295 const ObjectClassBasePtr& other,
296 const Ice::Current& = Ice::emptyCurrent)
const override
298 if (other->getName() == objClass->getName())
303 ObjectClassList otherParentClasses = getAllParentClasses(other->getName());
304 ObjectClassList parentClasses = getAllParentClasses(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
349 ObjectClassList parentClasses = getAllParentClasses(className);
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());