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