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