diff Core/DicomNetworking/DicomUserConnection.cpp @ 3635:8c0ef729d5a8 storage-commitment

StorageCommitmentScpJob
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 29 Jan 2020 17:39:31 +0100
parents c1e2b91c2ab4
children f6a73611ec5c
line wrap: on
line diff
--- a/Core/DicomNetworking/DicomUserConnection.cpp	Wed Jan 29 08:51:31 2020 +0100
+++ b/Core/DicomNetworking/DicomUserConnection.cpp	Wed Jan 29 17:39:31 2020 +0100
@@ -1387,23 +1387,46 @@
 
   static void FillSopSequence(DcmDataset& dataset,
                               const DcmTagKey& tag,
-                              const std::vector<std::string>& sopClassUids,
-                              const std::vector<std::string>& sopInstanceUids,
+                              const std::list<std::string>& sopClassUids,
+                              const std::list<std::string>& sopInstanceUids,
                               bool hasFailureReason,
                               Uint16 failureReason)
   {
-    for (size_t i = 0; i < sopClassUids.size(); i++)
+    assert(sopClassUids.size() == sopInstanceUids.size());
+
+    if (sopInstanceUids.empty())
     {
-      std::auto_ptr<DcmItem> item(new DcmItem);
-      if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, sopClassUids[i].c_str()).good() ||
-          !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, sopInstanceUids[i].c_str()).good() ||
-          (hasFailureReason &&
-           !item->putAndInsertUint16(DCM_FailureReason, failureReason).good()) ||
-          !dataset.insertSequenceItem(tag, item.release()).good())
+      // Add an empty sequence
+      if (!dataset.insertEmptyElement(tag).good())
       {
         throw OrthancException(ErrorCode_InternalError);
       }
     }
+    else
+    {
+      std::list<std::string>::const_iterator currentClass = sopClassUids.begin();
+      std::list<std::string>::const_iterator currentInstance = sopInstanceUids.begin();
+
+      while (currentClass != sopClassUids.end())
+      {
+        std::auto_ptr<DcmItem> item(new DcmItem);
+        if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, currentClass->c_str()).good() ||
+            !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, currentInstance->c_str()).good() ||
+            (hasFailureReason &&
+             !item->putAndInsertUint16(DCM_FailureReason, failureReason).good()) ||
+            !dataset.insertSequenceItem(tag, item.release()).good())
+        {
+          throw OrthancException(ErrorCode_InternalError);
+        }
+
+        ++currentClass;
+        ++currentInstance;
+      }
+      
+      for (size_t i = 0; i < sopClassUids.size(); i++)
+      {
+      }
+    }
   }                              
 
 
@@ -1411,10 +1434,10 @@
 
   void DicomUserConnection::ReportStorageCommitment(
     const std::string& transactionUid,
-    const std::vector<std::string>& successSopClassUids,
-    const std::vector<std::string>& successSopInstanceUids,
-    const std::vector<std::string>& failureSopClassUids,
-    const std::vector<std::string>& failureSopInstanceUids)
+    const std::list<std::string>& successSopClassUids,
+    const std::list<std::string>& successSopInstanceUids,
+    const std::list<std::string>& failureSopClassUids,
+    const std::list<std::string>& failureSopInstanceUids)
   {
     if (successSopClassUids.size() != successSopInstanceUids.size() ||
         failureSopClassUids.size() != failureSopInstanceUids.size())
@@ -1551,8 +1574,8 @@
   
   void DicomUserConnection::RequestStorageCommitment(
     const std::string& transactionUid,
-    const std::vector<std::string>& sopClassUids,
-    const std::vector<std::string>& sopInstanceUids)
+    const std::list<std::string>& sopClassUids,
+    const std::list<std::string>& sopInstanceUids)
   {
     if (sopClassUids.size() != sopInstanceUids.size())
     {