Mercurial > hg > orthanc
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" } }