Mercurial > hg > orthanc
comparison OrthancServer/ServerContext.cpp @ 1002:b067017a8a5b lua-scripting
anonymization refactoring
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 04 Jul 2014 16:31:14 +0200 |
parents | f3929718ea7e |
children | a226e0959d8b |
comparison
equal
deleted
inserted
replaced
1001:f3929718ea7e | 1002:b067017a8a5b |
---|---|
118 | 118 |
119 return true; | 119 return true; |
120 } | 120 } |
121 | 121 |
122 | 122 |
123 void ServerContext::ApplyOnStoredInstance(const Json::Value& simplified, | 123 void ServerContext::ApplyOnStoredInstance(const std::string& instanceId, |
124 const std::string& instanceId) | 124 const Json::Value& simplifiedDicom, |
125 const Json::Value& metadata) | |
125 { | 126 { |
126 LuaContextLocker locker(*this); | 127 LuaContextLocker locker(*this); |
127 | 128 |
128 if (locker.GetLua().IsExistingFunction(ON_STORED_INSTANCE)) | 129 if (locker.GetLua().IsExistingFunction(ON_STORED_INSTANCE)) |
129 { | 130 { |
130 LuaFunctionCall call(locker.GetLua(), ON_STORED_INSTANCE); | 131 LuaFunctionCall call(locker.GetLua(), ON_STORED_INSTANCE); |
131 call.PushJson(simplified); | |
132 call.PushString(instanceId); | 132 call.PushString(instanceId); |
133 call.PushJson(simplifiedDicom); | |
134 call.PushJson(metadata); | |
133 | 135 |
134 Json::Value result; | 136 Json::Value result; |
135 call.ExecuteToJson(result); | 137 call.ExecuteToJson(result); |
136 | 138 |
137 printf("TODO\n"); | 139 printf("TODO\n"); |
138 std::cout << result; | 140 std::cout << result; |
139 } | 141 } |
140 | 142 |
143 #if 1 | |
141 { | 144 { |
142 // Autorouting test | 145 // Autorouting test |
143 RemoteModalityParameters p = Configuration::GetModalityUsingSymbolicName("sample"); | 146 RemoteModalityParameters p = Configuration::GetModalityUsingSymbolicName("sample"); |
144 | 147 |
145 ServerJob job; | 148 ServerJob job; |
146 ServerCommandInstance& a = job.AddCommand(new StoreScuCommand(*this, p)); | 149 ServerCommandInstance& a = job.AddCommand(new StoreScuCommand(*this, p)); |
147 ServerCommandInstance& b = job.AddCommand(new DeleteInstanceCommand(*this)); | |
148 a.AddInput(instanceId); | 150 a.AddInput(instanceId); |
149 a.ConnectNext(b); | 151 |
152 /*ServerCommandInstance& b = job.AddCommand(new DeleteInstanceCommand(*this)); | |
153 a.ConnectNext(b);*/ | |
150 | 154 |
151 job.SetDescription("Autorouting test"); | 155 job.SetDescription("Autorouting test"); |
152 scheduler_.Submit(job); | 156 scheduler_.Submit(job); |
153 } | 157 } |
158 #endif | |
154 } | 159 } |
155 | 160 |
156 | 161 |
157 StoreStatus ServerContext::Store(const char* dicomInstance, | 162 StoreStatus ServerContext::Store(const char* dicomInstance, |
158 size_t dicomSize, | 163 size_t dicomSize, |
159 const DicomMap& dicomSummary, | 164 const DicomMap& dicomSummary, |
160 const Json::Value& dicomJson, | 165 const Json::Value& dicomJson, |
161 const std::string& remoteAet) | 166 const std::string& remoteAet, |
167 const ServerIndex::MetadataMap& metadata) | |
162 { | 168 { |
163 Json::Value simplified; | 169 Json::Value simplified; |
164 SimplifyTags(simplified, dicomJson); | 170 SimplifyTags(simplified, dicomJson); |
165 | 171 |
166 // Test if the instance must be filtered out | 172 // Test if the instance must be filtered out |
184 | 190 |
185 ServerIndex::Attachments attachments; | 191 ServerIndex::Attachments attachments; |
186 attachments.push_back(dicomInfo); | 192 attachments.push_back(dicomInfo); |
187 attachments.push_back(jsonInfo); | 193 attachments.push_back(jsonInfo); |
188 | 194 |
189 StoreStatus status = index_.Store(dicomSummary, attachments, remoteAet); | 195 StoreStatus status = index_.Store(dicomSummary, attachments, remoteAet, metadata); |
190 | 196 |
191 if (status != StoreStatus_Success) | 197 if (status != StoreStatus_Success) |
192 { | 198 { |
193 storage_.Remove(dicomInfo.GetUuid()); | 199 storage_.Remove(dicomInfo.GetUuid()); |
194 storage_.Remove(jsonInfo.GetUuid()); | 200 storage_.Remove(jsonInfo.GetUuid()); |
217 status == StoreStatus_AlreadyStored) | 223 status == StoreStatus_AlreadyStored) |
218 { | 224 { |
219 try | 225 try |
220 { | 226 { |
221 DicomInstanceHasher hasher(dicomSummary); | 227 DicomInstanceHasher hasher(dicomSummary); |
222 ApplyOnStoredInstance(simplified, hasher.HashInstance()); | 228 std::string instanceId = hasher.HashInstance(); |
229 | |
230 Json::Value metadata; | |
231 index_.GetMetadata(metadata, instanceId); | |
232 | |
233 ApplyOnStoredInstance(instanceId, simplified, metadata); | |
223 } | 234 } |
224 catch (OrthancException&) | 235 catch (OrthancException&) |
225 { | 236 { |
226 LOG(ERROR) << "Error when dealing with OnStoredInstance"; | 237 LOG(ERROR) << "Error when dealing with OnStoredInstance"; |
227 } | 238 } |
327 | 338 |
328 | 339 |
329 StoreStatus ServerContext::Store(std::string& resultPublicId, | 340 StoreStatus ServerContext::Store(std::string& resultPublicId, |
330 ParsedDicomFile& dicomInstance, | 341 ParsedDicomFile& dicomInstance, |
331 const char* dicomBuffer, | 342 const char* dicomBuffer, |
332 size_t dicomSize) | 343 size_t dicomSize, |
344 const ServerIndex::MetadataMap& metadata) | |
333 { | 345 { |
334 DicomMap dicomSummary; | 346 DicomMap dicomSummary; |
335 FromDcmtkBridge::Convert(dicomSummary, *GetDicom(dicomInstance).getDataset()); | 347 FromDcmtkBridge::Convert(dicomSummary, *GetDicom(dicomInstance).getDataset()); |
336 | 348 |
337 try | 349 try |
343 FromDcmtkBridge::ToJson(dicomJson, *GetDicom(dicomInstance).getDataset()); | 355 FromDcmtkBridge::ToJson(dicomJson, *GetDicom(dicomInstance).getDataset()); |
344 | 356 |
345 StoreStatus status = StoreStatus_Failure; | 357 StoreStatus status = StoreStatus_Failure; |
346 if (dicomSize > 0) | 358 if (dicomSize > 0) |
347 { | 359 { |
348 status = Store(dicomBuffer, dicomSize, dicomSummary, dicomJson, ""); | 360 status = Store(dicomBuffer, dicomSize, dicomSummary, dicomJson, "", metadata); |
349 } | 361 } |
350 | 362 |
351 return status; | 363 return status; |
352 } | 364 } |
353 catch (OrthancException& e) | 365 catch (OrthancException& e) |
361 } | 373 } |
362 } | 374 } |
363 | 375 |
364 | 376 |
365 StoreStatus ServerContext::Store(std::string& resultPublicId, | 377 StoreStatus ServerContext::Store(std::string& resultPublicId, |
366 ParsedDicomFile& dicomInstance) | 378 ParsedDicomFile& dicomInstance, |
379 const ServerIndex::MetadataMap& metadata) | |
367 { | 380 { |
368 std::string buffer; | 381 std::string buffer; |
369 if (!FromDcmtkBridge::SaveToMemoryBuffer(buffer, GetDicom(dicomInstance).getDataset())) | 382 if (!FromDcmtkBridge::SaveToMemoryBuffer(buffer, GetDicom(dicomInstance).getDataset())) |
370 { | 383 { |
371 throw OrthancException(ErrorCode_InternalError); | 384 throw OrthancException(ErrorCode_InternalError); |
372 } | 385 } |
373 | 386 |
374 if (buffer.size() == 0) | 387 if (buffer.size() == 0) |
375 return Store(resultPublicId, dicomInstance, NULL, 0); | 388 return Store(resultPublicId, dicomInstance, NULL, 0, metadata); |
376 else | 389 else |
377 return Store(resultPublicId, dicomInstance, &buffer[0], buffer.size()); | 390 return Store(resultPublicId, dicomInstance, &buffer[0], buffer.size(), metadata); |
378 } | 391 } |
379 | 392 |
380 | 393 |
381 StoreStatus ServerContext::Store(std::string& resultPublicId, | 394 StoreStatus ServerContext::Store(std::string& resultPublicId, |
382 const char* dicomBuffer, | 395 const char* dicomBuffer, |
383 size_t dicomSize) | 396 size_t dicomSize, |
397 const ServerIndex::MetadataMap& metadata) | |
384 { | 398 { |
385 ParsedDicomFile dicom(dicomBuffer, dicomSize); | 399 ParsedDicomFile dicom(dicomBuffer, dicomSize); |
386 return Store(resultPublicId, dicom, dicomBuffer, dicomSize); | 400 return Store(resultPublicId, dicom, dicomBuffer, dicomSize, metadata); |
387 } | 401 } |
388 | 402 |
389 | 403 |
390 StoreStatus ServerContext::Store(std::string& resultPublicId, | 404 StoreStatus ServerContext::Store(std::string& resultPublicId, |
391 const std::string& dicomContent) | 405 const std::string& dicomContent, |
406 const ServerIndex::MetadataMap& metadata) | |
392 { | 407 { |
393 if (dicomContent.size() == 0) | 408 if (dicomContent.size() == 0) |
394 { | 409 { |
395 return Store(resultPublicId, NULL, 0); | 410 return Store(resultPublicId, NULL, 0); |
396 } | 411 } |
397 else | 412 else |
398 { | 413 { |
399 return Store(resultPublicId, &dicomContent[0], dicomContent.size()); | 414 return Store(resultPublicId, &dicomContent[0], dicomContent.size(), metadata); |
400 } | 415 } |
401 } | 416 } |
402 | 417 |
403 | 418 |
404 void ServerContext::SetStoreMD5ForAttachments(bool storeMD5) | 419 void ServerContext::SetStoreMD5ForAttachments(bool storeMD5) |