comparison OrthancServer/Sources/Database/FindResponse.cpp @ 5594:a906dc19264c find-refactoring

created FindResponse::Resource::Format()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 04 May 2024 15:25:19 +0200
parents 1e2631b8b9af
children a87f2a56257d
comparison
equal deleted inserted replaced
5593:862b54b4cfe2 5594:a906dc19264c
322 return false; 322 return false;
323 } 323 }
324 } 324 }
325 325
326 326
327 void FindResponse::Resource::Format(Json::Value& target,
328 const FindRequest& request) const
329 {
330 /**
331
332 TODO-FIND:
333
334 - Metadata / Series / ExpectedNumberOfInstances
335
336 - Metadata / Series / Status
337
338 - Metadata / Instance / FileSize
339
340 - Metadata / Instance / FileUuid
341
342 - Metadata / Instance / IndexInSeries
343
344 - Metadata / AnonymizedFrom
345
346 - Metadata / ModifiedFrom
347
348 **/
349
350 target = Json::objectValue;
351 target["ID"] = identifier_;
352 target["Type"] = GetResourceTypeText(level_, false, true);
353
354 if (request.IsRetrieveMetadata())
355 {
356 Json::Value metadata = Json::objectValue;
357
358 for (std::map<MetadataType, std::string>::const_iterator
359 it = metadata_.begin(); it != metadata_.end(); ++it)
360 {
361 metadata[EnumerationToString(it->first)] = it->second;
362 }
363
364 target["Metadata"] = metadata;
365 }
366
367 if (request.IsRetrieveLabels())
368 {
369 Json::Value labels = Json::arrayValue;
370
371 for (std::set<std::string>::const_iterator it = labels_.begin(); it != labels_.end(); ++it)
372 {
373 labels.append(*it);
374 }
375
376 target["Labels"] = labels;
377 }
378
379 if (request.IsRetrieveParentIdentifier())
380 {
381 switch (level_)
382 {
383 case ResourceType_Patient:
384 break;
385
386 case ResourceType_Study:
387 target["ParentPatient"] = GetParentIdentifier();
388 break;
389
390 case ResourceType_Series:
391 target["ParentStudy"] = GetParentIdentifier();
392 break;
393
394 case ResourceType_Instance:
395 target["ParentSeries"] = GetParentIdentifier();
396 break;
397
398 default:
399 throw OrthancException(ErrorCode_InternalError);
400 }
401 }
402
403 if (request.IsRetrieveChildrenIdentifiers())
404 {
405 Json::Value c = Json::arrayValue;
406
407 const std::set<std::string>& children = GetChildrenAtLevel(GetChildResourceType(level_)).GetIdentifiers();
408
409 for (std::set<std::string>::const_iterator
410 it = children.begin(); it != children.end(); ++it)
411 {
412 c.append(*it);
413 }
414
415 switch (level_)
416 {
417 case ResourceType_Patient:
418 target["Studies"] = c;
419 break;
420
421 case ResourceType_Study:
422 target["Series"] = c;
423 break;
424
425 case ResourceType_Series:
426 target["Instances"] = c;
427 break;
428
429 default:
430 throw OrthancException(ErrorCode_InternalError);
431 }
432 }
433 }
434
435
327 FindResponse::~FindResponse() 436 FindResponse::~FindResponse()
328 { 437 {
329 for (size_t i = 0; i < items_.size(); i++) 438 for (size_t i = 0; i < items_.size(); i++)
330 { 439 {
331 assert(items_[i] != NULL); 440 assert(items_[i] != NULL);