Mercurial > hg > orthanc
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, |