comparison 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
comparison
equal deleted inserted replaced
1053:ee5cbe6e48d3 1054:1701dcb6f554
703 } 703 }
704 } 704 }
705 } 705 }
706 706
707 707
708 template <enum ResourceType resourceType> 708 static void GetModuleInternal(RestApiGetCall& call,
709 static void GetModule(RestApiGetCall& call) 709 ResourceType resourceType,
710 { 710 ResourceType queryLevel)
711 {
712 if (resourceType != queryLevel &&
713 !(resourceType == ResourceType_Study && queryLevel == ResourceType_Patient))
714 {
715 throw OrthancException(ErrorCode_NotImplemented);
716 }
717
711 ServerContext& context = OrthancRestApi::GetContext(call); 718 ServerContext& context = OrthancRestApi::GetContext(call);
712 std::string publicId = call.GetUriComponent("id", ""); 719 std::string publicId = call.GetUriComponent("id", "");
713 bool simplify = call.HasArgument("simplify"); 720 bool simplify = call.HasArgument("simplify");
714 721
715 typedef std::set<DicomTag> Module; 722 typedef std::set<DicomTag> Module;
716 Module module; 723 Module module;
717 DicomTag::GetTagsForModule(module, resourceType); 724 DicomTag::GetTagsForModule(module, queryLevel);
718 725
719 Json::Value tags; 726 Json::Value tags;
720 727
721 if (resourceType != ResourceType_Instance) 728 if (resourceType != ResourceType_Instance)
722 { 729 {
754 call.GetOutput().AnswerJson(simplified); 761 call.GetOutput().AnswerJson(simplified);
755 } 762 }
756 else 763 else
757 { 764 {
758 call.GetOutput().AnswerJson(result); 765 call.GetOutput().AnswerJson(result);
759 } 766 }
767 }
768
769
770
771 template <enum ResourceType resourceType>
772 static void GetModule(RestApiGetCall& call)
773 {
774 GetModuleInternal(call, resourceType, resourceType);
775 }
776
777
778 static void GetPatientModuleForStudy(RestApiGetCall& call)
779 {
780 GetModuleInternal(call, ResourceType_Study, ResourceType_Patient);
760 } 781 }
761 782
762 783
763 void OrthancRestApi::RegisterResources() 784 void OrthancRestApi::RegisterResources()
764 { 785 {
787 808
788 Register("/instances/{id}/module", GetModule<ResourceType_Instance>); 809 Register("/instances/{id}/module", GetModule<ResourceType_Instance>);
789 Register("/patients/{id}/module", GetModule<ResourceType_Patient>); 810 Register("/patients/{id}/module", GetModule<ResourceType_Patient>);
790 Register("/series/{id}/module", GetModule<ResourceType_Series>); 811 Register("/series/{id}/module", GetModule<ResourceType_Series>);
791 Register("/studies/{id}/module", GetModule<ResourceType_Study>); 812 Register("/studies/{id}/module", GetModule<ResourceType_Study>);
813 Register("/studies/{id}/module-patient", GetPatientModuleForStudy);
792 814
793 Register("/instances/{id}/file", GetInstanceFile); 815 Register("/instances/{id}/file", GetInstanceFile);
794 Register("/instances/{id}/export", ExportInstanceFile); 816 Register("/instances/{id}/export", ExportInstanceFile);
795 Register("/instances/{id}/tags", GetInstanceTagsBis); 817 Register("/instances/{id}/tags", GetInstanceTagsBis);
796 Register("/instances/{id}/simplified-tags", GetInstanceTags<true>); 818 Register("/instances/{id}/simplified-tags", GetInstanceTags<true>);