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