Mercurial > hg > orthanc
diff OrthancServer/OrthancRestApi/OrthancRestResources.cpp @ 1054:1701dcb6f554
Access patient module at the study level to cope with PatientID collisions
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 23 Jul 2014 17:10:08 +0200 |
parents | 83622b0f544c |
children | f167b672db94 |
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestResources.cpp Wed Jul 23 16:52:03 2014 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestResources.cpp Wed Jul 23 17:10:08 2014 +0200 @@ -705,16 +705,23 @@ } - template <enum ResourceType resourceType> - static void GetModule(RestApiGetCall& call) + static void GetModuleInternal(RestApiGetCall& call, + ResourceType resourceType, + ResourceType queryLevel) { + if (resourceType != queryLevel && + !(resourceType == ResourceType_Study && queryLevel == ResourceType_Patient)) + { + throw OrthancException(ErrorCode_NotImplemented); + } + ServerContext& context = OrthancRestApi::GetContext(call); std::string publicId = call.GetUriComponent("id", ""); bool simplify = call.HasArgument("simplify"); typedef std::set<DicomTag> Module; Module module; - DicomTag::GetTagsForModule(module, resourceType); + DicomTag::GetTagsForModule(module, queryLevel); Json::Value tags; @@ -756,7 +763,21 @@ else { call.GetOutput().AnswerJson(result); - } + } + } + + + + template <enum ResourceType resourceType> + static void GetModule(RestApiGetCall& call) + { + GetModuleInternal(call, resourceType, resourceType); + } + + + static void GetPatientModuleForStudy(RestApiGetCall& call) + { + GetModuleInternal(call, ResourceType_Study, ResourceType_Patient); } @@ -789,6 +810,7 @@ Register("/patients/{id}/module", GetModule<ResourceType_Patient>); Register("/series/{id}/module", GetModule<ResourceType_Series>); Register("/studies/{id}/module", GetModule<ResourceType_Study>); + Register("/studies/{id}/module-patient", GetPatientModuleForStudy); Register("/instances/{id}/file", GetInstanceFile); Register("/instances/{id}/export", ExportInstanceFile);