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);