comparison 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
comparison
equal deleted inserted replaced
5667:93dff1fccf36 5668:bd1352bd9d82
472 { 472 {
473 ResourceType childrenLevel = GetChildResourceType(currentLevel); 473 ResourceType childrenLevel = GetChildResourceType(currentLevel);
474 474
475 if (request.GetChildrenRetrieveSpecification(childrenLevel).IsRetrieveIdentifiers()) 475 if (request.GetChildrenRetrieveSpecification(childrenLevel).IsRetrieveIdentifiers())
476 { 476 {
477 for (std::list<int64_t>::const_iterator it = currentIds.begin(); 477 for (std::list<int64_t>::const_iterator it = currentIds.begin(); it != currentIds.end(); ++it)
478 it != currentIds.end(); ++it)
479 { 478 {
480 std::list<std::string> ids; 479 std::list<std::string> ids;
481 transaction_.GetChildrenPublicId(ids, *it); 480 transaction_.GetChildrenPublicId(ids, *it);
482 481
483 for (std::list<std::string>::const_iterator it2 = ids.begin(); it2 != ids.end(); ++it2) 482 for (std::list<std::string>::const_iterator it2 = ids.begin(); it2 != ids.end(); ++it2)
485 resource->AddChildIdentifier(childrenLevel, *it2); 484 resource->AddChildIdentifier(childrenLevel, *it2);
486 } 485 }
487 } 486 }
488 } 487 }
489 488
490 if (childrenLevel != bottomLevel) 489 const std::set<MetadataType>& metadata = request.GetChildrenRetrieveSpecification(childrenLevel).GetMetadata();
490
491 for (std::set<MetadataType>::const_iterator it = metadata.begin(); it != metadata.end(); ++it)
492 {
493 for (std::list<int64_t>::const_iterator it2 = currentIds.begin(); it2 != currentIds.end(); ++it2)
494 {
495 std::list<std::string> values;
496 transaction_.GetChildrenMetadata(values, *it2, *it);
497
498 for (std::list<std::string>::const_iterator it3 = values.begin(); it3 != values.end(); ++it3)
499 {
500 // TODO-FIND - Inject this value in the response
501 printf("[%s]\n", it3->c_str());
502 }
503 }
504 }
505
506 const std::set<DicomTag>& mainDicomTags = request.GetChildrenRetrieveSpecification(childrenLevel).GetMainDicomTags();
507
508 if (childrenLevel != bottomLevel ||
509 !mainDicomTags.empty())
491 { 510 {
492 std::list<int64_t> childrenIds; 511 std::list<int64_t> childrenIds;
493 512
494 for (std::list<int64_t>::const_iterator it = currentIds.begin(); it != currentIds.end(); ++it) 513 for (std::list<int64_t>::const_iterator it = currentIds.begin(); it != currentIds.end(); ++it)
495 { 514 {
497 transaction_.GetChildrenInternalId(tmp, *it); 516 transaction_.GetChildrenInternalId(tmp, *it);
498 517
499 childrenIds.splice(childrenIds.end(), tmp); 518 childrenIds.splice(childrenIds.end(), tmp);
500 } 519 }
501 520
521 if (!mainDicomTags.empty())
522 {
523 for (std::list<int64_t>::const_iterator it = childrenIds.begin(); it != childrenIds.end(); ++it)
524 {
525 DicomMap m;
526 transaction_.GetMainDicomTags(m, *it);
527
528 for (std::set<DicomTag>::const_iterator it2 = mainDicomTags.begin(); it2 != mainDicomTags.end(); ++it2)
529 {
530 std::string value;
531 if (m.LookupStringValue(value, *it2, false /* no binary allowed */))
532 {
533 // TODO-FIND - Inject this value in the response
534 printf("<%s>\n", value.c_str());
535 }
536 }
537 }
538 }
539
502 currentIds = childrenIds; 540 currentIds = childrenIds;
503 } 541 }
504 else 542 else
505 { 543 {
506 currentIds.clear(); 544 currentIds.clear();