void DynamicType::RegisterObject(const DynamicObject::Ptr& object) { String name = object->GetName(); { ObjectLock olock(this); ObjectMap::iterator it = m_ObjectMap.find(name); if (it != m_ObjectMap.end()) { if (it->second == object) return; BOOST_THROW_EXCEPTION(std::runtime_error("RegisterObject() found existing object with the same name: " + name)); } m_ObjectMap[name] = object; m_ObjectVector.push_back(object); } }
DbObject::Ptr DbObject::GetOrCreateByObject(const DynamicObject::Ptr& object) { DbObject::Ptr dbobj = static_pointer_cast<DbObject>(object->GetExtension("DbObject")); if (dbobj) return dbobj; DbType::Ptr dbtype = DbType::GetByName(object->GetType()->GetName()); if (!dbtype) return DbObject::Ptr(); Service::Ptr service; String name1, name2; service = dynamic_pointer_cast<Service>(object); if (service) { Host::Ptr host = service->GetHost(); if (!host) return DbObject::Ptr(); name1 = service->GetHost()->GetName(); name2 = service->GetShortName(); } else { name1 = object->GetName(); } dbobj = dbtype->GetOrCreateObjectByName(name1, name2); { ObjectLock olock(object); dbobj->SetObject(object); object->SetExtension("DbObject", dbobj); } return dbobj; }
static bool ObjectNameLessComparer(const DynamicObject::Ptr& a, const DynamicObject::Ptr& b) { return a->GetName() < b->GetName(); }