Mercurial > hg > orthanc
comparison OrthancServer/OrthancMoveRequestHandler.cpp @ 3160:fc9a4a2dad63
merge
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Thu, 24 Jan 2019 10:55:19 +0100 |
parents | 8a9eb767280c |
children | 8ea7c4546c3a |
comparison
equal
deleted
inserted
replaced
3159:4cfed5c2eacd | 3160:fc9a4a2dad63 |
---|---|
32 | 32 |
33 | 33 |
34 #include "PrecompiledHeadersServer.h" | 34 #include "PrecompiledHeadersServer.h" |
35 #include "OrthancMoveRequestHandler.h" | 35 #include "OrthancMoveRequestHandler.h" |
36 | 36 |
37 #include "OrthancConfiguration.h" | |
38 #include "../../Core/DicomParsing/FromDcmtkBridge.h" | 37 #include "../../Core/DicomParsing/FromDcmtkBridge.h" |
39 #include "../Core/DicomFormat/DicomArray.h" | 38 #include "../Core/DicomFormat/DicomArray.h" |
40 #include "../Core/Logging.h" | 39 #include "../Core/Logging.h" |
40 #include "OrthancConfiguration.h" | |
41 #include "ServerContext.h" | |
41 #include "ServerJobs/DicomModalityStoreJob.h" | 42 #include "ServerJobs/DicomModalityStoreJob.h" |
43 | |
42 | 44 |
43 namespace Orthanc | 45 namespace Orthanc |
44 { | 46 { |
45 namespace | 47 namespace |
46 { | 48 { |
121 { | 123 { |
122 private: | 124 private: |
123 ServerContext& context_; | 125 ServerContext& context_; |
124 std::auto_ptr<DicomModalityStoreJob> job_; | 126 std::auto_ptr<DicomModalityStoreJob> job_; |
125 size_t position_; | 127 size_t position_; |
128 size_t countInstances_; | |
126 | 129 |
127 public: | 130 public: |
128 AsynchronousMove(ServerContext& context, | 131 AsynchronousMove(ServerContext& context, |
129 const std::string& targetAet, | 132 const std::string& targetAet, |
130 const std::string& publicId, | 133 const std::string& publicId, |
152 } | 155 } |
153 | 156 |
154 std::list<std::string> tmp; | 157 std::list<std::string> tmp; |
155 context_.GetIndex().GetChildInstances(tmp, publicId); | 158 context_.GetIndex().GetChildInstances(tmp, publicId); |
156 | 159 |
160 countInstances_ = tmp.size(); | |
161 | |
157 job_->Reserve(tmp.size()); | 162 job_->Reserve(tmp.size()); |
158 | 163 |
159 for (std::list<std::string>::iterator it = tmp.begin(); it != tmp.end(); ++it) | 164 for (std::list<std::string>::iterator it = tmp.begin(); it != tmp.end(); ++it) |
160 { | 165 { |
161 job_->AddInstance(*it); | 166 job_->AddInstance(*it); |
162 } | 167 } |
163 } | 168 } |
164 | 169 |
165 virtual unsigned int GetSubOperationCount() const | 170 virtual unsigned int GetSubOperationCount() const |
166 { | 171 { |
167 return 1; | 172 return countInstances_; |
168 } | 173 } |
169 | 174 |
170 virtual Status DoNext() | 175 virtual Status DoNext() |
171 { | 176 { |
177 if (position_ >= countInstances_) | |
178 { | |
179 return Status_Failure; | |
180 } | |
181 | |
172 if (position_ == 0) | 182 if (position_ == 0) |
173 { | 183 { |
174 context_.GetJobsEngine().GetRegistry().Submit(job_.release(), 0 /* priority */); | 184 context_.GetJobsEngine().GetRegistry().Submit(job_.release(), 0 /* priority */); |
175 return Status_Success; | 185 } |
176 } | 186 |
177 else | 187 position_ ++; |
178 { | 188 return Status_Success; |
179 return Status_Failure; | |
180 } | |
181 } | 189 } |
182 }; | 190 }; |
183 } | 191 } |
184 | 192 |
185 | 193 |
224 return false; | 232 return false; |
225 } | 233 } |
226 | 234 |
227 const std::string& content = value.GetContent(); | 235 const std::string& content = value.GetContent(); |
228 | 236 |
229 std::list<std::string> ids; | 237 std::vector<std::string> ids; |
230 context_.GetIndex().LookupIdentifierExact(ids, level, tag, content); | 238 context_.GetIndex().LookupIdentifierExact(ids, level, tag, content); |
231 | 239 |
232 if (ids.size() != 1) | 240 if (ids.size() != 1) |
233 { | 241 { |
234 return false; | 242 return false; |
235 } | 243 } |
236 else | 244 else |
237 { | 245 { |
238 publicId = ids.front(); | 246 publicId = ids[0]; |
239 return true; | 247 return true; |
240 } | 248 } |
241 } | 249 } |
242 | 250 |
243 | 251 |