comparison OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp @ 5683:0c218d90096e

moved handling of labels out of DatabaseLookup
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 09 Jul 2024 11:33:37 +0200
parents 65a509cac161
children 9b3816c21008
comparison
equal deleted inserted replaced
5680:68fc5af30c03 5683:0c218d90096e
3322 query.AddRestConstraint(FromDcmtkBridge::ParseTag(members[i]), 3322 query.AddRestConstraint(FromDcmtkBridge::ParseTag(members[i]),
3323 value, caseSensitive, true); 3323 value, caseSensitive, true);
3324 } 3324 }
3325 } 3325 }
3326 3326
3327 std::set<std::string> labels;
3328
3327 if (request.isMember(KEY_LABELS)) // New in Orthanc 1.12.0 3329 if (request.isMember(KEY_LABELS)) // New in Orthanc 1.12.0
3328 { 3330 {
3329 for (Json::Value::ArrayIndex i = 0; i < request[KEY_LABELS].size(); i++) 3331 for (Json::Value::ArrayIndex i = 0; i < request[KEY_LABELS].size(); i++)
3330 { 3332 {
3331 if (request[KEY_LABELS][i].type() != Json::stringValue) 3333 if (request[KEY_LABELS][i].type() != Json::stringValue)
3332 { 3334 {
3333 throw OrthancException(ErrorCode_BadRequest, "Field \"" + std::string(KEY_LABELS) + "\" must contain strings"); 3335 throw OrthancException(ErrorCode_BadRequest, "Field \"" + std::string(KEY_LABELS) + "\" must contain strings");
3334 } 3336 }
3335 else 3337 else
3336 { 3338 {
3337 query.AddLabel(request[KEY_LABELS][i].asString()); 3339 labels.insert(request[KEY_LABELS][i].asString());
3338 } 3340 }
3339 } 3341 }
3340 } 3342 }
3341 3343
3342 query.SetLabelsConstraint(LabelsConstraint_All); 3344 LabelsConstraint labelsConstraint = LabelsConstraint_All;
3343 3345
3344 if (request.isMember(KEY_LABELS_CONSTRAINT)) 3346 if (request.isMember(KEY_LABELS_CONSTRAINT))
3345 { 3347 {
3346 const std::string& s = request[KEY_LABELS_CONSTRAINT].asString(); 3348 const std::string& s = request[KEY_LABELS_CONSTRAINT].asString();
3347 if (s == "All") 3349 if (s == "All")
3348 { 3350 {
3349 query.SetLabelsConstraint(LabelsConstraint_All); 3351 labelsConstraint = LabelsConstraint_All;
3350 } 3352 }
3351 else if (s == "Any") 3353 else if (s == "Any")
3352 { 3354 {
3353 query.SetLabelsConstraint(LabelsConstraint_Any); 3355 labelsConstraint = LabelsConstraint_Any;
3354 } 3356 }
3355 else if (s == "None") 3357 else if (s == "None")
3356 { 3358 {
3357 query.SetLabelsConstraint(LabelsConstraint_None); 3359 labelsConstraint = LabelsConstraint_None;
3358 } 3360 }
3359 else 3361 else
3360 { 3362 {
3361 throw OrthancException(ErrorCode_BadRequest, "Field \"" + std::string(KEY_LABELS_CONSTRAINT) + "\" must be \"All\", \"Any\", or \"None\""); 3363 throw OrthancException(ErrorCode_BadRequest, "Field \"" + std::string(KEY_LABELS_CONSTRAINT) + "\" must be \"All\", \"Any\", or \"None\"");
3362 } 3364 }
3363 } 3365 }
3364 3366
3365 FindVisitor visitor(OrthancRestApi::GetDicomFormat(request, DicomToJsonFormat_Human), context.GetFindStorageAccessMode()); 3367 FindVisitor visitor(OrthancRestApi::GetDicomFormat(request, DicomToJsonFormat_Human), context.GetFindStorageAccessMode());
3366 context.Apply(visitor, query, level, since, limit); 3368 context.Apply(visitor, query, level, labels, labelsConstraint, since, limit);
3367 visitor.Answer(call.GetOutput(), context, level, expand, requestedTags); 3369 visitor.Answer(call.GetOutput(), context, level, expand, requestedTags);
3368 } 3370 }
3369 } 3371 }
3370 3372
3371 3373