Mercurial > hg > orthanc
comparison OrthancServer/ServerJobs/DicomModalityStoreJob.h @ 2603:988936118354 jobs
reorganization
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 18 May 2018 17:02:25 +0200 |
parents | c25f1a52acbc |
children | a21b244efb37 |
comparison
equal
deleted
inserted
replaced
2602:c25f1a52acbc | 2603:988936118354 |
---|---|
34 #pragma once | 34 #pragma once |
35 | 35 |
36 #include "../../Core/JobsEngine/SetOfInstancesJob.h" | 36 #include "../../Core/JobsEngine/SetOfInstancesJob.h" |
37 #include "../../Core/DicomNetworking/DicomUserConnection.h" | 37 #include "../../Core/DicomNetworking/DicomUserConnection.h" |
38 | 38 |
39 #include "../ServerContext.h" | |
39 | 40 |
40 namespace Orthanc | 41 namespace Orthanc |
41 { | 42 { |
42 class DicomModalityStoreJob : public SetOfInstancesJob | 43 class DicomModalityStoreJob : public SetOfInstancesJob |
43 { | 44 { |
47 RemoteModalityParameters remote_; | 48 RemoteModalityParameters remote_; |
48 std::string moveOriginatorAet_; | 49 std::string moveOriginatorAet_; |
49 uint16_t moveOriginatorId_; | 50 uint16_t moveOriginatorId_; |
50 std::auto_ptr<DicomUserConnection> connection_; | 51 std::auto_ptr<DicomUserConnection> connection_; |
51 | 52 |
52 void OpenConnection() | 53 void OpenConnection(); |
53 { | |
54 if (connection_.get() == NULL) | |
55 { | |
56 connection_.reset(new DicomUserConnection); | |
57 connection_->SetLocalApplicationEntityTitle(localAet_); | |
58 connection_->SetRemoteModality(remote_); | |
59 } | |
60 } | |
61 | 54 |
62 protected: | 55 protected: |
63 virtual bool HandleInstance(const std::string& instance) | 56 virtual bool HandleInstance(const std::string& instance); |
64 { | |
65 OpenConnection(); | |
66 | |
67 LOG(INFO) << "Sending instance " << instance << " to modality \"" | |
68 << remote_.GetApplicationEntityTitle() << "\""; | |
69 | |
70 std::string dicom; | |
71 context_.ReadDicom(dicom, instance); | |
72 | |
73 if (HasMoveOriginator()) | |
74 { | |
75 connection_->Store(dicom, moveOriginatorAet_, moveOriginatorId_); | |
76 } | |
77 else | |
78 { | |
79 connection_->Store(dicom); | |
80 } | |
81 | |
82 //boost::this_thread::sleep(boost::posix_time::milliseconds(500)); | |
83 | |
84 return true; | |
85 } | |
86 | 57 |
87 public: | 58 public: |
88 DicomModalityStoreJob(ServerContext& context) : | 59 DicomModalityStoreJob(ServerContext& context); |
89 context_(context), | |
90 localAet_("ORTHANC"), | |
91 moveOriginatorId_(0) // By default, not a C-MOVE | |
92 { | |
93 } | |
94 | 60 |
95 const std::string& GetLocalAet() const | 61 const std::string& GetLocalAet() const |
96 { | 62 { |
97 return localAet_; | 63 return localAet_; |
98 } | 64 } |
99 | 65 |
100 void SetLocalAet(const std::string& aet) | 66 void SetLocalAet(const std::string& aet); |
101 { | |
102 if (IsStarted()) | |
103 { | |
104 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
105 } | |
106 else | |
107 { | |
108 localAet_ = aet; | |
109 } | |
110 } | |
111 | 67 |
112 const RemoteModalityParameters& GetRemoteModality() const | 68 const RemoteModalityParameters& GetRemoteModality() const |
113 { | 69 { |
114 return remote_; | 70 return remote_; |
115 } | 71 } |
116 | 72 |
117 void SetRemoteModality(const RemoteModalityParameters& remote) | 73 void SetRemoteModality(const RemoteModalityParameters& remote); |
118 { | |
119 if (IsStarted()) | |
120 { | |
121 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
122 } | |
123 else | |
124 { | |
125 remote_ = remote; | |
126 } | |
127 } | |
128 | 74 |
129 bool HasMoveOriginator() const | 75 bool HasMoveOriginator() const |
130 { | 76 { |
131 return moveOriginatorId_ != 0; | 77 return moveOriginatorId_ != 0; |
132 } | 78 } |
133 | 79 |
134 const std::string& GetMoveOriginatorAet() const | 80 const std::string& GetMoveOriginatorAet() const; |
135 { | |
136 if (HasMoveOriginator()) | |
137 { | |
138 return moveOriginatorAet_; | |
139 } | |
140 else | |
141 { | |
142 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
143 } | |
144 } | |
145 | 81 |
146 uint16_t GetMoveOriginatorId() const | 82 uint16_t GetMoveOriginatorId() const; |
147 { | |
148 if (HasMoveOriginator()) | |
149 { | |
150 return moveOriginatorId_; | |
151 } | |
152 else | |
153 { | |
154 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
155 } | |
156 } | |
157 | 83 |
158 void SetMoveOriginator(const std::string& aet, | 84 void SetMoveOriginator(const std::string& aet, |
159 int id) | 85 int id); |
160 { | |
161 if (IsStarted()) | |
162 { | |
163 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
164 } | |
165 else if (id < 0 || | |
166 id >= 65536) | |
167 { | |
168 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
169 } | |
170 else | |
171 { | |
172 moveOriginatorId_ = static_cast<uint16_t>(id); | |
173 moveOriginatorAet_ = aet; | |
174 } | |
175 } | |
176 | 86 |
177 virtual void ReleaseResources() // For pausing jobs | 87 virtual void ReleaseResources(); |
178 { | |
179 connection_.reset(NULL); | |
180 } | |
181 | 88 |
182 virtual void GetJobType(std::string& target) | 89 virtual void GetJobType(std::string& target) |
183 { | 90 { |
184 target = "DicomModalityStore"; | 91 target = "DicomModalityStore"; |
185 } | 92 } |
186 | 93 |
187 virtual void GetPublicContent(Json::Value& value) | 94 virtual void GetPublicContent(Json::Value& value); |
188 { | |
189 value["LocalAet"] = localAet_; | |
190 value["RemoteAet"] = remote_.GetApplicationEntityTitle(); | |
191 | |
192 if (HasMoveOriginator()) | |
193 { | |
194 value["MoveOriginatorAET"] = GetMoveOriginatorAet(); | |
195 value["MoveOriginatorID"] = GetMoveOriginatorId(); | |
196 } | |
197 | |
198 value["InstancesCount"] = static_cast<uint32_t>(GetInstances().size()); | |
199 value["FailedInstancesCount"] = static_cast<uint32_t>(GetFailedInstances().size()); | |
200 } | |
201 }; | 95 }; |
202 } | 96 } |