Mercurial > hg > orthanc
diff OrthancServer/OrthancRestApi.cpp @ 436:d51186bf7602
read access to metadata
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 15 May 2013 16:28:00 +0200 |
parents | ccf3a0a43dac |
children | beca6747945e |
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi.cpp Wed May 15 15:57:05 2013 +0200 +++ b/OrthancServer/OrthancRestApi.cpp Wed May 15 16:28:00 2013 +0200 @@ -1497,6 +1497,46 @@ } + // Handling of metadata ----------------------------------------------------- + + template <enum ResourceType resourceType> + static void ListMetadata(RestApi::GetCall& call) + { + RETRIEVE_CONTEXT(call); + + std::string publicId = call.GetUriComponent("id", ""); + std::list<MetadataType> metadata; + if (context.GetIndex().ListAvailableMetadata(metadata, publicId)) + { + Json::Value result = Json::arrayValue; + + for (std::list<MetadataType>::const_iterator + it = metadata.begin(); it != metadata.end(); it++) + { + result.append(EnumerationToString(*it)); + } + + call.GetOutput().AnswerJson(result); + } + } + + + template <enum ResourceType resourceType> + static void GetMetadata(RestApi::GetCall& call) + { + RETRIEVE_CONTEXT(call); + + std::string publicId = call.GetUriComponent("id", ""); + std::string name = call.GetUriComponent("name", ""); + MetadataType metadata = StringToMetadata(name); + + std::string value; + if (context.GetIndex().LookupMetadata(value, publicId, metadata)) + { + call.GetOutput().AnswerBuffer(value, "text/plain"); + } + } + // Registration of the various REST handlers -------------------------------- @@ -1532,6 +1572,15 @@ Register("/studies/{id}/archive", GetArchive<ResourceType_Study>); Register("/series/{id}/archive", GetArchive<ResourceType_Series>); + Register("/instances/{id}/metadata", ListMetadata<ResourceType_Instance>); + Register("/instances/{id}/metadata/{name}", GetMetadata<ResourceType_Instance>); + Register("/patients/{id}/metadata", ListMetadata<ResourceType_Patient>); + Register("/patients/{id}/metadata/{name}", GetMetadata<ResourceType_Patient>); + Register("/series/{id}/metadata", ListMetadata<ResourceType_Series>); + Register("/series/{id}/metadata/{name}", GetMetadata<ResourceType_Series>); + Register("/studies/{id}/metadata", ListMetadata<ResourceType_Study>); + Register("/studies/{id}/metadata/{name}", GetMetadata<ResourceType_Study>); + Register("/patients/{id}/protected", IsProtectedPatient); Register("/patients/{id}/protected", SetPatientProtection); Register("/instances/{id}/file", GetInstanceFile);