Orthanc Plugin SDK 1.3.0
Documentation of the plugin interface of Orthanc
OrthancCDatabasePlugin.h
1
39#pragma once
40
41#include "OrthancCPlugin.h"
42
43
46#ifdef __cplusplus
47extern "C"
48{
49#endif
50
51
56 typedef struct _OrthancPluginDatabaseContext_t OrthancPluginDatabaseContext;
57
58
59/*<! @cond Doxygen_Suppress */
60 typedef enum
61 {
62 _OrthancPluginDatabaseAnswerType_None = 0,
63
64 /* Events */
65 _OrthancPluginDatabaseAnswerType_DeletedAttachment = 1,
66 _OrthancPluginDatabaseAnswerType_DeletedResource = 2,
67 _OrthancPluginDatabaseAnswerType_RemainingAncestor = 3,
68
69 /* Return value */
70 _OrthancPluginDatabaseAnswerType_Attachment = 10,
71 _OrthancPluginDatabaseAnswerType_Change = 11,
72 _OrthancPluginDatabaseAnswerType_DicomTag = 12,
73 _OrthancPluginDatabaseAnswerType_ExportedResource = 13,
74 _OrthancPluginDatabaseAnswerType_Int32 = 14,
75 _OrthancPluginDatabaseAnswerType_Int64 = 15,
76 _OrthancPluginDatabaseAnswerType_Resource = 16,
77 _OrthancPluginDatabaseAnswerType_String = 17,
78
79 _OrthancPluginDatabaseAnswerType_INTERNAL = 0x7fffffff
80 } _OrthancPluginDatabaseAnswerType;
81
82
83 typedef struct
84 {
85 const char* uuid;
86 int32_t contentType;
87 uint64_t uncompressedSize;
88 const char* uncompressedHash;
89 int32_t compressionType;
90 uint64_t compressedSize;
91 const char* compressedHash;
92 } OrthancPluginAttachment;
93
94 typedef struct
95 {
96 uint16_t group;
97 uint16_t element;
98 const char* value;
99 } OrthancPluginDicomTag;
100
101 typedef struct
102 {
103 int64_t seq;
104 int32_t changeType;
105 OrthancPluginResourceType resourceType;
106 const char* publicId;
107 const char* date;
108 } OrthancPluginChange;
109
110 typedef struct
111 {
112 int64_t seq;
113 OrthancPluginResourceType resourceType;
114 const char* publicId;
115 const char* modality;
116 const char* date;
117 const char* patientId;
118 const char* studyInstanceUid;
119 const char* seriesInstanceUid;
120 const char* sopInstanceUid;
121 } OrthancPluginExportedResource;
122
123
124 typedef struct
125 {
127 _OrthancPluginDatabaseAnswerType type;
128 int32_t valueInt32;
129 uint32_t valueUint32;
130 int64_t valueInt64;
131 const char *valueString;
132 const void *valueGeneric;
133 } _OrthancPluginDatabaseAnswer;
134
135 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerString(
136 OrthancPluginContext* context,
138 const char* value)
139 {
140 _OrthancPluginDatabaseAnswer params;
141 memset(&params, 0, sizeof(params));
142 params.database = database;
143 params.type = _OrthancPluginDatabaseAnswerType_String;
144 params.valueString = value;
145 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
146 }
147
148 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChange(
149 OrthancPluginContext* context,
151 const OrthancPluginChange* change)
152 {
153 _OrthancPluginDatabaseAnswer params;
154 memset(&params, 0, sizeof(params));
155
156 params.database = database;
157 params.type = _OrthancPluginDatabaseAnswerType_Change;
158 params.valueUint32 = 0;
159 params.valueGeneric = change;
160
161 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
162 }
163
164 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChangesDone(
165 OrthancPluginContext* context,
167 {
168 _OrthancPluginDatabaseAnswer params;
169 memset(&params, 0, sizeof(params));
170
171 params.database = database;
172 params.type = _OrthancPluginDatabaseAnswerType_Change;
173 params.valueUint32 = 1;
174 params.valueGeneric = NULL;
175
176 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
177 }
178
179 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt32(
180 OrthancPluginContext* context,
182 int32_t value)
183 {
184 _OrthancPluginDatabaseAnswer params;
185 memset(&params, 0, sizeof(params));
186 params.database = database;
187 params.type = _OrthancPluginDatabaseAnswerType_Int32;
188 params.valueInt32 = value;
189 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
190 }
191
192 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt64(
193 OrthancPluginContext* context,
195 int64_t value)
196 {
197 _OrthancPluginDatabaseAnswer params;
198 memset(&params, 0, sizeof(params));
199 params.database = database;
200 params.type = _OrthancPluginDatabaseAnswerType_Int64;
201 params.valueInt64 = value;
202 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
203 }
204
205 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResource(
206 OrthancPluginContext* context,
208 const OrthancPluginExportedResource* exported)
209 {
210 _OrthancPluginDatabaseAnswer params;
211 memset(&params, 0, sizeof(params));
212
213 params.database = database;
214 params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
215 params.valueUint32 = 0;
216 params.valueGeneric = exported;
217 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
218 }
219
220 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResourcesDone(
221 OrthancPluginContext* context,
223 {
224 _OrthancPluginDatabaseAnswer params;
225 memset(&params, 0, sizeof(params));
226
227 params.database = database;
228 params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
229 params.valueUint32 = 1;
230 params.valueGeneric = NULL;
231 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
232 }
233
234 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerDicomTag(
235 OrthancPluginContext* context,
237 const OrthancPluginDicomTag* tag)
238 {
239 _OrthancPluginDatabaseAnswer params;
240 memset(&params, 0, sizeof(params));
241 params.database = database;
242 params.type = _OrthancPluginDatabaseAnswerType_DicomTag;
243 params.valueGeneric = tag;
244 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
245 }
246
247 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerAttachment(
248 OrthancPluginContext* context,
250 const OrthancPluginAttachment* attachment)
251 {
252 _OrthancPluginDatabaseAnswer params;
253 memset(&params, 0, sizeof(params));
254 params.database = database;
255 params.type = _OrthancPluginDatabaseAnswerType_Attachment;
256 params.valueGeneric = attachment;
257 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
258 }
259
260 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerResource(
261 OrthancPluginContext* context,
263 int64_t id,
264 OrthancPluginResourceType resourceType)
265 {
266 _OrthancPluginDatabaseAnswer params;
267 memset(&params, 0, sizeof(params));
268 params.database = database;
269 params.type = _OrthancPluginDatabaseAnswerType_Resource;
270 params.valueInt64 = id;
271 params.valueInt32 = (int32_t) resourceType;
272 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
273 }
274
275 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedAttachment(
276 OrthancPluginContext* context,
278 const OrthancPluginAttachment* attachment)
279 {
280 _OrthancPluginDatabaseAnswer params;
281 memset(&params, 0, sizeof(params));
282 params.database = database;
283 params.type = _OrthancPluginDatabaseAnswerType_DeletedAttachment;
284 params.valueGeneric = attachment;
285 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
286 }
287
288 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedResource(
289 OrthancPluginContext* context,
291 const char* publicId,
292 OrthancPluginResourceType resourceType)
293 {
294 _OrthancPluginDatabaseAnswer params;
295 memset(&params, 0, sizeof(params));
296 params.database = database;
297 params.type = _OrthancPluginDatabaseAnswerType_DeletedResource;
298 params.valueString = publicId;
299 params.valueInt32 = (int32_t) resourceType;
300 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
301 }
302
303 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalRemainingAncestor(
304 OrthancPluginContext* context,
306 const char* ancestorId,
307 OrthancPluginResourceType ancestorType)
308 {
309 _OrthancPluginDatabaseAnswer params;
310 memset(&params, 0, sizeof(params));
311 params.database = database;
312 params.type = _OrthancPluginDatabaseAnswerType_RemainingAncestor;
313 params.valueString = ancestorId;
314 params.valueInt32 = (int32_t) ancestorType;
315 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
316 }
317
318
319
320
321
322 typedef struct
323 {
324 OrthancPluginErrorCode (*addAttachment) (
325 /* inputs */
326 void* payload,
327 int64_t id,
328 const OrthancPluginAttachment* attachment);
329
330 OrthancPluginErrorCode (*attachChild) (
331 /* inputs */
332 void* payload,
333 int64_t parent,
334 int64_t child);
335
336 OrthancPluginErrorCode (*clearChanges) (
337 /* inputs */
338 void* payload);
339
340 OrthancPluginErrorCode (*clearExportedResources) (
341 /* inputs */
342 void* payload);
343
344 OrthancPluginErrorCode (*createResource) (
345 /* outputs */
346 int64_t* id,
347 /* inputs */
348 void* payload,
349 const char* publicId,
350 OrthancPluginResourceType resourceType);
351
352 OrthancPluginErrorCode (*deleteAttachment) (
353 /* inputs */
354 void* payload,
355 int64_t id,
356 int32_t contentType);
357
358 OrthancPluginErrorCode (*deleteMetadata) (
359 /* inputs */
360 void* payload,
361 int64_t id,
362 int32_t metadataType);
363
364 OrthancPluginErrorCode (*deleteResource) (
365 /* inputs */
366 void* payload,
367 int64_t id);
368
369 /* Output: Use OrthancPluginDatabaseAnswerString() */
370 OrthancPluginErrorCode (*getAllPublicIds) (
371 /* outputs */
373 /* inputs */
374 void* payload,
375 OrthancPluginResourceType resourceType);
376
377 /* Output: Use OrthancPluginDatabaseAnswerChange() and
378 * OrthancPluginDatabaseAnswerChangesDone() */
379 OrthancPluginErrorCode (*getChanges) (
380 /* outputs */
382 /* inputs */
383 void* payload,
384 int64_t since,
385 uint32_t maxResult);
386
387 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
388 OrthancPluginErrorCode (*getChildrenInternalId) (
389 /* outputs */
391 /* inputs */
392 void* payload,
393 int64_t id);
394
395 /* Output: Use OrthancPluginDatabaseAnswerString() */
396 OrthancPluginErrorCode (*getChildrenPublicId) (
397 /* outputs */
399 /* inputs */
400 void* payload,
401 int64_t id);
402
403 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() and
404 * OrthancPluginDatabaseAnswerExportedResourcesDone() */
405 OrthancPluginErrorCode (*getExportedResources) (
406 /* outputs */
408 /* inputs */
409 void* payload,
410 int64_t since,
411 uint32_t maxResult);
412
413 /* Output: Use OrthancPluginDatabaseAnswerChange() */
414 OrthancPluginErrorCode (*getLastChange) (
415 /* outputs */
417 /* inputs */
418 void* payload);
419
420 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() */
421 OrthancPluginErrorCode (*getLastExportedResource) (
422 /* outputs */
424 /* inputs */
425 void* payload);
426
427 /* Output: Use OrthancPluginDatabaseAnswerDicomTag() */
428 OrthancPluginErrorCode (*getMainDicomTags) (
429 /* outputs */
431 /* inputs */
432 void* payload,
433 int64_t id);
434
435 /* Output: Use OrthancPluginDatabaseAnswerString() */
436 OrthancPluginErrorCode (*getPublicId) (
437 /* outputs */
439 /* inputs */
440 void* payload,
441 int64_t id);
442
443 OrthancPluginErrorCode (*getResourceCount) (
444 /* outputs */
445 uint64_t* target,
446 /* inputs */
447 void* payload,
448 OrthancPluginResourceType resourceType);
449
450 OrthancPluginErrorCode (*getResourceType) (
451 /* outputs */
452 OrthancPluginResourceType* resourceType,
453 /* inputs */
454 void* payload,
455 int64_t id);
456
457 OrthancPluginErrorCode (*getTotalCompressedSize) (
458 /* outputs */
459 uint64_t* target,
460 /* inputs */
461 void* payload);
462
463 OrthancPluginErrorCode (*getTotalUncompressedSize) (
464 /* outputs */
465 uint64_t* target,
466 /* inputs */
467 void* payload);
468
469 OrthancPluginErrorCode (*isExistingResource) (
470 /* outputs */
471 int32_t* existing,
472 /* inputs */
473 void* payload,
474 int64_t id);
475
476 OrthancPluginErrorCode (*isProtectedPatient) (
477 /* outputs */
478 int32_t* isProtected,
479 /* inputs */
480 void* payload,
481 int64_t id);
482
483 /* Output: Use OrthancPluginDatabaseAnswerInt32() */
484 OrthancPluginErrorCode (*listAvailableMetadata) (
485 /* outputs */
487 /* inputs */
488 void* payload,
489 int64_t id);
490
491 /* Output: Use OrthancPluginDatabaseAnswerInt32() */
492 OrthancPluginErrorCode (*listAvailableAttachments) (
493 /* outputs */
495 /* inputs */
496 void* payload,
497 int64_t id);
498
499 OrthancPluginErrorCode (*logChange) (
500 /* inputs */
501 void* payload,
502 const OrthancPluginChange* change);
503
504 OrthancPluginErrorCode (*logExportedResource) (
505 /* inputs */
506 void* payload,
507 const OrthancPluginExportedResource* exported);
508
509 /* Output: Use OrthancPluginDatabaseAnswerAttachment() */
510 OrthancPluginErrorCode (*lookupAttachment) (
511 /* outputs */
513 /* inputs */
514 void* payload,
515 int64_t id,
516 int32_t contentType);
517
518 /* Output: Use OrthancPluginDatabaseAnswerString() */
519 OrthancPluginErrorCode (*lookupGlobalProperty) (
520 /* outputs */
522 /* inputs */
523 void* payload,
524 int32_t property);
525
526 /* Use "OrthancPluginDatabaseExtensions::lookupIdentifier3"
527 instead of this function as of Orthanc 0.9.5 (db v6), can be set to NULL.
528 Output: Use OrthancPluginDatabaseAnswerInt64() */
529 OrthancPluginErrorCode (*lookupIdentifier) (
530 /* outputs */
532 /* inputs */
533 void* payload,
534 const OrthancPluginDicomTag* tag);
535
536 /* Unused starting with Orthanc 0.9.5 (db v6), can be set to NULL.
537 Output: Use OrthancPluginDatabaseAnswerInt64() */
538 OrthancPluginErrorCode (*lookupIdentifier2) (
539 /* outputs */
541 /* inputs */
542 void* payload,
543 const char* value);
544
545 /* Output: Use OrthancPluginDatabaseAnswerString() */
546 OrthancPluginErrorCode (*lookupMetadata) (
547 /* outputs */
549 /* inputs */
550 void* payload,
551 int64_t id,
552 int32_t metadata);
553
554 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
555 OrthancPluginErrorCode (*lookupParent) (
556 /* outputs */
558 /* inputs */
559 void* payload,
560 int64_t id);
561
562 /* Output: Use OrthancPluginDatabaseAnswerResource() */
563 OrthancPluginErrorCode (*lookupResource) (
564 /* outputs */
566 /* inputs */
567 void* payload,
568 const char* publicId);
569
570 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
571 OrthancPluginErrorCode (*selectPatientToRecycle) (
572 /* outputs */
574 /* inputs */
575 void* payload);
576
577 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
578 OrthancPluginErrorCode (*selectPatientToRecycle2) (
579 /* outputs */
581 /* inputs */
582 void* payload,
583 int64_t patientIdToAvoid);
584
585 OrthancPluginErrorCode (*setGlobalProperty) (
586 /* inputs */
587 void* payload,
588 int32_t property,
589 const char* value);
590
591 OrthancPluginErrorCode (*setMainDicomTag) (
592 /* inputs */
593 void* payload,
594 int64_t id,
595 const OrthancPluginDicomTag* tag);
596
597 OrthancPluginErrorCode (*setIdentifierTag) (
598 /* inputs */
599 void* payload,
600 int64_t id,
601 const OrthancPluginDicomTag* tag);
602
603 OrthancPluginErrorCode (*setMetadata) (
604 /* inputs */
605 void* payload,
606 int64_t id,
607 int32_t metadata,
608 const char* value);
609
610 OrthancPluginErrorCode (*setProtectedPatient) (
611 /* inputs */
612 void* payload,
613 int64_t id,
614 int32_t isProtected);
615
616 OrthancPluginErrorCode (*startTransaction) (
617 /* inputs */
618 void* payload);
619
620 OrthancPluginErrorCode (*rollbackTransaction) (
621 /* inputs */
622 void* payload);
623
624 OrthancPluginErrorCode (*commitTransaction) (
625 /* inputs */
626 void* payload);
627
628 OrthancPluginErrorCode (*open) (
629 /* inputs */
630 void* payload);
631
632 OrthancPluginErrorCode (*close) (
633 /* inputs */
634 void* payload);
635
636 } OrthancPluginDatabaseBackend;
637
638
639 typedef struct
640 {
641 /* Output: Use OrthancPluginDatabaseAnswerString() */
642 OrthancPluginErrorCode (*getAllPublicIdsWithLimit) (
643 /* outputs */
645 /* inputs */
646 void* payload,
647 OrthancPluginResourceType resourceType,
648 uint64_t since,
649 uint64_t limit);
650
651 OrthancPluginErrorCode (*getDatabaseVersion) (
652 /* outputs */
653 uint32_t* version,
654 /* inputs */
655 void* payload);
656
657 OrthancPluginErrorCode (*upgradeDatabase) (
658 /* inputs */
659 void* payload,
660 uint32_t targetVersion,
661 OrthancPluginStorageArea* storageArea);
662
663 OrthancPluginErrorCode (*clearMainDicomTags) (
664 /* inputs */
665 void* payload,
666 int64_t id);
667
668 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
669 OrthancPluginErrorCode (*getAllInternalIds) (
670 /* outputs */
672 /* inputs */
673 void* payload,
674 OrthancPluginResourceType resourceType);
675
676 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
677 OrthancPluginErrorCode (*lookupIdentifier3) (
678 /* outputs */
680 /* inputs */
681 void* payload,
682 OrthancPluginResourceType resourceType,
683 const OrthancPluginDicomTag* tag,
685 } OrthancPluginDatabaseExtensions;
686
687/*<! @endcond */
688
689
690 typedef struct
691 {
693 const OrthancPluginDatabaseBackend* backend;
694 void* payload;
695 } _OrthancPluginRegisterDatabaseBackend;
696
714 OrthancPluginContext* context,
715 const OrthancPluginDatabaseBackend* backend,
716 void* payload)
717 {
718 OrthancPluginDatabaseContext* result = NULL;
719 _OrthancPluginRegisterDatabaseBackend params;
720
721 if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
722 {
723 return NULL;
724 }
725
726 memset(&params, 0, sizeof(params));
727 params.backend = backend;
728 params.result = &result;
729 params.payload = payload;
730
731 if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackend, &params) ||
732 result == NULL)
733 {
734 /* Error */
735 return NULL;
736 }
737 else
738 {
739 return result;
740 }
741 }
742
743
744 typedef struct
745 {
747 const OrthancPluginDatabaseBackend* backend;
748 void* payload;
749 const OrthancPluginDatabaseExtensions* extensions;
750 uint32_t extensionsSize;
751 } _OrthancPluginRegisterDatabaseBackendV2;
752
753
770 OrthancPluginContext* context,
771 const OrthancPluginDatabaseBackend* backend,
772 const OrthancPluginDatabaseExtensions* extensions,
773 void* payload)
774 {
775 OrthancPluginDatabaseContext* result = NULL;
776 _OrthancPluginRegisterDatabaseBackendV2 params;
777
778 if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
779 {
780 return NULL;
781 }
782
783 memset(&params, 0, sizeof(params));
784 params.backend = backend;
785 params.result = &result;
786 params.payload = payload;
787 params.extensions = extensions;
788 params.extensionsSize = sizeof(OrthancPluginDatabaseExtensions);
789
790 if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackendV2, &params) ||
791 result == NULL)
792 {
793 /* Error */
794 return NULL;
795 }
796 else
797 {
798 return result;
799 }
800 }
801
802
803#ifdef __cplusplus
804}
805#endif
806
807
OrthancPluginDatabaseContext * OrthancPluginRegisterDatabaseBackendV2(OrthancPluginContext *context, const OrthancPluginDatabaseBackend *backend, const OrthancPluginDatabaseExtensions *extensions, void *payload)
Definition: OrthancCDatabasePlugin.h:769
struct _OrthancPluginDatabaseContext_t OrthancPluginDatabaseContext
Definition: OrthancCDatabasePlugin.h:56
OrthancPluginDatabaseContext * OrthancPluginRegisterDatabaseBackend(OrthancPluginContext *context, const OrthancPluginDatabaseBackend *backend, void *payload)
Definition: OrthancCDatabasePlugin.h:713
struct _OrthancPluginStorageArea_t OrthancPluginStorageArea
Opaque structure that represents the storage area that is actually used by Orthanc.
Definition: OrthancCPlugin.h:829
OrthancPluginIdentifierConstraint
Definition: OrthancCPlugin.h:754
OrthancPluginResourceType
Definition: OrthancCPlugin.h:596
OrthancPluginErrorCode
Definition: OrthancCPlugin.h:189
struct _OrthancPluginContext_t OrthancPluginContext
Data structure that contains information about the Orthanc core.