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