Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestResources.cpp @ 1140:94c5f6623b3a
URIs to get all the children of a given resource in a single REST call
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 10 Sep 2014 17:20:56 +0200 |
parents | f167b672db94 |
children | 0479d02c6778 |
comparison
equal
deleted
inserted
replaced
1139:f167b672db94 | 1140:94c5f6623b3a |
---|---|
808 | 808 |
809 call.GetOutput().AnswerJson(result); | 809 call.GetOutput().AnswerJson(result); |
810 } | 810 } |
811 | 811 |
812 | 812 |
813 template <enum ResourceType start, | |
814 enum ResourceType end> | |
815 static void GetChildResources(RestApiGetCall& call) | |
816 { | |
817 ServerIndex& index = OrthancRestApi::GetIndex(call); | |
818 | |
819 std::list<std::string> a, b, c; | |
820 a.push_back(call.GetUriComponent("id", "")); | |
821 | |
822 ResourceType type = start; | |
823 while (type != end) | |
824 { | |
825 b.clear(); | |
826 | |
827 for (std::list<std::string>::const_iterator | |
828 it = a.begin(); it != a.end(); it++) | |
829 { | |
830 index.GetChildren(c, *it); | |
831 b.splice(b.begin(), c); | |
832 } | |
833 | |
834 switch (type) | |
835 { | |
836 case ResourceType_Patient: | |
837 type = ResourceType_Study; | |
838 break; | |
839 | |
840 case ResourceType_Study: | |
841 type = ResourceType_Series; | |
842 break; | |
843 | |
844 case ResourceType_Series: | |
845 type = ResourceType_Instance; | |
846 break; | |
847 | |
848 default: | |
849 throw OrthancException(ErrorCode_InternalError); | |
850 } | |
851 | |
852 a.clear(); | |
853 a.splice(a.begin(), b); | |
854 } | |
855 | |
856 Json::Value result = Json::arrayValue; | |
857 | |
858 for (std::list<std::string>::const_iterator | |
859 it = a.begin(); it != a.end(); it++) | |
860 { | |
861 Json::Value item; | |
862 | |
863 if (OrthancRestApi::GetIndex(call).LookupResource(item, *it, end)) | |
864 { | |
865 result.append(item); | |
866 } | |
867 } | |
868 | |
869 call.GetOutput().AnswerJson(result); | |
870 } | |
871 | |
872 | |
873 | |
813 void OrthancRestApi::RegisterResources() | 874 void OrthancRestApi::RegisterResources() |
814 { | 875 { |
815 Register("/instances", ListResources<ResourceType_Instance>); | 876 Register("/instances", ListResources<ResourceType_Instance>); |
816 Register("/patients", ListResources<ResourceType_Patient>); | 877 Register("/patients", ListResources<ResourceType_Patient>); |
817 Register("/series", ListResources<ResourceType_Series>); | 878 Register("/series", ListResources<ResourceType_Series>); |
878 Register("/{resourceType}/{id}/attachments/{name}/verify-md5", VerifyAttachment); | 939 Register("/{resourceType}/{id}/attachments/{name}/verify-md5", VerifyAttachment); |
879 Register("/{resourceType}/{id}/attachments/{name}", UploadAttachment); | 940 Register("/{resourceType}/{id}/attachments/{name}", UploadAttachment); |
880 | 941 |
881 Register("/tools/lookup", Lookup); | 942 Register("/tools/lookup", Lookup); |
882 | 943 |
944 Register("/patients/{id}/studies", GetChildResources<ResourceType_Patient, ResourceType_Study>); | |
945 Register("/patients/{id}/series", GetChildResources<ResourceType_Patient, ResourceType_Series>); | |
946 Register("/patients/{id}/instances", GetChildResources<ResourceType_Patient, ResourceType_Instance>); | |
947 Register("/studies/{id}/series", GetChildResources<ResourceType_Study, ResourceType_Series>); | |
948 Register("/studies/{id}/instances", GetChildResources<ResourceType_Study, ResourceType_Instance>); | |
949 Register("/series/{id}/instances", GetChildResources<ResourceType_Series, ResourceType_Instance>); | |
950 | |
883 Register("/instances/{id}/content/*", GetRawContent); | 951 Register("/instances/{id}/content/*", GetRawContent); |
884 } | 952 } |
885 } | 953 } |