comparison OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp @ 2853:52b017d22a4f

New URI: "/studies/.../merge" to merge a study
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 02 Oct 2018 17:05:07 +0200
parents 99863d6245b2
children 8b00e4cb4a6b
comparison
equal deleted inserted replaced
2851:859e880ac9a8 2853:52b017d22a4f
36 36
37 #include "../../Core/DicomParsing/FromDcmtkBridge.h" 37 #include "../../Core/DicomParsing/FromDcmtkBridge.h"
38 #include "../../Core/Logging.h" 38 #include "../../Core/Logging.h"
39 #include "../../Core/SerializationToolbox.h" 39 #include "../../Core/SerializationToolbox.h"
40 #include "../ServerContext.h" 40 #include "../ServerContext.h"
41 #include "../ServerJobs/MergeStudyJob.h"
41 #include "../ServerJobs/ResourceModificationJob.h" 42 #include "../ServerJobs/ResourceModificationJob.h"
42 #include "../ServerJobs/SplitStudyJob.h" 43 #include "../ServerJobs/SplitStudyJob.h"
43 44
44 #include <boost/lexical_cast.hpp> 45 #include <boost/lexical_cast.hpp>
45 #include <boost/algorithm/string/predicate.hpp> 46 #include <boost/algorithm/string/predicate.hpp>
739 v["ID"] = id; 740 v["ID"] = id;
740 call.GetOutput().AnswerJson(v); 741 call.GetOutput().AnswerJson(v);
741 } 742 }
742 743
743 744
745 static void MergeStudy(RestApiPostCall& call)
746 {
747 ServerContext& context = OrthancRestApi::GetContext(call);
748
749 Json::Value request;
750 if (!call.ParseJsonRequest(request))
751 {
752 // Bad JSON request
753 throw OrthancException(ErrorCode_BadFileFormat);
754 }
755
756 const std::string study = call.GetUriComponent("id", "");
757 int priority = Toolbox::GetJsonIntegerField(request, "Priority", 0);
758
759 std::auto_ptr<MergeStudyJob> job(new MergeStudyJob(context, study));
760 job->SetOrigin(call);
761 job->SetDescription("REST API");
762
763 std::vector<std::string> resources;
764 SerializationToolbox::ReadArrayOfStrings(resources, request, "Resources");
765
766 for (size_t i = 0; i < resources.size(); i++)
767 {
768 job->AddSource(resources[i]);
769 }
770
771 static const char* KEEP_SOURCE = "KeepSource";
772 if (request.isMember(KEEP_SOURCE))
773 {
774 job->SetKeepSource(SerializationToolbox::ReadBoolean(request, KEEP_SOURCE));
775 }
776
777 std::string id;
778 context.GetJobsEngine().GetRegistry().Submit(id, job.release(), priority);
779
780 Json::Value v;
781 v["ID"] = id;
782 call.GetOutput().AnswerJson(v);
783 }
784
785
744 void OrthancRestApi::RegisterAnonymizeModify() 786 void OrthancRestApi::RegisterAnonymizeModify()
745 { 787 {
746 Register("/instances/{id}/modify", ModifyInstance); 788 Register("/instances/{id}/modify", ModifyInstance);
747 Register("/series/{id}/modify", ModifyResource<ResourceType_Series>); 789 Register("/series/{id}/modify", ModifyResource<ResourceType_Series>);
748 Register("/studies/{id}/modify", ModifyResource<ResourceType_Study>); 790 Register("/studies/{id}/modify", ModifyResource<ResourceType_Study>);
754 Register("/patients/{id}/anonymize", AnonymizeResource<ResourceType_Patient>); 796 Register("/patients/{id}/anonymize", AnonymizeResource<ResourceType_Patient>);
755 797
756 Register("/tools/create-dicom", CreateDicom); 798 Register("/tools/create-dicom", CreateDicom);
757 799
758 Register("/studies/{id}/split", SplitStudy); 800 Register("/studies/{id}/split", SplitStudy);
801 Register("/studies/{id}/merge", MergeStudy);
759 } 802 }
760 } 803 }