Mercurial > hg > orthanc
diff OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 2585:4c809711149e jobs
reorganization
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 14 May 2018 21:24:51 +0200 |
parents | 38b5045f2bff |
children | ec09641d6f41 |
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Mon May 14 21:15:28 2018 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Mon May 14 21:24:51 2018 +0200 @@ -44,226 +44,11 @@ #include "../QueryRetrieveHandler.h" #include "../ServerToolbox.h" +#include "../../Core/JobsEngine/SetOfInstancesJob.h" namespace Orthanc { - class SetOfInstancesJob : public IJob - { - private: - bool started_; - std::vector<std::string> instances_; - bool permissive_; - size_t position_; - std::set<std::string> failedInstances_; - - protected: - virtual bool HandleInstance(const std::string& instance) = 0; - - public: - SetOfInstancesJob() : - started_(false), - permissive_(false), - position_(0) - { - } - - void Reserve(size_t size) - { - if (started_) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - instances_.reserve(size); - } - } - - size_t GetInstancesCount() const - { - return instances_.size(); - } - - void AddInstance(const std::string& instance) - { - if (started_) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - instances_.push_back(instance); - } - } - - bool IsPermissive() const - { - return permissive_; - } - - void SetPermissive(bool permissive) - { - if (IsStarted()) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - permissive_ = permissive; - } - } - - virtual void SignalResubmit() - { - if (started_) - { - position_ = 0; - failedInstances_.clear(); - } - else - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - } - - virtual void Start() - { - started_ = true; - } - - virtual float GetProgress() - { - if (instances_.size() == 0) - { - return 0; - } - else - { - return (static_cast<float>(position_) / - static_cast<float>(instances_.size())); - } - } - - bool IsStarted() const - { - return started_; - } - - bool IsDone() const - { - return (position_ >= instances_.size()); - } - - void Next() - { - if (IsDone()) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - position_ += 1; - } - } - - const std::string& GetCurrentInstance() const - { - if (IsDone()) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - else - { - return instances_[position_]; - } - } - - - const std::vector<std::string>& GetInstances() const - { - return instances_; - } - - - const std::set<std::string>& GetFailedInstances() const - { - return failedInstances_; - } - - - virtual JobStepResult* ExecuteStep() - { - if (IsDone()) - { - return new JobStepResult(JobStepCode_Failure); - } - - bool ok; - - try - { - ok = HandleInstance(GetCurrentInstance()); - - if (!ok && !permissive_) - { - throw OrthancException(ErrorCode_InternalError); - } - } - catch (OrthancException& e) - { - if (permissive_) - { - ok = false; - } - else - { - throw; - } - } - - if (!ok) - { - failedInstances_.insert(GetCurrentInstance()); - } - - Next(); - - if (IsDone()) - { - return new JobStepResult(JobStepCode_Success); - } - else - { - return new JobStepResult(JobStepCode_Continue); - } - } - - virtual void GetInternalContent(Json::Value& value) - { - Json::Value v = Json::arrayValue; - - for (size_t i = 0; i < instances_.size(); i++) - { - v.append(instances_[i]); - } - - value["Instances"] = v; - - - v = Json::arrayValue; - - for (std::set<std::string>::const_iterator it = failedInstances_.begin(); - it != failedInstances_.end(); ++it) - { - v.append(*it); - } - - value["FailedInstances"] = v; - } - }; - - class DicomStoreJob : public SetOfInstancesJob { private: