Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestResources.cpp @ 1281:8dac11c78d71
URIs to get all the parents of a given resource in a single REST call
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 03 Feb 2015 10:53:35 +0100 |
parents | 6164f7200c43 |
children | 6e7e5ed91c2d |
comparison
equal
deleted
inserted
replaced
1280:d6a65dc6d0ac | 1281:8dac11c78d71 |
---|---|
910 call.GetOutput().AnswerJson(result); | 910 call.GetOutput().AnswerJson(result); |
911 } | 911 } |
912 | 912 |
913 | 913 |
914 | 914 |
915 template <enum ResourceType start, | |
916 enum ResourceType end> | |
917 static void GetParentResource(RestApiGetCall& call) | |
918 { | |
919 assert(start > end); | |
920 | |
921 ServerIndex& index = OrthancRestApi::GetIndex(call); | |
922 | |
923 std::string current = call.GetUriComponent("id", ""); | |
924 ResourceType currentType = start; | |
925 while (currentType > end) | |
926 { | |
927 std::string parent; | |
928 if (!index.LookupParent(parent, current)) | |
929 { | |
930 // Error that could happen if the resource gets deleted by | |
931 // another concurrent call | |
932 return; | |
933 } | |
934 | |
935 current = parent; | |
936 switch (currentType) | |
937 { | |
938 case ResourceType_Instance: currentType = ResourceType_Series; break; | |
939 case ResourceType_Series: currentType = ResourceType_Study; break; | |
940 case ResourceType_Study: currentType = ResourceType_Patient; break; | |
941 default: throw OrthancException(ErrorCode_InternalError); | |
942 } | |
943 } | |
944 | |
945 assert(currentType == end); | |
946 | |
947 Json::Value result; | |
948 if (index.LookupResource(result, current, end)) | |
949 { | |
950 call.GetOutput().AnswerJson(result); | |
951 } | |
952 } | |
953 | |
954 | |
955 | |
915 void OrthancRestApi::RegisterResources() | 956 void OrthancRestApi::RegisterResources() |
916 { | 957 { |
917 Register("/instances", ListResources<ResourceType_Instance>); | 958 Register("/instances", ListResources<ResourceType_Instance>); |
918 Register("/patients", ListResources<ResourceType_Patient>); | 959 Register("/patients", ListResources<ResourceType_Patient>); |
919 Register("/series", ListResources<ResourceType_Series>); | 960 Register("/series", ListResources<ResourceType_Series>); |
987 Register("/patients/{id}/instances", GetChildResources<ResourceType_Patient, ResourceType_Instance>); | 1028 Register("/patients/{id}/instances", GetChildResources<ResourceType_Patient, ResourceType_Instance>); |
988 Register("/studies/{id}/series", GetChildResources<ResourceType_Study, ResourceType_Series>); | 1029 Register("/studies/{id}/series", GetChildResources<ResourceType_Study, ResourceType_Series>); |
989 Register("/studies/{id}/instances", GetChildResources<ResourceType_Study, ResourceType_Instance>); | 1030 Register("/studies/{id}/instances", GetChildResources<ResourceType_Study, ResourceType_Instance>); |
990 Register("/series/{id}/instances", GetChildResources<ResourceType_Series, ResourceType_Instance>); | 1031 Register("/series/{id}/instances", GetChildResources<ResourceType_Series, ResourceType_Instance>); |
991 | 1032 |
1033 Register("/studies/{id}/patient", GetParentResource<ResourceType_Study, ResourceType_Patient>); | |
1034 Register("/series/{id}/patient", GetParentResource<ResourceType_Series, ResourceType_Patient>); | |
1035 Register("/series/{id}/study", GetParentResource<ResourceType_Series, ResourceType_Study>); | |
1036 Register("/instances/{id}/patient", GetParentResource<ResourceType_Instance, ResourceType_Patient>); | |
1037 Register("/instances/{id}/study", GetParentResource<ResourceType_Instance, ResourceType_Study>); | |
1038 Register("/instances/{id}/series", GetParentResource<ResourceType_Instance, ResourceType_Series>); | |
1039 | |
992 Register("/patients/{id}/instances-tags", GetChildInstancesTags); | 1040 Register("/patients/{id}/instances-tags", GetChildInstancesTags); |
993 Register("/studies/{id}/instances-tags", GetChildInstancesTags); | 1041 Register("/studies/{id}/instances-tags", GetChildInstancesTags); |
994 Register("/series/{id}/instances-tags", GetChildInstancesTags); | 1042 Register("/series/{id}/instances-tags", GetChildInstancesTags); |
995 | 1043 |
996 Register("/instances/{id}/content/*", GetRawContent); | 1044 Register("/instances/{id}/content/*", GetRawContent); |