Mercurial > hg > orthanc
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 } |