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);