comparison OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp @ 2844:99863d6245b2

New URI: "/studies/.../split" to split a study
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 28 Sep 2018 16:48:43 +0200
parents 8aa6aef11b70
children 52b017d22a4f
comparison
equal deleted inserted replaced
2843:4ee3a759afea 2844:99863d6245b2
34 #include "../PrecompiledHeadersServer.h" 34 #include "../PrecompiledHeadersServer.h"
35 #include "OrthancRestApi.h" 35 #include "OrthancRestApi.h"
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 "../ServerContext.h" 40 #include "../ServerContext.h"
40 #include "../ServerJobs/ResourceModificationJob.h" 41 #include "../ServerJobs/ResourceModificationJob.h"
42 #include "../ServerJobs/SplitStudyJob.h"
41 43
42 #include <boost/lexical_cast.hpp> 44 #include <boost/lexical_cast.hpp>
43 #include <boost/algorithm/string/predicate.hpp> 45 #include <boost/algorithm/string/predicate.hpp>
44 46
45 namespace Orthanc 47 namespace Orthanc
650 OrthancRestApi::GetApi(call).AnswerStoredResource(call, id, ResourceType_Instance, StoreStatus_Success); 652 OrthancRestApi::GetApi(call).AnswerStoredResource(call, id, ResourceType_Instance, StoreStatus_Success);
651 } 653 }
652 } 654 }
653 655
654 656
657 static void SplitStudy(RestApiPostCall& call)
658 {
659 ServerContext& context = OrthancRestApi::GetContext(call);
660
661 Json::Value request;
662 if (!call.ParseJsonRequest(request))
663 {
664 // Bad JSON request
665 throw OrthancException(ErrorCode_BadFileFormat);
666 }
667
668 const std::string study = call.GetUriComponent("id", "");
669 int priority = Toolbox::GetJsonIntegerField(request, "Priority", 0);
670
671 std::auto_ptr<SplitStudyJob> job(new SplitStudyJob(context, study));
672 job->SetOrigin(call);
673 job->SetDescription("REST API");
674
675 std::vector<std::string> series;
676 SerializationToolbox::ReadArrayOfStrings(series, request, "Series");
677
678 for (size_t i = 0; i < series.size(); i++)
679 {
680 job->AddSourceSeries(series[i]);
681 }
682
683 static const char* KEEP_SOURCE = "KeepSource";
684 if (request.isMember(KEEP_SOURCE))
685 {
686 job->SetKeepSource(SerializationToolbox::ReadBoolean(request, KEEP_SOURCE));
687 }
688
689 static const char* REMOVE = "Remove";
690 if (request.isMember(REMOVE))
691 {
692 if (request[REMOVE].type() != Json::arrayValue)
693 {
694 throw OrthancException(ErrorCode_BadFileFormat);
695 }
696
697 for (Json::Value::ArrayIndex i = 0; i < request[REMOVE].size(); i++)
698 {
699 if (request[REMOVE][i].type() != Json::stringValue)
700 {
701 throw OrthancException(ErrorCode_BadFileFormat);
702 }
703 else
704 {
705 job->Remove(FromDcmtkBridge::ParseTag(request[REMOVE][i].asCString()));
706 }
707 }
708 }
709
710 static const char* REPLACE = "Replace";
711 if (request.isMember(REPLACE))
712 {
713 if (request[REPLACE].type() != Json::objectValue)
714 {
715 throw OrthancException(ErrorCode_BadFileFormat);
716 }
717
718 Json::Value::Members tags = request[REPLACE].getMemberNames();
719
720 for (size_t i = 0; i < tags.size(); i++)
721 {
722 const Json::Value& value = request[REPLACE][tags[i]];
723
724 if (value.type() != Json::stringValue)
725 {
726 throw OrthancException(ErrorCode_BadFileFormat);
727 }
728 else
729 {
730 job->Replace(FromDcmtkBridge::ParseTag(tags[i]), value.asString());
731 }
732 }
733 }
734
735 std::string id;
736 context.GetJobsEngine().GetRegistry().Submit(id, job.release(), priority);
737
738 Json::Value v;
739 v["ID"] = id;
740 call.GetOutput().AnswerJson(v);
741 }
742
743
655 void OrthancRestApi::RegisterAnonymizeModify() 744 void OrthancRestApi::RegisterAnonymizeModify()
656 { 745 {
657 Register("/instances/{id}/modify", ModifyInstance); 746 Register("/instances/{id}/modify", ModifyInstance);
658 Register("/series/{id}/modify", ModifyResource<ResourceType_Series>); 747 Register("/series/{id}/modify", ModifyResource<ResourceType_Series>);
659 Register("/studies/{id}/modify", ModifyResource<ResourceType_Study>); 748 Register("/studies/{id}/modify", ModifyResource<ResourceType_Study>);
663 Register("/series/{id}/anonymize", AnonymizeResource<ResourceType_Series>); 752 Register("/series/{id}/anonymize", AnonymizeResource<ResourceType_Series>);
664 Register("/studies/{id}/anonymize", AnonymizeResource<ResourceType_Study>); 753 Register("/studies/{id}/anonymize", AnonymizeResource<ResourceType_Study>);
665 Register("/patients/{id}/anonymize", AnonymizeResource<ResourceType_Patient>); 754 Register("/patients/{id}/anonymize", AnonymizeResource<ResourceType_Patient>);
666 755
667 Register("/tools/create-dicom", CreateDicom); 756 Register("/tools/create-dicom", CreateDicom);
757
758 Register("/studies/{id}/split", SplitStudy);
668 } 759 }
669 } 760 }