Mercurial > hg > orthanc
diff OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 2602:c25f1a52acbc jobs
reorganization
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 18 May 2018 15:34:11 +0200 |
parents | a3fdfb6979ed |
children | 714dcddeb65f |
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Thu May 17 17:03:40 2018 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Fri May 18 15:34:11 2018 +0200 @@ -34,264 +34,14 @@ #include "../PrecompiledHeadersServer.h" #include "OrthancRestApi.h" -#include "../OrthancInitialization.h" -#include "../../Core/HttpClient.h" +#include "../../Core/DicomParsing/FromDcmtkBridge.h" #include "../../Core/Logging.h" -#include "../../Core/DicomParsing/FromDcmtkBridge.h" -#include "../Scheduler/ServerJob.h" -#include "../Scheduler/StoreScuCommand.h" -#include "../Scheduler/StorePeerCommand.h" +#include "../OrthancInitialization.h" #include "../QueryRetrieveHandler.h" +#include "../ServerJobs/DicomModalityStoreJob.h" +#include "../ServerJobs/OrthancPeerStoreJob.h" #include "../ServerToolbox.h" -#include "../../Core/JobsEngine/SetOfInstancesJob.h" - - -namespace Orthanc -{ - class DicomStoreJob : public SetOfInstancesJob - { - private: - ServerContext& context_; - std::string localAet_; - RemoteModalityParameters remote_; - std::string moveOriginatorAet_; - uint16_t moveOriginatorId_; - std::auto_ptr<DicomUserConnection> connection_; - - void OpenConnection() - { - if (connection_.get() == NULL) - { - connection_.reset(new DicomUserConnection); - connection_->SetLocalApplicationEntityTitle(localAet_); - connection_->SetRemoteModality(remote_); - } - } - - protected: - virtual bool HandleInstance(const std::string& instance) - { - OpenConnection(); - - LOG(INFO) << "Sending instance " << instance << " to modality \"" - << remote_.GetApplicationEntityTitle() << "\""; - - std::string dicom; - context_.ReadDicom(dicom, instance); - - if (HasMoveOriginator()) - { - connection_->Store(dicom, moveOriginatorAet_, moveOriginatorId_); - } - else - { - connection_->Store(dicom); - } - - //boost::this_thread::sleep(boost::posix_time::milliseconds(500)); - - return true; - } - - public: - DicomStoreJob(ServerContext& context) : - context_(context), - localAet_("ORTHANC"), - moveOriginatorId_(0) // By default, not a C-MOVE - { - } - - const std::string& GetLocalAet() const - { - return localAet_; - } - - void SetLocalAet(const std::string& aet) - { - if (IsStarted()) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - localAet_ = aet; - } - } - - const RemoteModalityParameters& GetRemoteModality() const - { - return remote_; - } - - void SetRemoteModality(const RemoteModalityParameters& remote) - { - if (IsStarted()) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - remote_ = remote; - } - } - - bool HasMoveOriginator() const - { - return moveOriginatorId_ != 0; - } - - const std::string& GetMoveOriginatorAet() const - { - if (HasMoveOriginator()) - { - return moveOriginatorAet_; - } - else - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - } - - uint16_t GetMoveOriginatorId() const - { - if (HasMoveOriginator()) - { - return moveOriginatorId_; - } - else - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - } - - void SetMoveOriginator(const std::string& aet, - int id) - { - if (IsStarted()) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else if (id < 0 || - id >= 65536) - { - throw OrthancException(ErrorCode_ParameterOutOfRange); - } - else - { - moveOriginatorId_ = static_cast<uint16_t>(id); - moveOriginatorAet_ = aet; - } - } - - virtual void ReleaseResources() // For pausing jobs - { - connection_.reset(NULL); - } - - virtual void GetJobType(std::string& target) - { - target = "DicomStore"; - } - - virtual void GetPublicContent(Json::Value& value) - { - value["LocalAet"] = localAet_; - value["RemoteAet"] = remote_.GetApplicationEntityTitle(); - - if (HasMoveOriginator()) - { - value["MoveOriginatorAET"] = GetMoveOriginatorAet(); - value["MoveOriginatorID"] = GetMoveOriginatorId(); - } - - value["InstancesCount"] = static_cast<uint32_t>(GetInstances().size()); - value["FailedInstancesCount"] = static_cast<uint32_t>(GetFailedInstances().size()); - } - }; - - - class OrthancPeerStoreJob : public SetOfInstancesJob - { - private: - ServerContext& context_; - WebServiceParameters peer_; - std::auto_ptr<HttpClient> client_; - - protected: - virtual bool HandleInstance(const std::string& instance) - { - //boost::this_thread::sleep(boost::posix_time::milliseconds(500)); - - if (client_.get() == NULL) - { - client_.reset(new HttpClient(peer_, "instances")); - client_->SetMethod(HttpMethod_Post); - } - - LOG(INFO) << "Sending instance " << instance << " to peer \"" - << peer_.GetUrl() << "\""; - - context_.ReadDicom(client_->GetBody(), instance); - - std::string answer; - if (client_->Apply(answer)) - { - return true; - } - else - { - throw OrthancException(ErrorCode_NetworkProtocol); - } - } - - public: - OrthancPeerStoreJob(ServerContext& context) : - context_(context) - { - } - - void SetPeer(const WebServiceParameters& peer) - { - if (IsStarted()) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - peer_ = peer; - } - } - - const WebServiceParameters& GetPeer() const - { - return peer_; - } - - virtual void ReleaseResources() // For pausing jobs - { - client_.reset(NULL); - } - - virtual void GetJobType(std::string& target) - { - target = "OrthancPeerStore"; - } - - virtual void GetPublicContent(Json::Value& value) - { - Json::Value v; - peer_.ToJson(v); - value["Peer"] = v; - - value["InstancesCount"] = static_cast<uint32_t>(GetInstances().size()); - value["FailedInstancesCount"] = static_cast<uint32_t>(GetFailedInstances().size()); - } - }; -} - - - namespace Orthanc { @@ -1017,7 +767,7 @@ RemoteModalityParameters p = Configuration::GetModalityUsingSymbolicName(remote); - std::auto_ptr<DicomStoreJob> job(new DicomStoreJob(context)); + std::auto_ptr<DicomModalityStoreJob> job(new DicomModalityStoreJob(context)); job->SetLocalAet(localAet); job->SetRemoteModality(p);