Mercurial > hg > orthanc
diff 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 |
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp Mon Oct 01 14:19:45 2018 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp Tue Oct 02 17:05:07 2018 +0200 @@ -38,6 +38,7 @@ #include "../../Core/Logging.h" #include "../../Core/SerializationToolbox.h" #include "../ServerContext.h" +#include "../ServerJobs/MergeStudyJob.h" #include "../ServerJobs/ResourceModificationJob.h" #include "../ServerJobs/SplitStudyJob.h" @@ -741,6 +742,47 @@ } + static void MergeStudy(RestApiPostCall& call) + { + ServerContext& context = OrthancRestApi::GetContext(call); + + Json::Value request; + if (!call.ParseJsonRequest(request)) + { + // Bad JSON request + throw OrthancException(ErrorCode_BadFileFormat); + } + + const std::string study = call.GetUriComponent("id", ""); + int priority = Toolbox::GetJsonIntegerField(request, "Priority", 0); + + std::auto_ptr<MergeStudyJob> job(new MergeStudyJob(context, study)); + job->SetOrigin(call); + job->SetDescription("REST API"); + + std::vector<std::string> resources; + SerializationToolbox::ReadArrayOfStrings(resources, request, "Resources"); + + for (size_t i = 0; i < resources.size(); i++) + { + job->AddSource(resources[i]); + } + + static const char* KEEP_SOURCE = "KeepSource"; + if (request.isMember(KEEP_SOURCE)) + { + job->SetKeepSource(SerializationToolbox::ReadBoolean(request, KEEP_SOURCE)); + } + + std::string id; + context.GetJobsEngine().GetRegistry().Submit(id, job.release(), priority); + + Json::Value v; + v["ID"] = id; + call.GetOutput().AnswerJson(v); + } + + void OrthancRestApi::RegisterAnonymizeModify() { Register("/instances/{id}/modify", ModifyInstance); @@ -756,5 +798,6 @@ Register("/tools/create-dicom", CreateDicom); Register("/studies/{id}/split", SplitStudy); + Register("/studies/{id}/merge", MergeStudy); } }