diff OrthancServer/Sources/ServerJobs/SplitStudyJob.cpp @ 4712:bad8935cd5f2

"/studies/{id}/split" accepts "Instances" parameter to split instances instead of series
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 23 Jun 2021 14:33:20 +0200
parents 8f9090b137f1
children 783f8a048035 94616af363ec
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerJobs/SplitStudyJob.cpp	Tue Jun 22 09:28:01 2021 +0200
+++ b/OrthancServer/Sources/ServerJobs/SplitStudyJob.cpp	Wed Jun 23 14:33:20 2021 +0200
@@ -192,6 +192,17 @@
   }
 
 
+  static void RegisterSeries(std::map<std::string, std::string>& target,
+                             const std::string& series)
+  {
+    // Generate a target SeriesInstanceUID for this series
+    if (target.find(series) == target.end())
+    {
+      target[series] = FromDcmtkBridge::GenerateUniqueIdentifier(ResourceType_Series);
+    }
+  }
+  
+
   void SplitStudyJob::AddSourceSeries(const std::string& series)
   {
     std::string parent;
@@ -208,8 +219,7 @@
     }
     else
     {
-      // Generate a target SeriesInstanceUID for this series
-      seriesUidMap_[series] = FromDcmtkBridge::GenerateUniqueIdentifier(ResourceType_Series);
+      RegisterSeries(seriesUidMap_, series);
 
       // Add all the instances of the series as to be processed
       std::list<std::string> instances;
@@ -224,6 +234,29 @@
   }
 
 
+  void SplitStudyJob::AddSourceInstance(const std::string& instance)
+  {
+    std::string study, series;
+
+    if (IsStarted())
+    {
+      throw OrthancException(ErrorCode_BadSequenceOfCalls);
+    }
+    else if (!GetContext().GetIndex().LookupParent(series, instance, ResourceType_Series) ||
+             !GetContext().GetIndex().LookupParent(study, series, ResourceType_Study) ||
+             study != sourceStudy_)
+    {
+      throw OrthancException(ErrorCode_UnknownResource,
+                             "This instance does not belong to the study to be split: " + instance);
+    }
+    else
+    {
+      RegisterSeries(seriesUidMap_, series);
+      AddInstance(instance);
+    }    
+  }
+
+
   bool SplitStudyJob::LookupTargetSeriesUid(std::string& uid,
                                             const std::string& series) const
   {