Mercurial > hg > orthanc
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 {