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 }