Orthanc Plugin SDK  1.3.1
Documentation of the plugin interface of Orthanc
OrthancCDatabasePlugin.h
1 
39 #pragma once
40 
41 #include "OrthancCPlugin.h"
42 
43 
46 #ifdef __cplusplus
47 extern "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 
OrthancPluginErrorCode
Definition: OrthancCPlugin.h:198
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:871
OrthancPluginResourceType
Definition: OrthancCPlugin.h:637
OrthancPluginDatabaseContext * OrthancPluginRegisterDatabaseBackend(OrthancPluginContext *context, const OrthancPluginDatabaseBackend *backend, void *payload)
Definition: OrthancCDatabasePlugin.h:713
struct _OrthancPluginDatabaseContext_t OrthancPluginDatabaseContext
Definition: OrthancCDatabasePlugin.h:56
OrthancPluginDatabaseContext * OrthancPluginRegisterDatabaseBackendV2(OrthancPluginContext *context, const OrthancPluginDatabaseBackend *backend, const OrthancPluginDatabaseExtensions *extensions, void *payload)
Definition: OrthancCDatabasePlugin.h:769
OrthancPluginIdentifierConstraint
Definition: OrthancCPlugin.h:795