Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi.cpp @ 248:2442033911d6
creation of zip files
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 04 Dec 2012 17:49:37 +0100 |
parents | e4148b0ab1d0 |
children | 5694365ecb96 |
comparison
equal
deleted
inserted
replaced
247:c9b3ba0fd140 | 248:2442033911d6 |
---|---|
32 | 32 |
33 #include "OrthancRestApi.h" | 33 #include "OrthancRestApi.h" |
34 | 34 |
35 #include "../Core/HttpServer/FilesystemHttpSender.h" | 35 #include "../Core/HttpServer/FilesystemHttpSender.h" |
36 #include "../Core/Uuid.h" | 36 #include "../Core/Uuid.h" |
37 #include "../Core/Compression/HierarchicalZipWriter.h" | |
37 #include "DicomProtocol/DicomUserConnection.h" | 38 #include "DicomProtocol/DicomUserConnection.h" |
38 #include "FromDcmtkBridge.h" | 39 #include "FromDcmtkBridge.h" |
39 #include "OrthancInitialization.h" | 40 #include "OrthancInitialization.h" |
40 #include "ServerToolbox.h" | 41 #include "ServerToolbox.h" |
41 | 42 |
348 call.GetOutput().AnswerJson(result); | 349 call.GetOutput().AnswerJson(result); |
349 } | 350 } |
350 } | 351 } |
351 | 352 |
352 | 353 |
354 // Download of ZIP files ---------------------------------------------------- | |
355 | |
356 static void GetPatientArchive(RestApi::GetCall& call) | |
357 { | |
358 RETRIEVE_CONTEXT(call); | |
359 | |
360 Json::Value patient; | |
361 if (!context.GetIndex().LookupResource(patient, call.GetUriComponent("id", ""), ResourceType_Patient)) | |
362 { | |
363 return; | |
364 } | |
365 | |
366 Toolbox::TemporaryFile tmp; | |
367 | |
368 { | |
369 HierarchicalZipWriter writer(tmp.GetPath().c_str()); | |
370 | |
371 for (size_t i = 0; i < patient["Studies"].size(); i++) | |
372 { | |
373 Json::Value study; | |
374 if (context.GetIndex().LookupResource(study, patient["Studies"][i].asString(), ResourceType_Study)) | |
375 { | |
376 writer.CreateDirectory(study["MainDicomTags"]["StudyDescription"].asString().c_str()); | |
377 | |
378 for (size_t i = 0; i < study["Series"].size(); i++) | |
379 { | |
380 Json::Value series; | |
381 if (context.GetIndex().LookupResource(series, study["Series"][i].asString(), ResourceType_Series)) | |
382 { | |
383 std::string m = series["MainDicomTags"]["Modality"].asString(); | |
384 std::string s = series["MainDicomTags"]["SeriesDescription"].asString(); | |
385 writer.CreateDirectory((m + " " + s).c_str()); | |
386 | |
387 for (size_t i = 0; i < series["Instances"].size(); i++) | |
388 { | |
389 Json::Value instance; | |
390 if (context.GetIndex().LookupResource(instance, series["Instances"][i].asString(), ResourceType_Instance)) | |
391 { | |
392 writer.CreateFile(instance["MainDicomTags"]["SOPInstanceUID"].asString().c_str()); | |
393 } | |
394 } | |
395 | |
396 writer.CloseDirectory(); | |
397 } | |
398 } | |
399 | |
400 writer.CloseDirectory(); | |
401 } | |
402 } | |
403 } | |
404 | |
405 FilesystemHttpSender sender(tmp.GetPath().c_str()); | |
406 call.GetOutput().AnswerFile(sender); | |
407 } | |
408 | |
409 | |
353 // Changes API -------------------------------------------------------------- | 410 // Changes API -------------------------------------------------------------- |
354 | 411 |
355 static void GetSinceAndLimit(int64_t& since, | 412 static void GetSinceAndLimit(int64_t& since, |
356 unsigned int& limit, | 413 unsigned int& limit, |
357 bool& last, | 414 bool& last, |
651 Register("/patients/{id}", GetSingleResource<ResourceType_Patient>); | 708 Register("/patients/{id}", GetSingleResource<ResourceType_Patient>); |
652 Register("/series/{id}", DeleteSingleResource<ResourceType_Series>); | 709 Register("/series/{id}", DeleteSingleResource<ResourceType_Series>); |
653 Register("/series/{id}", GetSingleResource<ResourceType_Series>); | 710 Register("/series/{id}", GetSingleResource<ResourceType_Series>); |
654 Register("/studies/{id}", DeleteSingleResource<ResourceType_Study>); | 711 Register("/studies/{id}", DeleteSingleResource<ResourceType_Study>); |
655 Register("/studies/{id}", GetSingleResource<ResourceType_Study>); | 712 Register("/studies/{id}", GetSingleResource<ResourceType_Study>); |
713 Register("/patients/{id}/archive", GetPatientArchive); | |
656 | 714 |
657 Register("/instances/{id}/file", GetInstanceFile); | 715 Register("/instances/{id}/file", GetInstanceFile); |
658 Register("/instances/{id}/tags", GetInstanceTags<false>); | 716 Register("/instances/{id}/tags", GetInstanceTags<false>); |
659 Register("/instances/{id}/simplified-tags", GetInstanceTags<true>); | 717 Register("/instances/{id}/simplified-tags", GetInstanceTags<true>); |
660 Register("/instances/{id}/frames", ListFrames); | 718 Register("/instances/{id}/frames", ListFrames); |