Mercurial > hg > orthanc
comparison OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp @ 5574:5a13483d12c5 find-refactoring
find-refactoring: attachments
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Fri, 26 Apr 2024 16:32:18 +0200 |
parents | 738f80622e91 |
children | 77570cce8855 |
comparison
equal
deleted
inserted
replaced
5569:738f80622e91 | 5574:5a13483d12c5 |
---|---|
228 { | 228 { |
229 /** | 229 /** |
230 * EXPERIMENTAL VERSION | 230 * EXPERIMENTAL VERSION |
231 **/ | 231 **/ |
232 | 232 |
233 // TODO-FIND: include the FindRequest options parsing in a method (parse from get-arguments and from post payload) | |
234 // TODO-FIND: support other values for expand like expand=MainDicomTags,Labels,Parent,SeriesStatus | |
233 const bool expand = (call.HasArgument("expand") && | 235 const bool expand = (call.HasArgument("expand") && |
234 call.GetBooleanArgument("expand", true)); | 236 call.GetBooleanArgument("expand", true)); |
235 | 237 |
238 std::set<DicomTag> requestedTags; | |
239 OrthancRestApi::GetRequestedTags(requestedTags, call); | |
240 | |
241 const DicomToJsonFormat format = OrthancRestApi::GetDicomFormat(call, DicomToJsonFormat_Human); | |
242 | |
236 FindRequest request(resourceType); | 243 FindRequest request(resourceType); |
237 | 244 |
238 if (expand) | 245 if (expand) |
239 { | 246 { |
240 request.SetResponseContent(static_cast<FindRequest::ResponseContent>(FindRequest::ResponseContent_MainDicomTags | | 247 // compatibility with default expand option |
248 FindRequest::ResponseContent responseContent = static_cast<FindRequest::ResponseContent>(FindRequest::ResponseContent_MainDicomTags | | |
241 FindRequest::ResponseContent_Metadata | | 249 FindRequest::ResponseContent_Metadata | |
242 FindRequest::ResponseContent_Labels | | 250 FindRequest::ResponseContent_Labels); |
243 FindRequest::ResponseContent_Attachments | | 251 |
244 FindRequest::ResponseContent_Parent | | 252 if (requestedTags.size() > 0 && resourceType != ResourceType_Instance) // if we are requesting specific tags that might be outside of the MainDicomTags, we must get a childInstanceId too |
245 FindRequest::ResponseContent_Children)); | 253 { |
246 | 254 responseContent = static_cast<FindRequest::ResponseContent>(responseContent | FindRequest::ResponseContent_ChildInstanceId); |
255 } | |
256 if (resourceType == ResourceType_Series) | |
257 { | |
258 responseContent = static_cast<FindRequest::ResponseContent>(responseContent | FindRequest::ResponseContent_ChildrenMetadata); // required for the SeriesStatus | |
259 } | |
260 if (resourceType != ResourceType_Instance) | |
261 { | |
262 responseContent = static_cast<FindRequest::ResponseContent>(responseContent | FindRequest::ResponseContent_Children); | |
263 } | |
264 if (resourceType == ResourceType_Instance) | |
265 { | |
266 responseContent = static_cast<FindRequest::ResponseContent>(responseContent | FindRequest::ResponseContent_Attachments); // for FileSize & FileUuid | |
267 } | |
268 if (resourceType != ResourceType_Patient) | |
269 { | |
270 responseContent = static_cast<FindRequest::ResponseContent>(responseContent | FindRequest::ResponseContent_Parent); | |
271 } | |
272 | |
273 request.SetResponseContent(responseContent); | |
247 request.SetRetrieveTagsAtLevel(resourceType, true); | 274 request.SetRetrieveTagsAtLevel(resourceType, true); |
248 | 275 |
249 if (resourceType == ResourceType_Study) | 276 if (resourceType == ResourceType_Study) |
250 { | 277 { |
251 request.SetRetrieveTagsAtLevel(ResourceType_Patient, true); | 278 request.SetRetrieveTagsAtLevel(ResourceType_Patient, true); |
292 answer.append(resourceId); | 319 answer.append(resourceId); |
293 } | 320 } |
294 } | 321 } |
295 else | 322 else |
296 { | 323 { |
297 std::set<DicomTag> requestedTags; | |
298 OrthancRestApi::GetRequestedTags(requestedTags, call); | |
299 | |
300 const DicomToJsonFormat format = OrthancRestApi::GetDicomFormat(call, DicomToJsonFormat_Human); | |
301 | |
302 for (size_t i = 0; i < response.GetSize(); i++) | 324 for (size_t i = 0; i < response.GetSize(); i++) |
303 { | 325 { |
304 context.AppendFindResponse(answer, response.GetItem(i), format, requestedTags, true /* allowStorageAccess */); | 326 context.AppendFindResponse(answer, response.GetItem(i), format, requestedTags, true /* allowStorageAccess */); |
305 } | 327 } |
306 } | 328 } |