bool mitk::PropertyListDeserializerV1::Deserialize() { bool error(false); m_PropertyList = PropertyList::New(); TiXmlDocument document( m_Filename ); if (!document.LoadFile()) { MITK_ERROR << "Could not open/read/parse " << m_Filename << "\nTinyXML reports: " << document.ErrorDesc() << std::endl; return false; } for( TiXmlElement* propertyElement = document.FirstChildElement("property"); propertyElement != NULL; propertyElement = propertyElement->NextSiblingElement("property") ) { const char* keya = propertyElement->Attribute("key"); std::string key( keya ? keya : ""); const char* typea = propertyElement->Attribute("type"); std::string type( typea ? typea : ""); // hand propertyElement to specific reader std::stringstream propertyDeserializerClassName; propertyDeserializerClassName << type << "Serializer"; std::list<itk::LightObject::Pointer> readers = itk::ObjectFactoryBase::CreateAllInstance(propertyDeserializerClassName.str().c_str()); if (readers.size() < 1) { MITK_ERROR << "No property reader found for " << type; error = true; } if (readers.size() > 1) { MITK_WARN << "Multiple property readers found for " << type << ". Using arbitrary first one."; } for ( std::list<itk::LightObject::Pointer>::iterator iter = readers.begin(); iter != readers.end(); ++iter ) { if (BasePropertySerializer* reader = dynamic_cast<BasePropertySerializer*>( iter->GetPointer() ) ) { BaseProperty::Pointer property = reader->Deserialize( propertyElement->FirstChildElement() ); if (property.IsNotNull()) { m_PropertyList->ReplaceProperty(key, property); } else { MITK_ERROR << "There were errors while loding property '" << key << "' of type " << type << ". Your data may be corrupted"; error = true; } break; } } } return !error; }
bool mitk::CheckUID(const mitk::BaseData* data, const NodeUIDType& uid) { bool result = false; BaseProperty::Pointer uidProp = data->GetProperty(mitk::Prop_UID); if (uidProp.IsNotNull()) { result = uidProp->GetValueAsString() == uid; } return result; };
mitk::NodeUIDType mitk::EnsureUID(mitk::BaseData* data) { if (!data) { mitkThrow() << "Cannot ensure node UID. Passed node pointer is nullptr."; } BaseProperty::Pointer uidProp = data->GetProperty(mitk::Prop_UID); std::string propUID = ""; if (uidProp.IsNotNull()) { propUID = uidProp->GetValueAsString(); } else { mitk::UIDGenerator generator; propUID = generator.GetUID(); data->SetProperty(mitk::Prop_UID, mitk::StringProperty::New(propUID)); } return propUID; };