comparison OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp @ 5210:6a7a244c777d db-protobuf

cont OrthancPluginDatabaseV4::Transaction
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sun, 02 Apr 2023 12:53:33 +0200
parents 154d37a56500
children 27e6ec2811e3
comparison
equal deleted inserted replaced
5209:154d37a56500 5210:6a7a244c777d
47 throw OrthancException(static_cast<ErrorCode>(code)); 47 throw OrthancException(static_cast<ErrorCode>(code));
48 } 48 }
49 } 49 }
50 50
51 51
52 static ResourceType Convert(DatabasePluginMessages::ResourceType type)
53 {
54 switch (type)
55 {
56 case DatabasePluginMessages::RESOURCE_PATIENT:
57 return ResourceType_Patient;
58
59 case DatabasePluginMessages::RESOURCE_STUDY:
60 return ResourceType_Study;
61
62 case DatabasePluginMessages::RESOURCE_SERIES:
63 return ResourceType_Series;
64
65 case DatabasePluginMessages::RESOURCE_INSTANCE:
66 return ResourceType_Instance;
67
68 default:
69 throw OrthancException(ErrorCode_ParameterOutOfRange);
70 }
71 }
72
73
74 static DatabasePluginMessages::ResourceType Convert(ResourceType type)
75 {
76 switch (type)
77 {
78 case ResourceType_Patient:
79 return DatabasePluginMessages::RESOURCE_PATIENT;
80
81 case ResourceType_Study:
82 return DatabasePluginMessages::RESOURCE_STUDY;
83
84 case ResourceType_Series:
85 return DatabasePluginMessages::RESOURCE_SERIES;
86
87 case ResourceType_Instance:
88 return DatabasePluginMessages::RESOURCE_INSTANCE;
89
90 default:
91 throw OrthancException(ErrorCode_ParameterOutOfRange);
92 }
93 }
94
95
52 static FileInfo Convert(const DatabasePluginMessages::FileInfo& source) 96 static FileInfo Convert(const DatabasePluginMessages::FileInfo& source)
53 { 97 {
54 return FileInfo(source.uuid(), 98 return FileInfo(source.uuid(),
55 static_cast<FileContentType>(source.content_type()), 99 static_cast<FileContentType>(source.content_type()),
56 source.uncompressed_size(), 100 source.uncompressed_size(),
59 source.compressed_size(), 103 source.compressed_size(),
60 source.compressed_hash()); 104 source.compressed_hash());
61 } 105 }
62 106
63 107
64 static ResourceType Convert(DatabasePluginMessages::ResourceType type) 108 static ServerIndexChange Convert(const DatabasePluginMessages::ServerIndexChange& source)
65 { 109 {
66 switch (type) 110 return ServerIndexChange(source.seq(),
67 { 111 static_cast<ChangeType>(source.change_type()),
68 case DatabasePluginMessages::RESOURCE_PATIENT: 112 Convert(source.resource_type()),
69 return ResourceType_Patient; 113 source.public_id(),
70 114 source.date());
71 case DatabasePluginMessages::RESOURCE_STUDY: 115 }
72 return ResourceType_Study; 116
73 117
74 case DatabasePluginMessages::RESOURCE_SERIES: 118 static ExportedResource Convert(const DatabasePluginMessages::ExportedResource& source)
75 return ResourceType_Series; 119 {
76 120 return ExportedResource(source.seq(),
77 case DatabasePluginMessages::RESOURCE_INSTANCE: 121 Convert(source.resource_type()),
78 return ResourceType_Instance; 122 source.public_id(),
79 123 source.modality(),
80 default: 124 source.date(),
81 throw OrthancException(ErrorCode_ParameterOutOfRange); 125 source.patient_id(),
82 } 126 source.study_instance_uid(),
83 } 127 source.series_instance_uid(),
84 128 source.sop_instance_uid());
85 129 }
86 static DatabasePluginMessages::ResourceType Convert(ResourceType type) 130
87 { 131
88 switch (type)
89 {
90 case ResourceType_Patient:
91 return DatabasePluginMessages::RESOURCE_PATIENT;
92
93 case ResourceType_Study:
94 return DatabasePluginMessages::RESOURCE_STUDY;
95
96 case ResourceType_Series:
97 return DatabasePluginMessages::RESOURCE_SERIES;
98
99 case ResourceType_Instance:
100 return DatabasePluginMessages::RESOURCE_INSTANCE;
101
102 default:
103 throw OrthancException(ErrorCode_ParameterOutOfRange);
104 }
105 }
106
107
108 static void Execute(DatabasePluginMessages::Response& response, 132 static void Execute(DatabasePluginMessages::Response& response,
109 const OrthancPluginDatabaseV4& database, 133 const OrthancPluginDatabaseV4& database,
110 const DatabasePluginMessages::Request& request) 134 const DatabasePluginMessages::Request& request)
111 { 135 {
112 std::string requestSerialized; 136 std::string requestSerialized;
168 192
169 DatabasePluginMessages::Response fullResponse; 193 DatabasePluginMessages::Response fullResponse;
170 Execute(fullResponse, database_, fullRequest); 194 Execute(fullResponse, database_, fullRequest);
171 195
172 response.CopyFrom(fullResponse.transaction_response()); 196 response.CopyFrom(fullResponse.transaction_response());
197 }
198
199
200 void ExecuteTransaction(DatabasePluginMessages::TransactionResponse& response,
201 DatabasePluginMessages::TransactionOperation operation)
202 {
203 DatabasePluginMessages::TransactionRequest request; // Ignored
204 ExecuteTransaction(response, operation, request);
173 } 205 }
174 206
175 207
176 void ExecuteTransaction(DatabasePluginMessages::TransactionOperation operation, 208 void ExecuteTransaction(DatabasePluginMessages::TransactionOperation operation,
177 const DatabasePluginMessages::TransactionRequest& request) 209 const DatabasePluginMessages::TransactionRequest& request)
200 } 232 }
201 233
202 234
203 virtual ~Transaction() 235 virtual ~Transaction()
204 { 236 {
205 { 237 DatabasePluginMessages::DatabaseRequest request;
206 DatabasePluginMessages::DatabaseRequest request; 238 request.mutable_finalize_transaction()->set_transaction(reinterpret_cast<intptr_t>(transaction_));
207 request.mutable_finalize_transaction()->set_transaction(reinterpret_cast<intptr_t>(transaction_)); 239
208 240 DatabasePluginMessages::DatabaseResponse response;
209 DatabasePluginMessages::DatabaseResponse response; 241 ExecuteDatabase(response, database_, DatabasePluginMessages::OPERATION_FINALIZE_TRANSACTION, request);
210 ExecuteDatabase(response, database_, DatabasePluginMessages::OPERATION_FINALIZE_TRANSACTION, request);
211 }
212 } 242 }
213 243
214 244
215 virtual void Rollback() ORTHANC_OVERRIDE 245 virtual void Rollback() ORTHANC_OVERRIDE
216 { 246 {
218 } 248 }
219 249
220 250
221 virtual void Commit(int64_t fileSizeDelta) ORTHANC_OVERRIDE 251 virtual void Commit(int64_t fileSizeDelta) ORTHANC_OVERRIDE
222 { 252 {
223 { 253 DatabasePluginMessages::TransactionRequest request;
224 DatabasePluginMessages::TransactionRequest request; 254 request.mutable_commit()->set_file_size_delta(fileSizeDelta);
225 request.mutable_commit()->set_file_size_delta(fileSizeDelta); 255
226 256 ExecuteTransaction(DatabasePluginMessages::OPERATION_COMMIT, request);
227 ExecuteTransaction(DatabasePluginMessages::OPERATION_COMMIT, request);
228 }
229 } 257 }
230 258
231 259
232 virtual void AddAttachment(int64_t id, 260 virtual void AddAttachment(int64_t id,
233 const FileInfo& attachment, 261 const FileInfo& attachment,
234 int64_t revision) ORTHANC_OVERRIDE 262 int64_t revision) ORTHANC_OVERRIDE
235 { 263 {
236 { 264 DatabasePluginMessages::TransactionRequest request;
237 DatabasePluginMessages::TransactionRequest request; 265 request.mutable_add_attachment()->set_id(id);
238 request.mutable_add_attachment()->set_id(id); 266 request.mutable_add_attachment()->mutable_attachment()->set_uuid(attachment.GetUuid());
239 request.mutable_add_attachment()->mutable_attachment()->set_uuid(attachment.GetUuid()); 267 request.mutable_add_attachment()->mutable_attachment()->set_content_type(attachment.GetContentType());
240 request.mutable_add_attachment()->mutable_attachment()->set_content_type(attachment.GetContentType()); 268 request.mutable_add_attachment()->mutable_attachment()->set_uncompressed_size(attachment.GetUncompressedSize());
241 request.mutable_add_attachment()->mutable_attachment()->set_uncompressed_size(attachment.GetUncompressedSize()); 269 request.mutable_add_attachment()->mutable_attachment()->set_uncompressed_hash(attachment.GetUncompressedMD5());
242 request.mutable_add_attachment()->mutable_attachment()->set_uncompressed_hash(attachment.GetUncompressedMD5()); 270 request.mutable_add_attachment()->mutable_attachment()->set_compression_type(attachment.GetCompressionType());
243 request.mutable_add_attachment()->mutable_attachment()->set_compression_type(attachment.GetCompressionType()); 271 request.mutable_add_attachment()->mutable_attachment()->set_compressed_size(attachment.GetCompressedSize());
244 request.mutable_add_attachment()->mutable_attachment()->set_compressed_size(attachment.GetCompressedSize()); 272 request.mutable_add_attachment()->mutable_attachment()->set_compressed_hash(attachment.GetCompressedMD5());
245 request.mutable_add_attachment()->mutable_attachment()->set_compressed_hash(attachment.GetCompressedMD5()); 273 request.mutable_add_attachment()->set_revision(revision);
246 request.mutable_add_attachment()->set_revision(revision); 274
247 275 ExecuteTransaction(DatabasePluginMessages::OPERATION_ADD_ATTACHMENT, request);
248 ExecuteTransaction(DatabasePluginMessages::OPERATION_ADD_ATTACHMENT, request);
249 }
250 } 276 }
251 277
252 278
253 virtual void ClearChanges() ORTHANC_OVERRIDE 279 virtual void ClearChanges() ORTHANC_OVERRIDE
254 { 280 {
263 289
264 290
265 virtual void DeleteAttachment(int64_t id, 291 virtual void DeleteAttachment(int64_t id,
266 FileContentType attachment) ORTHANC_OVERRIDE 292 FileContentType attachment) ORTHANC_OVERRIDE
267 { 293 {
268 { 294 DatabasePluginMessages::TransactionRequest request;
269 DatabasePluginMessages::TransactionRequest request; 295 request.mutable_delete_attachment()->set_id(id);
270 request.mutable_delete_attachment()->set_id(id); 296 request.mutable_delete_attachment()->set_type(attachment);
271 request.mutable_delete_attachment()->set_type(attachment); 297
272 298 DatabasePluginMessages::TransactionResponse response;
273 DatabasePluginMessages::TransactionResponse response; 299 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_DELETE_ATTACHMENT, request);
274 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_DELETE_ATTACHMENT, request); 300
275 301 listener_.SignalAttachmentDeleted(Convert(response.delete_attachment().deleted_attachment()));
276 listener_.SignalAttachmentDeleted(Convert(response.delete_attachment().deleted_attachment()));
277 }
278 } 302 }
279 303
280 304
281 virtual void DeleteMetadata(int64_t id, 305 virtual void DeleteMetadata(int64_t id,
282 MetadataType type) ORTHANC_OVERRIDE 306 MetadataType type) ORTHANC_OVERRIDE
283 { 307 {
284 { 308 DatabasePluginMessages::TransactionRequest request;
285 DatabasePluginMessages::TransactionRequest request; 309 request.mutable_delete_metadata()->set_id(id);
286 request.mutable_delete_metadata()->set_id(id); 310 request.mutable_delete_metadata()->set_type(type);
287 request.mutable_delete_metadata()->set_type(type); 311
288 312 ExecuteTransaction(DatabasePluginMessages::OPERATION_DELETE_METADATA, request);
289 ExecuteTransaction(DatabasePluginMessages::OPERATION_DELETE_METADATA, request);
290 }
291 } 313 }
292 314
293 315
294 virtual void DeleteResource(int64_t id) ORTHANC_OVERRIDE 316 virtual void DeleteResource(int64_t id) ORTHANC_OVERRIDE
295 { 317 {
296 { 318 DatabasePluginMessages::TransactionRequest request;
297 DatabasePluginMessages::TransactionRequest request; 319 request.mutable_delete_resource()->set_id(id);
298 request.mutable_delete_resource()->set_id(id); 320
299 321 DatabasePluginMessages::TransactionResponse response;
300 DatabasePluginMessages::TransactionResponse response; 322 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_DELETE_RESOURCE, request);
301 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_DELETE_RESOURCE, request); 323
302 324 for (int i = 0; i < response.delete_resource().deleted_attachments().size(); i++)
303 for (int i = 0; i < response.delete_resource().deleted_attachments().size(); i++) 325 {
304 { 326 listener_.SignalAttachmentDeleted(Convert(response.delete_resource().deleted_attachments(i)));
305 listener_.SignalAttachmentDeleted(Convert(response.delete_resource().deleted_attachments(i))); 327 }
306 } 328
307 329 for (int i = 0; i < response.delete_resource().deleted_resources().size(); i++)
308 for (int i = 0; i < response.delete_resource().deleted_resources().size(); i++) 330 {
309 { 331 listener_.SignalResourceDeleted(Convert(response.delete_resource().deleted_resources(i).level()),
310 listener_.SignalResourceDeleted(Convert(response.delete_resource().deleted_resources(i).level()), 332 response.delete_resource().deleted_resources(i).public_id());
311 response.delete_resource().deleted_resources(i).public_id()); 333 }
312 } 334
313 335 if (response.delete_resource().is_remaining_ancestor())
314 if (response.delete_resource().is_remaining_ancestor()) 336 {
315 { 337 listener_.SignalRemainingAncestor(Convert(response.delete_resource().remaining_ancestor().level()),
316 listener_.SignalRemainingAncestor(Convert(response.delete_resource().remaining_ancestor().level()), 338 response.delete_resource().remaining_ancestor().public_id());
317 response.delete_resource().remaining_ancestor().public_id()); 339 }
318 }
319 }
320 } 340 }
321 341
322 342
323 virtual void GetAllMetadata(std::map<MetadataType, std::string>& target, 343 virtual void GetAllMetadata(std::map<MetadataType, std::string>& target,
324 int64_t id) ORTHANC_OVERRIDE 344 int64_t id) ORTHANC_OVERRIDE
325 { 345 {
326 { 346 DatabasePluginMessages::TransactionRequest request;
327 DatabasePluginMessages::TransactionRequest request; 347 request.mutable_get_all_metadata()->set_id(id);
328 request.mutable_get_all_metadata()->set_id(id); 348
329 349 DatabasePluginMessages::TransactionResponse response;
330 DatabasePluginMessages::TransactionResponse response; 350 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_METADATA, request);
331 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_METADATA, request); 351
332 352 target.clear();
333 target.clear(); 353 for (int i = 0; i < response.get_all_metadata().metadata().size(); i++)
334 for (int i = 0; i < response.get_all_metadata().metadata().size(); i++) 354 {
355 MetadataType key = static_cast<MetadataType>(response.get_all_metadata().metadata(i).type());
356
357 if (target.find(key) == target.end())
335 { 358 {
336 MetadataType key = static_cast<MetadataType>(response.get_all_metadata().metadata(i).type()); 359 target[key] = response.get_all_metadata().metadata(i).value();
337 360 }
338 if (target.find(key) == target.end()) 361 else
339 { 362 {
340 target[key] = response.get_all_metadata().metadata(i).value(); 363 throw OrthancException(ErrorCode_DatabasePlugin);
341 }
342 else
343 {
344 throw OrthancException(ErrorCode_DatabasePlugin);
345 }
346 } 364 }
347 } 365 }
348 } 366 }
349 367
350 368
351 virtual void GetAllPublicIds(std::list<std::string>& target, 369 virtual void GetAllPublicIds(std::list<std::string>& target,
352 ResourceType resourceType) ORTHANC_OVERRIDE 370 ResourceType resourceType) ORTHANC_OVERRIDE
353 { 371 {
354 { 372 DatabasePluginMessages::TransactionRequest request;
355 DatabasePluginMessages::TransactionRequest request; 373 request.mutable_get_all_public_ids()->set_resource_type(Convert(resourceType));
356 request.mutable_get_all_public_ids()->set_resource_type(Convert(resourceType)); 374
357 375 DatabasePluginMessages::TransactionResponse response;
358 DatabasePluginMessages::TransactionResponse response; 376 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS, request);
359 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS, request); 377
360 378 target.clear();
361 target.clear(); 379 for (int i = 0; i < response.get_all_public_ids().ids().size(); i++)
362 for (int i = 0; i < response.get_all_public_ids().ids().size(); i++) 380 {
363 { 381 target.push_back(response.get_all_public_ids().ids(i));
364 target.push_back(response.get_all_public_ids().ids(i));
365 }
366 } 382 }
367 } 383 }
368 384
369 385
370 virtual void GetAllPublicIds(std::list<std::string>& target, 386 virtual void GetAllPublicIds(std::list<std::string>& target,
371 ResourceType resourceType, 387 ResourceType resourceType,
372 size_t since, 388 size_t since,
373 size_t limit) ORTHANC_OVERRIDE 389 size_t limit) ORTHANC_OVERRIDE
374 { 390 {
375 { 391 DatabasePluginMessages::TransactionRequest request;
376 DatabasePluginMessages::TransactionRequest request; 392 request.mutable_get_all_public_ids_with_limits()->set_resource_type(Convert(resourceType));
377 request.mutable_get_all_public_ids_with_limits()->set_resource_type(Convert(resourceType)); 393 request.mutable_get_all_public_ids_with_limits()->set_since(since);
378 request.mutable_get_all_public_ids_with_limits()->set_since(since); 394 request.mutable_get_all_public_ids_with_limits()->set_limit(limit);
379 request.mutable_get_all_public_ids_with_limits()->set_limit(limit); 395
380 396 DatabasePluginMessages::TransactionResponse response;
381 DatabasePluginMessages::TransactionResponse response; 397 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS_WITH_LIMITS, request);
382 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS_WITH_LIMITS, request); 398
383 399 target.clear();
384 target.clear(); 400 for (int i = 0; i < response.get_all_public_ids_with_limits().ids().size(); i++)
385 for (int i = 0; i < response.get_all_public_ids_with_limits().ids().size(); i++) 401 {
386 { 402 target.push_back(response.get_all_public_ids_with_limits().ids(i));
387 target.push_back(response.get_all_public_ids_with_limits().ids(i));
388 }
389 } 403 }
390 } 404 }
391 405
392 406
393 virtual void GetChanges(std::list<ServerIndexChange>& target /*out*/, 407 virtual void GetChanges(std::list<ServerIndexChange>& target /*out*/,
394 bool& done /*out*/, 408 bool& done /*out*/,
395 int64_t since, 409 int64_t since,
396 uint32_t maxResults) ORTHANC_OVERRIDE 410 uint32_t maxResults) ORTHANC_OVERRIDE
397 { 411 {
412 DatabasePluginMessages::TransactionRequest request;
413 request.mutable_get_changes()->set_since(since);
414 request.mutable_get_changes()->set_limit(maxResults);
415
416 DatabasePluginMessages::TransactionResponse response;
417 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_CHANGES, request);
418
419 done = response.get_changes().done();
420
421 target.clear();
422 for (int i = 0; i < response.get_changes().changes().size(); i++)
423 {
424 target.push_back(Convert(response.get_changes().changes(i)));
425 }
398 } 426 }
399 427
400 428
401 virtual void GetChildrenInternalId(std::list<int64_t>& target, 429 virtual void GetChildrenInternalId(std::list<int64_t>& target,
402 int64_t id) ORTHANC_OVERRIDE 430 int64_t id) ORTHANC_OVERRIDE
403 { 431 {
432 DatabasePluginMessages::TransactionRequest request;
433 request.mutable_get_children_internal_id()->set_id(id);
434
435 DatabasePluginMessages::TransactionResponse response;
436 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID, request);
437
438 target.clear();
439 for (int i = 0; i < response.get_children_internal_id().ids().size(); i++)
440 {
441 target.push_back(response.get_children_internal_id().ids(i));
442 }
404 } 443 }
405 444
406 445
407 virtual void GetChildrenPublicId(std::list<std::string>& target, 446 virtual void GetChildrenPublicId(std::list<std::string>& target,
408 int64_t id) ORTHANC_OVERRIDE 447 int64_t id) ORTHANC_OVERRIDE
409 { 448 {
449 DatabasePluginMessages::TransactionRequest request;
450 request.mutable_get_children_public_id()->set_id(id);
451
452 DatabasePluginMessages::TransactionResponse response;
453 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID, request);
454
455 target.clear();
456 for (int i = 0; i < response.get_children_public_id().ids().size(); i++)
457 {
458 target.push_back(response.get_children_public_id().ids(i));
459 }
410 } 460 }
411 461
412 462
413 virtual void GetExportedResources(std::list<ExportedResource>& target /*out*/, 463 virtual void GetExportedResources(std::list<ExportedResource>& target /*out*/,
414 bool& done /*out*/, 464 bool& done /*out*/,
415 int64_t since, 465 int64_t since,
416 uint32_t maxResults) ORTHANC_OVERRIDE 466 uint32_t maxResults) ORTHANC_OVERRIDE
417 { 467 {
468 DatabasePluginMessages::TransactionRequest request;
469 request.mutable_get_exported_resources()->set_since(since);
470 request.mutable_get_exported_resources()->set_limit(maxResults);
471
472 DatabasePluginMessages::TransactionResponse response;
473 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_EXPORTED_RESOURCES, request);
474
475 done = response.get_exported_resources().done();
476
477 target.clear();
478 for (int i = 0; i < response.get_exported_resources().resources().size(); i++)
479 {
480 target.push_back(Convert(response.get_exported_resources().resources(i)));
481 }
418 } 482 }
419 483
420 484
421 virtual void GetLastChange(std::list<ServerIndexChange>& target /*out*/) ORTHANC_OVERRIDE 485 virtual void GetLastChange(std::list<ServerIndexChange>& target /*out*/) ORTHANC_OVERRIDE
422 { 486 {
487 DatabasePluginMessages::TransactionResponse response;
488 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_LAST_CHANGE);
489
490 target.clear();
491 if (response.get_last_change().found())
492 {
493 target.push_back(Convert(response.get_last_change().change()));
494 }
423 } 495 }
424 496
425 497
426 virtual void GetLastExportedResource(std::list<ExportedResource>& target /*out*/) ORTHANC_OVERRIDE 498 virtual void GetLastExportedResource(std::list<ExportedResource>& target /*out*/) ORTHANC_OVERRIDE
427 { 499 {
500 DatabasePluginMessages::TransactionResponse response;
501 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_LAST_EXPORTED_RESOURCE);
502
503 target.clear();
504 if (response.get_last_exported_resource().found())
505 {
506 target.push_back(Convert(response.get_last_exported_resource().resource()));
507 }
428 } 508 }
429 509
430 510
431 virtual void GetMainDicomTags(DicomMap& target, 511 virtual void GetMainDicomTags(DicomMap& target,
432 int64_t id) ORTHANC_OVERRIDE 512 int64_t id) ORTHANC_OVERRIDE
433 { 513 {
514 DatabasePluginMessages::TransactionRequest request;
515 request.mutable_get_main_dicom_tags()->set_id(id);
516
517 DatabasePluginMessages::TransactionResponse response;
518 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_MAIN_DICOM_TAGS, request);
519
520 target.Clear();
521
522 for (int i = 0; i < response.get_main_dicom_tags().tags().size(); i++)
523 {
524 const DatabasePluginMessages::GetMainDicomTags_Response_Tag& tag = response.get_main_dicom_tags().tags(i);
525 if (tag.group() > 0xffffu ||
526 tag.element() > 0xffffu)
527 {
528 throw OrthancException(ErrorCode_ParameterOutOfRange);
529 }
530 else
531 {
532 target.SetValue(tag.group(), tag.element(), tag.value(), false);
533 }
534 }
434 } 535 }
435 536
436 537
437 virtual std::string GetPublicId(int64_t resourceId) ORTHANC_OVERRIDE 538 virtual std::string GetPublicId(int64_t resourceId) ORTHANC_OVERRIDE
438 { 539 {
540 DatabasePluginMessages::TransactionRequest request;
541 request.mutable_get_public_id()->set_id(resourceId);
542
543 DatabasePluginMessages::TransactionResponse response;
544 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_PUBLIC_ID, request);
545 return response.get_public_id().id();
439 } 546 }
440 547
441 548
442 virtual uint64_t GetResourcesCount(ResourceType resourceType) ORTHANC_OVERRIDE 549 virtual uint64_t GetResourcesCount(ResourceType resourceType) ORTHANC_OVERRIDE
443 { 550 {
551 DatabasePluginMessages::TransactionRequest request;
552 request.mutable_get_resources_count()->set_type(Convert(resourceType));
553
554 DatabasePluginMessages::TransactionResponse response;
555 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_RESOURCES_COUNT, request);
556 return response.get_resources_count().count();
444 } 557 }
445 558
446 559
447 virtual ResourceType GetResourceType(int64_t resourceId) ORTHANC_OVERRIDE 560 virtual ResourceType GetResourceType(int64_t resourceId) ORTHANC_OVERRIDE
448 { 561 {
562 DatabasePluginMessages::TransactionRequest request;
563 request.mutable_get_resource_type()->set_id(resourceId);
564
565 DatabasePluginMessages::TransactionResponse response;
566 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE, request);
567 return Convert(response.get_resource_type().type());
449 } 568 }
450 569
451 570
452 virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE 571 virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE
453 { 572 {
573 DatabasePluginMessages::TransactionResponse response;
574 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE);
575 return response.get_total_compressed_size().size();
454 } 576 }
455 577
456 578
457 virtual uint64_t GetTotalUncompressedSize() ORTHANC_OVERRIDE 579 virtual uint64_t GetTotalUncompressedSize() ORTHANC_OVERRIDE
458 { 580 {
581 DatabasePluginMessages::TransactionResponse response;
582 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_TOTAL_UNCOMPRESSED_SIZE);
583 return response.get_total_uncompressed_size().size();
459 } 584 }
460 585
461 586
462 virtual bool IsProtectedPatient(int64_t internalId) ORTHANC_OVERRIDE 587 virtual bool IsProtectedPatient(int64_t internalId) ORTHANC_OVERRIDE
463 { 588 {
589 DatabasePluginMessages::TransactionRequest request;
590 request.mutable_is_protected_patient()->set_patient_id(internalId);
591
592 DatabasePluginMessages::TransactionResponse response;
593 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_IS_PROTECTED_PATIENT, request);
594 return response.is_protected_patient().protected_patient();
464 } 595 }
465 596
466 597
467 virtual void ListAvailableAttachments(std::set<FileContentType>& target, 598 virtual void ListAvailableAttachments(std::set<FileContentType>& target,
468 int64_t id) ORTHANC_OVERRIDE 599 int64_t id) ORTHANC_OVERRIDE
469 { 600 {
601 DatabasePluginMessages::TransactionRequest request;
602 request.mutable_list_available_attachments()->set_id(id);
603
604 DatabasePluginMessages::TransactionResponse response;
605 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS, request);
606
607 target.clear();
608 for (int i = 0; i < response.list_available_attachments().attachments().size(); i++)
609 {
610 FileContentType attachment = static_cast<FileContentType>(response.list_available_attachments().attachments(i));
611
612 if (target.find(attachment) == target.end())
613 {
614 target.insert(attachment);
615 }
616 else
617 {
618 throw OrthancException(ErrorCode_DatabasePlugin);
619 }
620 }
470 } 621 }
471 622
472 623
473 virtual void LogChange(int64_t internalId, 624 virtual void LogChange(int64_t internalId,
474 const ServerIndexChange& change) ORTHANC_OVERRIDE 625 const ServerIndexChange& change) ORTHANC_OVERRIDE
475 { 626 {
627 // TODO => Simplify "IDatabaseWrapper"
628
629 DatabasePluginMessages::TransactionRequest request;
630 request.mutable_log_change()->set_change_type(change.GetChangeType());
631 request.mutable_log_change()->set_resource_id(internalId);
632 request.mutable_log_change()->set_resource_type(Convert(change.GetResourceType()));
633 request.mutable_log_change()->set_date(change.GetDate());
634
635 ExecuteTransaction(DatabasePluginMessages::OPERATION_LOG_CHANGE, request);
476 } 636 }
477 637
478 638
479 virtual void LogExportedResource(const ExportedResource& resource) ORTHANC_OVERRIDE 639 virtual void LogExportedResource(const ExportedResource& resource) ORTHANC_OVERRIDE
480 { 640 {
641 // TODO: "seq" is ignored, could be simplified in "ExportedResource"
642
643 DatabasePluginMessages::TransactionRequest request;
644 request.mutable_log_exported_resource()->set_resource_type(Convert(resource.GetResourceType()));
645 request.mutable_log_exported_resource()->set_public_id(resource.GetPublicId());
646 request.mutable_log_exported_resource()->set_modality(resource.GetModality());
647 request.mutable_log_exported_resource()->set_date(resource.GetDate());
648 request.mutable_log_exported_resource()->set_patient_id(resource.GetPatientId());
649 request.mutable_log_exported_resource()->set_study_instance_uid(resource.GetStudyInstanceUid());
650 request.mutable_log_exported_resource()->set_series_instance_uid(resource.GetSeriesInstanceUid());
651 request.mutable_log_exported_resource()->set_sop_instance_uid(resource.GetSopInstanceUid());
652
653 ExecuteTransaction(DatabasePluginMessages::OPERATION_LOG_EXPORTED_RESOURCE, request);
481 } 654 }
482 655
483 656
484 virtual bool LookupAttachment(FileInfo& attachment, 657 virtual bool LookupAttachment(FileInfo& attachment,
485 int64_t& revision, 658 int64_t& revision,