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)