Mercurial > hg > orthanc
diff OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp @ 5772:093a8693ba16 find-refactoring
replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 11 Sep 2024 20:49:34 +0200 |
parents | 1b0e67be3c15 |
children | de33982a0bf4 |
line wrap: on
line diff
--- a/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp Wed Sep 11 16:31:11 2024 +0200 +++ b/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp Wed Sep 11 20:49:34 2024 +0200 @@ -1437,7 +1437,7 @@ dbRequest.mutable_find()->set_retrieve_labels(request.IsRetrieveLabels()); dbRequest.mutable_find()->set_retrieve_attachments(request.IsRetrieveAttachments()); dbRequest.mutable_find()->set_retrieve_parent_identifier(request.IsRetrieveParentIdentifier()); - dbRequest.mutable_find()->set_retrieve_at_least_one_instance(request.IsRetrieveOneInstanceIdentifier()); + dbRequest.mutable_find()->set_retrieve_one_instance_metadata_and_attachments(request.IsRetrieveOneInstanceMetadataAndAttachments()); if (request.GetLevel() == ResourceType_Study || request.GetLevel() == ResourceType_Series || @@ -1541,6 +1541,40 @@ Convert(*target, ResourceType_Series, source.children_instances_content()); } + if (request.IsRetrieveOneInstanceMetadataAndAttachments()) + { + std::map<MetadataType, std::string> metadata; + for (int i = 0; i < source.one_instance_metadata().size(); i++) + { + MetadataType key = static_cast<MetadataType>(source.one_instance_metadata(i).key()); + if (metadata.find(key) == metadata.end()) + { + metadata[key] = source.one_instance_metadata(i).value(); + } + else + { + throw OrthancException(ErrorCode_DatabasePlugin); + } + } + + std::map<FileContentType, FileInfo> attachments; + + for (int i = 0; i < source.one_instance_attachments().size(); i++) + { + FileInfo info(Convert(source.attachments(i))); + if (attachments.find(info.GetContentType()) == attachments.end()) + { + attachments[info.GetContentType()] = info; + } + else + { + throw OrthancException(ErrorCode_DatabasePlugin); + } + } + + target->SetOneInstanceMetadataAndAttachments(source.one_instance_public_id(), metadata, attachments); + } + response.Add(target.release()); }