28 #include <MemoryX/interface/components/PriorKnowledgeInterface.h>
29 #include <MemoryX/interface/core/EntityBase.h>
30 #include <MemoryX/interface/memorytypes/MemoryEntities.h>
31 #include <MemoryX/interface/memorytypes/MemorySegments.h>
44 virtual public ObjectClassMemorySegmentBase
60 ObjectClassMemorySegmentBase::ObjectClassMemorySegmentBase()
62 this->priorKnowledgePrx = priorKnowledgePrx;
65 classesSegmentPrx = priorKnowledgePrx->getObjectClassesSegment();
77 const ::Ice::Current& = Ice::emptyCurrent)
override
79 ObjectClassList touchedClasses;
82 ObjectClassList objectClasses = classesSegmentPrx->getClassWithSubclasses(className);
84 ObjectClassList::iterator iter = objectClasses.begin();
86 while (iter != objectClasses.end())
88 ObjectClassBasePtr priorObjectClass = *iter;
90 ObjectClassBasePtr wmObjectClass = addClass(priorObjectClass);
91 touchedClasses.push_back(wmObjectClass);
96 return touchedClasses;
106 const ::Ice::Current& = Ice::emptyCurrent)
override
109 ObjectClassList relevantClasses;
110 ObjectClassPtr root = ObjectClassPtr::dynamicCast(getEntityByName(rootClassName));
114 return ObjectClassList();
117 relevantClasses.push_back(root);
121 while (
index !=
int(relevantClasses.size()))
123 ObjectClassBasePtr current = relevantClasses.at(
index);
126 ObjectClassList childs = getChildClasses(current->getName());
128 if (childs.size() != 0)
130 std::copy(childs.begin(), childs.end(), std::back_inserter(relevantClasses));
136 return relevantClasses;
147 const ObjectClassBasePtr&
update,
148 const ::Ice::Current& = Ice::emptyCurrent)
override
152 if (
update->getName() != className)
158 EntityBasePtr storedObjectClass = getEntityByName(className);
160 if (!storedObjectClass)
166 std::string refCountAttrName =
"referenceCounter";
168 if (storedObjectClass->hasAttribute(refCountAttrName))
172 storedObjectClass->getAttribute(refCountAttrName)->getValue()->getInt();
178 updateEntity(storedObjectClass->getId(),
update);
180 return ObjectClassBasePtr::dynamicCast(getEntityById(storedObjectClass->getId()));
192 const ::Ice::Current& = Ice::emptyCurrent)
override
195 ObjectClassList objectClasses = classesSegmentPrx->getClassWithSubclasses(className);
197 ObjectClassList::iterator iter = objectClasses.begin();
200 while (iter != objectClasses.end())
202 removeClass((*iter)->getName());
212 for (ObjectClassList::const_iterator it = objects.begin(); it != objects.end(); it++)
221 result += (*it)->getName();
232 static Ice::StringSeq
235 Ice::StringSeq result;
237 for (ObjectClassList::const_iterator it = objects.begin(); it != objects.end(); it++)
241 result.push_back((*it)->getName());
245 result.push_back(
"NULL");
255 for (ObjectClassList::const_iterator it = objects.begin(); it != objects.end(); it++)
257 if ((*it)->getName() == object->getName())
268 addClass(
const ObjectClassBasePtr& objectClass)
270 std::string refCountAttrName =
"referenceCounter";
273 EntityBasePtr storedObjectClass = getEntityByName(objectClass->getName());
275 if (storedObjectClass)
278 if (storedObjectClass->hasAttribute(refCountAttrName))
281 storedObjectClass->getAttribute(refCountAttrName)->getValue()->getInt();
283 storedObjectClass->putAttribute(
288 storedObjectClass->putAttribute(
295 objectClass->putAttribute(
297 std::string
id = addEntity(objectClass);
298 storedObjectClass = getEntityById(
id);
301 return ObjectClassBasePtr::dynamicCast(storedObjectClass);
305 removeClass(
const std::string& className)
307 std::string refCountAttrName =
"referenceCounter";
310 EntityBasePtr storedObjectClass = getEntityByName(className);
312 if (storedObjectClass)
315 if (storedObjectClass->hasAttribute(refCountAttrName))
319 storedObjectClass->getAttribute(refCountAttrName)->getValue()->getInt();
324 storedObjectClass->putAttribute(
330 ARMARX_INFO_S <<
"Removing object class " << storedObjectClass->getName();
331 removeEntity(storedObjectClass->getId());
338 getChildClasses(
const std::string& parentClassName)
340 ObjectClassList result;
341 EntityBaseList children = getEntitiesByAttrValue(
"parentClasses", parentClassName);
343 for (EntityBaseList::const_iterator it = children.begin(); it != children.end(); ++it)
345 result.push_back(ObjectClassBasePtr::dynamicCast(*it));
351 PriorKnowledgeInterfacePrx priorKnowledgePrx;
352 memoryx::PersistentObjectClassSegmentBasePrx classesSegmentPrx;