Mercurial > hg > orthanc
comparison 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 |
comparison
equal
deleted
inserted
replaced
4707:81ad9d8a0fa6 | 4712:bad8935cd5f2 |
---|---|
190 { | 190 { |
191 SetOrigin(DicomInstanceOrigin::FromRest(call)); | 191 SetOrigin(DicomInstanceOrigin::FromRest(call)); |
192 } | 192 } |
193 | 193 |
194 | 194 |
195 static void RegisterSeries(std::map<std::string, std::string>& target, | |
196 const std::string& series) | |
197 { | |
198 // Generate a target SeriesInstanceUID for this series | |
199 if (target.find(series) == target.end()) | |
200 { | |
201 target[series] = FromDcmtkBridge::GenerateUniqueIdentifier(ResourceType_Series); | |
202 } | |
203 } | |
204 | |
205 | |
195 void SplitStudyJob::AddSourceSeries(const std::string& series) | 206 void SplitStudyJob::AddSourceSeries(const std::string& series) |
196 { | 207 { |
197 std::string parent; | 208 std::string parent; |
198 | 209 |
199 if (IsStarted()) | 210 if (IsStarted()) |
206 throw OrthancException(ErrorCode_UnknownResource, | 217 throw OrthancException(ErrorCode_UnknownResource, |
207 "This series does not belong to the study to be split: " + series); | 218 "This series does not belong to the study to be split: " + series); |
208 } | 219 } |
209 else | 220 else |
210 { | 221 { |
211 // Generate a target SeriesInstanceUID for this series | 222 RegisterSeries(seriesUidMap_, series); |
212 seriesUidMap_[series] = FromDcmtkBridge::GenerateUniqueIdentifier(ResourceType_Series); | |
213 | 223 |
214 // Add all the instances of the series as to be processed | 224 // Add all the instances of the series as to be processed |
215 std::list<std::string> instances; | 225 std::list<std::string> instances; |
216 GetContext().GetIndex().GetChildren(instances, series); | 226 GetContext().GetIndex().GetChildren(instances, series); |
217 | 227 |
218 for (std::list<std::string>::const_iterator | 228 for (std::list<std::string>::const_iterator |
219 it = instances.begin(); it != instances.end(); ++it) | 229 it = instances.begin(); it != instances.end(); ++it) |
220 { | 230 { |
221 AddInstance(*it); | 231 AddInstance(*it); |
222 } | 232 } |
233 } | |
234 } | |
235 | |
236 | |
237 void SplitStudyJob::AddSourceInstance(const std::string& instance) | |
238 { | |
239 std::string study, series; | |
240 | |
241 if (IsStarted()) | |
242 { | |
243 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
244 } | |
245 else if (!GetContext().GetIndex().LookupParent(series, instance, ResourceType_Series) || | |
246 !GetContext().GetIndex().LookupParent(study, series, ResourceType_Study) || | |
247 study != sourceStudy_) | |
248 { | |
249 throw OrthancException(ErrorCode_UnknownResource, | |
250 "This instance does not belong to the study to be split: " + instance); | |
251 } | |
252 else | |
253 { | |
254 RegisterSeries(seriesUidMap_, series); | |
255 AddInstance(instance); | |
223 } | 256 } |
224 } | 257 } |
225 | 258 |
226 | 259 |
227 bool SplitStudyJob::LookupTargetSeriesUid(std::string& uid, | 260 bool SplitStudyJob::LookupTargetSeriesUid(std::string& uid, |