comparison 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
comparison
equal deleted inserted replaced
212:f276b175dcaf 213:4ce7fdcc8879
34 34
35 #include "OrthancInitialization.h" 35 #include "OrthancInitialization.h"
36 #include "FromDcmtkBridge.h" 36 #include "FromDcmtkBridge.h"
37 #include "../Core/Uuid.h" 37 #include "../Core/Uuid.h"
38 #include "../Core/HttpServer/FilesystemHttpSender.h" 38 #include "../Core/HttpServer/FilesystemHttpSender.h"
39 #include "ServerToolbox.h"
39 40
40 #include <dcmtk/dcmdata/dcistrmb.h> 41 #include <dcmtk/dcmdata/dcistrmb.h>
41 #include <dcmtk/dcmdata/dcfilefo.h> 42 #include <dcmtk/dcmdata/dcfilefo.h>
42 #include <boost/lexical_cast.hpp> 43 #include <boost/lexical_cast.hpp>
43 44
139 } 140 }
140 } 141 }
141 142
142 143
143 144
145 // Get information about a single instance ----------------------------------
146
147 static void GetInstanceFile(RestApi::GetCall& call)
148 {
149 RETRIEVE_CONTEXT(call);
150
151 CompressionType compressionType;
152 std::string fileUuid;
153 std::string publicId = call.GetUriComponent("id", "");
154
155 if (context.GetIndex().GetFile(fileUuid, compressionType, publicId, AttachedFileType_Dicom))
156 {
157 assert(compressionType == CompressionType_None);
158
159 FilesystemHttpSender sender(context.GetFileStorage(), fileUuid);
160 sender.SetFilename(fileUuid + ".dcm");
161 sender.SetContentType("application/dicom");
162 call.GetOutput().AnswerFile(sender);
163 }
164 }
165
166
167 template <bool simplify>
168 static void GetInstanceTags(RestApi::GetCall& call)
169 {
170 RETRIEVE_CONTEXT(call);
171
172 CompressionType compressionType;
173 std::string fileUuid;
174 std::string publicId = call.GetUriComponent("id", "");
175
176 if (context.GetIndex().GetFile(fileUuid, compressionType, publicId, AttachedFileType_Json))
177 {
178 assert(compressionType == CompressionType_None);
179
180 Json::Value full;
181 ReadJson(full, context.GetFileStorage(), fileUuid);
182
183 if (simplify)
184 {
185 Json::Value simplified;
186 SimplifyTags(simplified, full);
187 call.GetOutput().AnswerJson(simplified);
188 }
189 else
190 {
191 call.GetOutput().AnswerJson(full);
192 }
193 }
194 }
195
196
144 197
145 // DICOM bridge ------------------------------------------------------------- 198 // DICOM bridge -------------------------------------------------------------
146 199
147 static void ListModalities(RestApi::GetCall& call) 200 static void ListModalities(RestApi::GetCall& call)
148 { 201 {
158 } 211 }
159 212
160 call.GetOutput().AnswerJson(result); 213 call.GetOutput().AnswerJson(result);
161 } 214 }
162 215
216
217
218 // Registration of the various REST handlers --------------------------------
163 219
164 OrthancRestApi2::OrthancRestApi2(ServerIndex& index, 220 OrthancRestApi2::OrthancRestApi2(ServerIndex& index,
165 const std::string& path) : 221 const std::string& path) :
166 index_(index), 222 index_(index),
167 storage_(path) 223 storage_(path)
184 Register("/patients/{id}", GetSingleResource<ResourceType_Patient>); 240 Register("/patients/{id}", GetSingleResource<ResourceType_Patient>);
185 Register("/series/{id}", DeleteSingleResource<ResourceType_Series>); 241 Register("/series/{id}", DeleteSingleResource<ResourceType_Series>);
186 Register("/series/{id}", GetSingleResource<ResourceType_Series>); 242 Register("/series/{id}", GetSingleResource<ResourceType_Series>);
187 Register("/studies/{id}", DeleteSingleResource<ResourceType_Study>); 243 Register("/studies/{id}", DeleteSingleResource<ResourceType_Study>);
188 Register("/studies/{id}", GetSingleResource<ResourceType_Study>); 244 Register("/studies/{id}", GetSingleResource<ResourceType_Study>);
245
246 Register("/instances/{id}/file", GetInstanceFile);
247 Register("/instances/{id}/tags", GetInstanceTags<false>);
248 Register("/instances/{id}/simplified-tags", GetInstanceTags<true>);
249
250 // TODO : "content", "frames"
189 } 251 }
190 } 252 }