Mercurial > hg > orthanc
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 |