| 324 | } |
| 325 | |
| 326 | tinyxml2::XMLElement *mitk::MultiLabelIOHelper::PropertyToXMLElement(tinyxml2::XMLDocument &doc, const std::string &key, const BaseProperty *property) |
| 327 | { |
| 328 | auto *keyelement = doc.NewElement("property"); |
| 329 | keyelement->SetAttribute("key", key.c_str()); |
| 330 | keyelement->SetAttribute("type", property->GetNameOfClass()); |
| 331 | |
| 332 | // construct name of serializer class |
| 333 | std::string serializername(property->GetNameOfClass()); |
| 334 | serializername += "Serializer"; |
| 335 | |
| 336 | std::list<itk::LightObject::Pointer> allSerializers = |
| 337 | itk::ObjectFactoryBase::CreateAllInstance(serializername.c_str()); |
| 338 | if (allSerializers.size() < 1) |
| 339 | MITK_ERROR << "No serializer found for " << property->GetNameOfClass() << ". Skipping object"; |
| 340 | |
| 341 | if (allSerializers.size() > 1) |
| 342 | MITK_WARN << "Multiple serializers found for " << property->GetNameOfClass() << "Using arbitrarily the first one."; |
| 343 | |
| 344 | for (auto iter = allSerializers.begin(); iter != allSerializers.end(); |
| 345 | ++iter) |
| 346 | { |
| 347 | if (auto *serializer = dynamic_cast<BasePropertySerializer *>(iter->GetPointer())) |
| 348 | { |
| 349 | serializer->SetProperty(property); |
| 350 | try |
| 351 | { |
| 352 | auto *valueelement = serializer->Serialize(doc); |
| 353 | if (valueelement) |
| 354 | keyelement->InsertEndChild(valueelement); |
| 355 | } |
| 356 | catch (std::exception &e) |
| 357 | { |
| 358 | MITK_ERROR << "Serializer " << serializer->GetNameOfClass() << " failed: " << e.what(); |
| 359 | } |
| 360 | break; |
| 361 | } |
| 362 | } |
| 363 | return keyelement; |
| 364 | } |
| 365 | |
| 366 | bool mitk::MultiLabelIOHelper::PropertyFromXMLElement(std::string &key, |
| 367 | mitk::BaseProperty::Pointer &prop, |
nothing calls this directly
no test coverage detected