Mercurial > hg > orthanc
diff OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp @ 2868:abce036683cd
sharing code within OrthancRestAnonymizeModify
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 08 Oct 2018 17:05:19 +0200 |
parents | 251614c2edac |
children | 2bd87764709c |
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp Mon Oct 08 16:08:51 2018 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp Mon Oct 08 17:05:19 2018 +0200 @@ -57,39 +57,14 @@ } - static int GetPriority(const Json::Value& request) - { - static const char* PRIORITY = "Priority"; - - if (request.isMember(PRIORITY)) - { - if (request[PRIORITY].type() == Json::intValue) - { - return request[PRIORITY].asInt(); - } - else - { - LOG(ERROR) << "Field \"" << PRIORITY << "\" of a modification request should be an integer"; - throw OrthancException(ErrorCode_BadFileFormat); - } - } - else - { - return 0; // Default priority - } - } - - - static void ParseModifyRequest(DicomModification& target, - int& priority, + static void ParseModifyRequest(Json::Value& request, + DicomModification& target, const RestApiPostCall& call) { // curl http://localhost:8042/series/95a6e2bf-9296e2cc-bf614e2f-22b391ee-16e010e0/modify -X POST -d '{"Replace":{"InstitutionName":"My own clinic"},"Priority":9}' - Json::Value request; if (call.ParseJsonRequest(request)) { - priority = GetPriority(request); target.ParseModifyRequest(request); } else @@ -99,18 +74,15 @@ } - static void ParseAnonymizationRequest(DicomModification& target, - int& priority, + static void ParseAnonymizationRequest(Json::Value& request, + DicomModification& target, RestApiPostCall& call) { // curl http://localhost:8042/instances/6e67da51-d119d6ae-c5667437-87b9a8a5-0f07c49f/anonymize -X POST -d '{"Replace":{"PatientName":"hello","0010-0020":"world"},"Keep":["StudyDescription", "SeriesDescription"],"KeepPrivateTags": true,"Remove":["Modality"]}' > Anonymized.dcm - Json::Value request; if (call.ParseJsonRequest(request) && request.isObject()) { - priority = GetPriority(request); - bool patientNameReplaced; target.ParseAnonymizationRequest(patientNameReplaced, request); @@ -145,49 +117,13 @@ } - - static void SubmitJob(std::auto_ptr<DicomModification>& modification, - bool isAnonymization, - ResourceType level, - int priority, - RestApiPostCall& call) - { - ServerContext& context = OrthancRestApi::GetContext(call); - - std::auto_ptr<ResourceModificationJob> job(new ResourceModificationJob(context)); - - boost::shared_ptr<ResourceModificationJob::Output> output(new ResourceModificationJob::Output(level)); - job->SetModification(modification.release(), isAnonymization); - job->SetOutput(output); - job->SetOrigin(call); - job->SetDescription("REST API"); - - context.AddChildInstances(*job, call.GetUriComponent("id", "")); - - Json::Value publicContent; - if (context.GetJobsEngine().GetRegistry().SubmitAndWait - (publicContent, job.release(), priority)) - { - Json::Value json; - if (output->Format(json)) - { - call.GetOutput().AnswerJson(json); - return; - } - } - - call.GetOutput().SignalError(HttpStatus_500_InternalServerError); - } - - - static void ModifyInstance(RestApiPostCall& call) { DicomModification modification; modification.SetAllowManualIdentifiers(true); - int priority; - ParseModifyRequest(modification, priority, call); + Json::Value request; + ParseModifyRequest(request, modification, call); if (modification.IsReplaced(DICOM_TAG_PATIENT_ID)) { @@ -215,23 +151,45 @@ DicomModification modification; modification.SetAllowManualIdentifiers(true); - int priority; - ParseAnonymizationRequest(modification, priority, call); + Json::Value request; + ParseAnonymizationRequest(request, modification, call); AnonymizeOrModifyInstance(modification, call); } + static void SubmitModificationJob(std::auto_ptr<DicomModification>& modification, + bool isAnonymization, + RestApiPostCall& call, + const Json::Value& body, + ResourceType level) + { + ServerContext& context = OrthancRestApi::GetContext(call); + + std::auto_ptr<ResourceModificationJob> job(new ResourceModificationJob(context)); + + job->SetModification(modification.release(), level, isAnonymization); + job->SetOrigin(call); + + context.AddChildInstances(*job, call.GetUriComponent("id", "")); + + OrthancRestApi::GetApi(call).SubmitCommandsJob + (call, job.release(), true /* synchronous by default */, body); + } + + template <enum ResourceType resourceType> static void ModifyResource(RestApiPostCall& call) { std::auto_ptr<DicomModification> modification(new DicomModification); - int priority; - ParseModifyRequest(*modification, priority, call); + Json::Value body; + ParseModifyRequest(body, *modification, call); modification->SetLevel(resourceType); - SubmitJob(modification, false, resourceType, priority, call); + + SubmitModificationJob(modification, false /* not an anonymization */, + call, body, resourceType); } @@ -240,10 +198,11 @@ { std::auto_ptr<DicomModification> modification(new DicomModification); - int priority; - ParseAnonymizationRequest(*modification, priority, call); + Json::Value body; + ParseAnonymizationRequest(body, *modification, call); - SubmitJob(modification, true, resourceType, priority, call); + SubmitModificationJob(modification, true /* anonymization */, + call, body, resourceType); }