Mercurial > hg > orthanc
diff OrthancServer/Sources/Database/Compatibility/GenericFind.cpp @ 5668:bd1352bd9d82 find-refactoring
configuring requests for ModalitiesInStudy and SOPClassesInStudy
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 04 Jul 2024 21:57:39 +0200 |
parents | 93dff1fccf36 |
children | e300f22a46f0 |
line wrap: on
line diff
--- a/OrthancServer/Sources/Database/Compatibility/GenericFind.cpp Thu Jul 04 21:31:48 2024 +0200 +++ b/OrthancServer/Sources/Database/Compatibility/GenericFind.cpp Thu Jul 04 21:57:39 2024 +0200 @@ -474,8 +474,7 @@ if (request.GetChildrenRetrieveSpecification(childrenLevel).IsRetrieveIdentifiers()) { - for (std::list<int64_t>::const_iterator it = currentIds.begin(); - it != currentIds.end(); ++it) + for (std::list<int64_t>::const_iterator it = currentIds.begin(); it != currentIds.end(); ++it) { std::list<std::string> ids; transaction_.GetChildrenPublicId(ids, *it); @@ -487,7 +486,27 @@ } } - if (childrenLevel != bottomLevel) + const std::set<MetadataType>& metadata = request.GetChildrenRetrieveSpecification(childrenLevel).GetMetadata(); + + for (std::set<MetadataType>::const_iterator it = metadata.begin(); it != metadata.end(); ++it) + { + for (std::list<int64_t>::const_iterator it2 = currentIds.begin(); it2 != currentIds.end(); ++it2) + { + std::list<std::string> values; + transaction_.GetChildrenMetadata(values, *it2, *it); + + for (std::list<std::string>::const_iterator it3 = values.begin(); it3 != values.end(); ++it3) + { + // TODO-FIND - Inject this value in the response + printf("[%s]\n", it3->c_str()); + } + } + } + + const std::set<DicomTag>& mainDicomTags = request.GetChildrenRetrieveSpecification(childrenLevel).GetMainDicomTags(); + + if (childrenLevel != bottomLevel || + !mainDicomTags.empty()) { std::list<int64_t> childrenIds; @@ -499,6 +518,25 @@ childrenIds.splice(childrenIds.end(), tmp); } + if (!mainDicomTags.empty()) + { + for (std::list<int64_t>::const_iterator it = childrenIds.begin(); it != childrenIds.end(); ++it) + { + DicomMap m; + transaction_.GetMainDicomTags(m, *it); + + for (std::set<DicomTag>::const_iterator it2 = mainDicomTags.begin(); it2 != mainDicomTags.end(); ++it2) + { + std::string value; + if (m.LookupStringValue(value, *it2, false /* no binary allowed */)) + { + // TODO-FIND - Inject this value in the response + printf("<%s>\n", value.c_str()); + } + } + } + } + currentIds = childrenIds; } else