diff OrthancServer/OrthancRestApi2.cpp @ 213:4ce7fdcc8879

access to tags, simplified-tags and file of an instance
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 29 Nov 2012 10:59:40 +0100
parents f276b175dcaf
children 03817919169b
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi2.cpp	Thu Nov 29 10:13:49 2012 +0100
+++ b/OrthancServer/OrthancRestApi2.cpp	Thu Nov 29 10:59:40 2012 +0100
@@ -36,6 +36,7 @@
 #include "FromDcmtkBridge.h"
 #include "../Core/Uuid.h"
 #include "../Core/HttpServer/FilesystemHttpSender.h"
+#include "ServerToolbox.h"
 
 #include <dcmtk/dcmdata/dcistrmb.h>
 #include <dcmtk/dcmdata/dcfilefo.h>
@@ -141,6 +142,58 @@
 
 
   
+  // Get information about a single instance ----------------------------------
+ 
+  static void GetInstanceFile(RestApi::GetCall& call)
+  {
+    RETRIEVE_CONTEXT(call);
+
+    CompressionType compressionType;
+    std::string fileUuid;
+    std::string publicId = call.GetUriComponent("id", "");
+
+    if (context.GetIndex().GetFile(fileUuid, compressionType, publicId, AttachedFileType_Dicom))
+    {
+      assert(compressionType == CompressionType_None);
+
+      FilesystemHttpSender sender(context.GetFileStorage(), fileUuid);
+      sender.SetFilename(fileUuid + ".dcm");
+      sender.SetContentType("application/dicom");
+      call.GetOutput().AnswerFile(sender);
+    }
+  }
+
+
+  template <bool simplify>
+  static void GetInstanceTags(RestApi::GetCall& call)
+  {
+    RETRIEVE_CONTEXT(call);
+
+    CompressionType compressionType;
+    std::string fileUuid;
+    std::string publicId = call.GetUriComponent("id", "");
+
+    if (context.GetIndex().GetFile(fileUuid, compressionType, publicId, AttachedFileType_Json))
+    {
+      assert(compressionType == CompressionType_None);
+
+      Json::Value full;
+      ReadJson(full, context.GetFileStorage(), fileUuid);
+
+      if (simplify)
+      {
+        Json::Value simplified;
+        SimplifyTags(simplified, full);
+        call.GetOutput().AnswerJson(simplified);
+      }
+      else
+      {
+        call.GetOutput().AnswerJson(full);
+      }
+    }
+  }
+
+
 
   // DICOM bridge -------------------------------------------------------------
 
@@ -161,6 +214,9 @@
   }
 
 
+
+  // Registration of the various REST handlers --------------------------------
+
   OrthancRestApi2::OrthancRestApi2(ServerIndex& index,
                                    const std::string& path) :
     index_(index),
@@ -186,5 +242,11 @@
     Register("/series/{id}", GetSingleResource<ResourceType_Series>);
     Register("/studies/{id}", DeleteSingleResource<ResourceType_Study>);
     Register("/studies/{id}", GetSingleResource<ResourceType_Study>);
+
+    Register("/instances/{id}/file", GetInstanceFile);
+    Register("/instances/{id}/tags", GetInstanceTags<false>);
+    Register("/instances/{id}/simplified-tags", GetInstanceTags<true>);
+
+    // TODO : "content", "frames"
   }
 }