comparison Resources/Orthanc/Sdk-1.5.4/orthanc/OrthancCDatabasePlugin.h @ 123:121ab36c87bd

updating to Orthanc SDK 1.5.4
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 08 Feb 2019 17:41:38 +0100
parents
children 4cd7e45b671e
comparison
equal deleted inserted replaced
121:0886da5b4816 123:121ab36c87bd
1 /**
2 * @ingroup CInterface
3 **/
4
5 /**
6 * Orthanc - A Lightweight, RESTful DICOM Store
7 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
8 * Department, University Hospital of Liege, Belgium
9 * Copyright (C) 2017-2019 Osimis S.A., Belgium
10 *
11 * This program is free software: you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation, either version 3 of the
14 * License, or (at your option) any later version.
15 *
16 * In addition, as a special exception, the copyright holders of this
17 * program give permission to link the code of its release with the
18 * OpenSSL project's "OpenSSL" library (or with modified versions of it
19 * that use the same license as the "OpenSSL" library), and distribute
20 * the linked executables. You must obey the GNU General Public License
21 * in all respects for all of the code used other than "OpenSSL". If you
22 * modify file(s) with this exception, you may extend this exception to
23 * your version of the file(s), but you are not obligated to do so. If
24 * you do not wish to do so, delete this exception statement from your
25 * version. If you delete this exception statement from all source files
26 * in the program, then also delete it here.
27 *
28 * This program is distributed in the hope that it will be useful, but
29 * WITHOUT ANY WARRANTY; without even the implied warranty of
30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
31 * General Public License for more details.
32 *
33 * You should have received a copy of the GNU General Public License
34 * along with this program. If not, see <http://www.gnu.org/licenses/>.
35 **/
36
37
38
39 #pragma once
40
41 #include "OrthancCPlugin.h"
42
43
44 /** @{ */
45
46 #ifdef __cplusplus
47 extern "C"
48 {
49 #endif
50
51
52 /**
53 * Opaque structure that represents the context of a custom database engine.
54 * @ingroup Callbacks
55 **/
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 _OrthancPluginDatabaseAnswerType_MatchingResource = 18, /* New in Orthanc 1.5.2 */
79 _OrthancPluginDatabaseAnswerType_Metadata = 19, /* New in Orthanc 1.5.4 */
80
81 _OrthancPluginDatabaseAnswerType_INTERNAL = 0x7fffffff
82 } _OrthancPluginDatabaseAnswerType;
83
84
85 typedef struct
86 {
87 const char* uuid;
88 int32_t contentType;
89 uint64_t uncompressedSize;
90 const char* uncompressedHash;
91 int32_t compressionType;
92 uint64_t compressedSize;
93 const char* compressedHash;
94 } OrthancPluginAttachment;
95
96 typedef struct
97 {
98 uint16_t group;
99 uint16_t element;
100 const char* value;
101 } OrthancPluginDicomTag;
102
103 typedef struct
104 {
105 int64_t seq;
106 int32_t changeType;
107 OrthancPluginResourceType resourceType;
108 const char* publicId;
109 const char* date;
110 } OrthancPluginChange;
111
112 typedef struct
113 {
114 int64_t seq;
115 OrthancPluginResourceType resourceType;
116 const char* publicId;
117 const char* modality;
118 const char* date;
119 const char* patientId;
120 const char* studyInstanceUid;
121 const char* seriesInstanceUid;
122 const char* sopInstanceUid;
123 } OrthancPluginExportedResource;
124
125 typedef struct /* New in Orthanc 1.5.2 */
126 {
127 OrthancPluginResourceType level;
128 uint16_t tagGroup;
129 uint16_t tagElement;
130 uint8_t isIdentifierTag;
131 uint8_t isCaseSensitive;
132 uint8_t isMandatory;
133 OrthancPluginConstraintType type;
134 uint32_t valuesCount;
135 const char* const* values;
136 } OrthancPluginDatabaseConstraint;
137
138 typedef struct /* New in Orthanc 1.5.2 */
139 {
140 const char* resourceId;
141 const char* someInstanceId; /* Can be NULL if not requested */
142 } OrthancPluginMatchingResource;
143
144 typedef struct /* New in Orthanc 1.5.2 */
145 {
146 /* Mandatory field */
147 uint8_t isNewInstance;
148 int64_t instanceId;
149
150 /* The following fields must only be set if "isNewInstance" is "true" */
151 uint8_t isNewPatient;
152 uint8_t isNewStudy;
153 uint8_t isNewSeries;
154 int64_t patientId;
155 int64_t studyId;
156 int64_t seriesId;
157 } OrthancPluginCreateInstanceResult;
158
159 typedef struct /* New in Orthanc 1.5.2 */
160 {
161 int64_t resource;
162 uint16_t group;
163 uint16_t element;
164 const char* value;
165 } OrthancPluginResourcesContentTags;
166
167 typedef struct /* New in Orthanc 1.5.2 */
168 {
169 int64_t resource;
170 int32_t metadata;
171 const char* value;
172 } OrthancPluginResourcesContentMetadata;
173
174
175 typedef struct
176 {
177 OrthancPluginDatabaseContext* database;
178 _OrthancPluginDatabaseAnswerType type;
179 int32_t valueInt32;
180 uint32_t valueUint32;
181 int64_t valueInt64;
182 const char *valueString;
183 const void *valueGeneric;
184 } _OrthancPluginDatabaseAnswer;
185
186 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerString(
187 OrthancPluginContext* context,
188 OrthancPluginDatabaseContext* database,
189 const char* value)
190 {
191 _OrthancPluginDatabaseAnswer params;
192 memset(&params, 0, sizeof(params));
193 params.database = database;
194 params.type = _OrthancPluginDatabaseAnswerType_String;
195 params.valueString = value;
196 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
197 }
198
199 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChange(
200 OrthancPluginContext* context,
201 OrthancPluginDatabaseContext* database,
202 const OrthancPluginChange* change)
203 {
204 _OrthancPluginDatabaseAnswer params;
205 memset(&params, 0, sizeof(params));
206
207 params.database = database;
208 params.type = _OrthancPluginDatabaseAnswerType_Change;
209 params.valueUint32 = 0;
210 params.valueGeneric = change;
211
212 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
213 }
214
215 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChangesDone(
216 OrthancPluginContext* context,
217 OrthancPluginDatabaseContext* database)
218 {
219 _OrthancPluginDatabaseAnswer params;
220 memset(&params, 0, sizeof(params));
221
222 params.database = database;
223 params.type = _OrthancPluginDatabaseAnswerType_Change;
224 params.valueUint32 = 1;
225 params.valueGeneric = NULL;
226
227 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
228 }
229
230 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt32(
231 OrthancPluginContext* context,
232 OrthancPluginDatabaseContext* database,
233 int32_t value)
234 {
235 _OrthancPluginDatabaseAnswer params;
236 memset(&params, 0, sizeof(params));
237 params.database = database;
238 params.type = _OrthancPluginDatabaseAnswerType_Int32;
239 params.valueInt32 = value;
240 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
241 }
242
243 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt64(
244 OrthancPluginContext* context,
245 OrthancPluginDatabaseContext* database,
246 int64_t value)
247 {
248 _OrthancPluginDatabaseAnswer params;
249 memset(&params, 0, sizeof(params));
250 params.database = database;
251 params.type = _OrthancPluginDatabaseAnswerType_Int64;
252 params.valueInt64 = value;
253 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
254 }
255
256 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResource(
257 OrthancPluginContext* context,
258 OrthancPluginDatabaseContext* database,
259 const OrthancPluginExportedResource* exported)
260 {
261 _OrthancPluginDatabaseAnswer params;
262 memset(&params, 0, sizeof(params));
263
264 params.database = database;
265 params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
266 params.valueUint32 = 0;
267 params.valueGeneric = exported;
268 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
269 }
270
271 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResourcesDone(
272 OrthancPluginContext* context,
273 OrthancPluginDatabaseContext* database)
274 {
275 _OrthancPluginDatabaseAnswer params;
276 memset(&params, 0, sizeof(params));
277
278 params.database = database;
279 params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
280 params.valueUint32 = 1;
281 params.valueGeneric = NULL;
282 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
283 }
284
285 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerDicomTag(
286 OrthancPluginContext* context,
287 OrthancPluginDatabaseContext* database,
288 const OrthancPluginDicomTag* tag)
289 {
290 _OrthancPluginDatabaseAnswer params;
291 memset(&params, 0, sizeof(params));
292 params.database = database;
293 params.type = _OrthancPluginDatabaseAnswerType_DicomTag;
294 params.valueGeneric = tag;
295 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
296 }
297
298 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerAttachment(
299 OrthancPluginContext* context,
300 OrthancPluginDatabaseContext* database,
301 const OrthancPluginAttachment* attachment)
302 {
303 _OrthancPluginDatabaseAnswer params;
304 memset(&params, 0, sizeof(params));
305 params.database = database;
306 params.type = _OrthancPluginDatabaseAnswerType_Attachment;
307 params.valueGeneric = attachment;
308 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
309 }
310
311 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerResource(
312 OrthancPluginContext* context,
313 OrthancPluginDatabaseContext* database,
314 int64_t id,
315 OrthancPluginResourceType resourceType)
316 {
317 _OrthancPluginDatabaseAnswer params;
318 memset(&params, 0, sizeof(params));
319 params.database = database;
320 params.type = _OrthancPluginDatabaseAnswerType_Resource;
321 params.valueInt64 = id;
322 params.valueInt32 = (int32_t) resourceType;
323 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
324 }
325
326 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerMatchingResource(
327 OrthancPluginContext* context,
328 OrthancPluginDatabaseContext* database,
329 const OrthancPluginMatchingResource* match)
330 {
331 _OrthancPluginDatabaseAnswer params;
332 memset(&params, 0, sizeof(params));
333 params.database = database;
334 params.type = _OrthancPluginDatabaseAnswerType_MatchingResource;
335 params.valueGeneric = match;
336 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
337 }
338
339 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerMetadata(
340 OrthancPluginContext* context,
341 OrthancPluginDatabaseContext* database,
342 int64_t resourceId,
343 int32_t type,
344 const char* value)
345 {
346 OrthancPluginResourcesContentMetadata metadata;
347 _OrthancPluginDatabaseAnswer params;
348 metadata.resource = resourceId;
349 metadata.metadata = type;
350 metadata.value = value;
351 memset(&params, 0, sizeof(params));
352 params.database = database;
353 params.type = _OrthancPluginDatabaseAnswerType_Metadata;
354 params.valueGeneric = &metadata;
355 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
356 }
357
358 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedAttachment(
359 OrthancPluginContext* context,
360 OrthancPluginDatabaseContext* database,
361 const OrthancPluginAttachment* attachment)
362 {
363 _OrthancPluginDatabaseAnswer params;
364 memset(&params, 0, sizeof(params));
365 params.database = database;
366 params.type = _OrthancPluginDatabaseAnswerType_DeletedAttachment;
367 params.valueGeneric = attachment;
368 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
369 }
370
371 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedResource(
372 OrthancPluginContext* context,
373 OrthancPluginDatabaseContext* database,
374 const char* publicId,
375 OrthancPluginResourceType resourceType)
376 {
377 _OrthancPluginDatabaseAnswer params;
378 memset(&params, 0, sizeof(params));
379 params.database = database;
380 params.type = _OrthancPluginDatabaseAnswerType_DeletedResource;
381 params.valueString = publicId;
382 params.valueInt32 = (int32_t) resourceType;
383 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
384 }
385
386 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalRemainingAncestor(
387 OrthancPluginContext* context,
388 OrthancPluginDatabaseContext* database,
389 const char* ancestorId,
390 OrthancPluginResourceType ancestorType)
391 {
392 _OrthancPluginDatabaseAnswer params;
393 memset(&params, 0, sizeof(params));
394 params.database = database;
395 params.type = _OrthancPluginDatabaseAnswerType_RemainingAncestor;
396 params.valueString = ancestorId;
397 params.valueInt32 = (int32_t) ancestorType;
398 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
399 }
400
401
402
403
404
405 typedef struct
406 {
407 OrthancPluginErrorCode (*addAttachment) (
408 /* inputs */
409 void* payload,
410 int64_t id,
411 const OrthancPluginAttachment* attachment);
412
413 OrthancPluginErrorCode (*attachChild) (
414 /* inputs */
415 void* payload,
416 int64_t parent,
417 int64_t child);
418
419 OrthancPluginErrorCode (*clearChanges) (
420 /* inputs */
421 void* payload);
422
423 OrthancPluginErrorCode (*clearExportedResources) (
424 /* inputs */
425 void* payload);
426
427 OrthancPluginErrorCode (*createResource) (
428 /* outputs */
429 int64_t* id,
430 /* inputs */
431 void* payload,
432 const char* publicId,
433 OrthancPluginResourceType resourceType);
434
435 OrthancPluginErrorCode (*deleteAttachment) (
436 /* inputs */
437 void* payload,
438 int64_t id,
439 int32_t contentType);
440
441 OrthancPluginErrorCode (*deleteMetadata) (
442 /* inputs */
443 void* payload,
444 int64_t id,
445 int32_t metadataType);
446
447 OrthancPluginErrorCode (*deleteResource) (
448 /* inputs */
449 void* payload,
450 int64_t id);
451
452 /* Output: Use OrthancPluginDatabaseAnswerString() */
453 OrthancPluginErrorCode (*getAllPublicIds) (
454 /* outputs */
455 OrthancPluginDatabaseContext* context,
456 /* inputs */
457 void* payload,
458 OrthancPluginResourceType resourceType);
459
460 /* Output: Use OrthancPluginDatabaseAnswerChange() and
461 * OrthancPluginDatabaseAnswerChangesDone() */
462 OrthancPluginErrorCode (*getChanges) (
463 /* outputs */
464 OrthancPluginDatabaseContext* context,
465 /* inputs */
466 void* payload,
467 int64_t since,
468 uint32_t maxResult);
469
470 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
471 OrthancPluginErrorCode (*getChildrenInternalId) (
472 /* outputs */
473 OrthancPluginDatabaseContext* context,
474 /* inputs */
475 void* payload,
476 int64_t id);
477
478 /* Output: Use OrthancPluginDatabaseAnswerString() */
479 OrthancPluginErrorCode (*getChildrenPublicId) (
480 /* outputs */
481 OrthancPluginDatabaseContext* context,
482 /* inputs */
483 void* payload,
484 int64_t id);
485
486 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() and
487 * OrthancPluginDatabaseAnswerExportedResourcesDone() */
488 OrthancPluginErrorCode (*getExportedResources) (
489 /* outputs */
490 OrthancPluginDatabaseContext* context,
491 /* inputs */
492 void* payload,
493 int64_t since,
494 uint32_t maxResult);
495
496 /* Output: Use OrthancPluginDatabaseAnswerChange() */
497 OrthancPluginErrorCode (*getLastChange) (
498 /* outputs */
499 OrthancPluginDatabaseContext* context,
500 /* inputs */
501 void* payload);
502
503 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() */
504 OrthancPluginErrorCode (*getLastExportedResource) (
505 /* outputs */
506 OrthancPluginDatabaseContext* context,
507 /* inputs */
508 void* payload);
509
510 /* Output: Use OrthancPluginDatabaseAnswerDicomTag() */
511 OrthancPluginErrorCode (*getMainDicomTags) (
512 /* outputs */
513 OrthancPluginDatabaseContext* context,
514 /* inputs */
515 void* payload,
516 int64_t id);
517
518 /* Output: Use OrthancPluginDatabaseAnswerString() */
519 OrthancPluginErrorCode (*getPublicId) (
520 /* outputs */
521 OrthancPluginDatabaseContext* context,
522 /* inputs */
523 void* payload,
524 int64_t id);
525
526 OrthancPluginErrorCode (*getResourceCount) (
527 /* outputs */
528 uint64_t* target,
529 /* inputs */
530 void* payload,
531 OrthancPluginResourceType resourceType);
532
533 OrthancPluginErrorCode (*getResourceType) (
534 /* outputs */
535 OrthancPluginResourceType* resourceType,
536 /* inputs */
537 void* payload,
538 int64_t id);
539
540 OrthancPluginErrorCode (*getTotalCompressedSize) (
541 /* outputs */
542 uint64_t* target,
543 /* inputs */
544 void* payload);
545
546 OrthancPluginErrorCode (*getTotalUncompressedSize) (
547 /* outputs */
548 uint64_t* target,
549 /* inputs */
550 void* payload);
551
552 OrthancPluginErrorCode (*isExistingResource) (
553 /* outputs */
554 int32_t* existing,
555 /* inputs */
556 void* payload,
557 int64_t id);
558
559 OrthancPluginErrorCode (*isProtectedPatient) (
560 /* outputs */
561 int32_t* isProtected,
562 /* inputs */
563 void* payload,
564 int64_t id);
565
566 /* Output: Use OrthancPluginDatabaseAnswerInt32() */
567 OrthancPluginErrorCode (*listAvailableMetadata) (
568 /* outputs */
569 OrthancPluginDatabaseContext* context,
570 /* inputs */
571 void* payload,
572 int64_t id);
573
574 /* Output: Use OrthancPluginDatabaseAnswerInt32() */
575 OrthancPluginErrorCode (*listAvailableAttachments) (
576 /* outputs */
577 OrthancPluginDatabaseContext* context,
578 /* inputs */
579 void* payload,
580 int64_t id);
581
582 OrthancPluginErrorCode (*logChange) (
583 /* inputs */
584 void* payload,
585 const OrthancPluginChange* change);
586
587 OrthancPluginErrorCode (*logExportedResource) (
588 /* inputs */
589 void* payload,
590 const OrthancPluginExportedResource* exported);
591
592 /* Output: Use OrthancPluginDatabaseAnswerAttachment() */
593 OrthancPluginErrorCode (*lookupAttachment) (
594 /* outputs */
595 OrthancPluginDatabaseContext* context,
596 /* inputs */
597 void* payload,
598 int64_t id,
599 int32_t contentType);
600
601 /* Output: Use OrthancPluginDatabaseAnswerString() */
602 OrthancPluginErrorCode (*lookupGlobalProperty) (
603 /* outputs */
604 OrthancPluginDatabaseContext* context,
605 /* inputs */
606 void* payload,
607 int32_t property);
608
609 /* Use "OrthancPluginDatabaseExtensions::lookupIdentifier3"
610 instead of this function as of Orthanc 0.9.5 (db v6), can be set to NULL.
611 Output: Use OrthancPluginDatabaseAnswerInt64() */
612 OrthancPluginErrorCode (*lookupIdentifier) (
613 /* outputs */
614 OrthancPluginDatabaseContext* context,
615 /* inputs */
616 void* payload,
617 const OrthancPluginDicomTag* tag);
618
619 /* Unused starting with Orthanc 0.9.5 (db v6), can be set to NULL.
620 Output: Use OrthancPluginDatabaseAnswerInt64() */
621 OrthancPluginErrorCode (*lookupIdentifier2) (
622 /* outputs */
623 OrthancPluginDatabaseContext* context,
624 /* inputs */
625 void* payload,
626 const char* value);
627
628 /* Output: Use OrthancPluginDatabaseAnswerString() */
629 OrthancPluginErrorCode (*lookupMetadata) (
630 /* outputs */
631 OrthancPluginDatabaseContext* context,
632 /* inputs */
633 void* payload,
634 int64_t id,
635 int32_t metadata);
636
637 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
638 OrthancPluginErrorCode (*lookupParent) (
639 /* outputs */
640 OrthancPluginDatabaseContext* context,
641 /* inputs */
642 void* payload,
643 int64_t id);
644
645 /* Output: Use OrthancPluginDatabaseAnswerResource() */
646 OrthancPluginErrorCode (*lookupResource) (
647 /* outputs */
648 OrthancPluginDatabaseContext* context,
649 /* inputs */
650 void* payload,
651 const char* publicId);
652
653 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
654 OrthancPluginErrorCode (*selectPatientToRecycle) (
655 /* outputs */
656 OrthancPluginDatabaseContext* context,
657 /* inputs */
658 void* payload);
659
660 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
661 OrthancPluginErrorCode (*selectPatientToRecycle2) (
662 /* outputs */
663 OrthancPluginDatabaseContext* context,
664 /* inputs */
665 void* payload,
666 int64_t patientIdToAvoid);
667
668 OrthancPluginErrorCode (*setGlobalProperty) (
669 /* inputs */
670 void* payload,
671 int32_t property,
672 const char* value);
673
674 OrthancPluginErrorCode (*setMainDicomTag) (
675 /* inputs */
676 void* payload,
677 int64_t id,
678 const OrthancPluginDicomTag* tag);
679
680 OrthancPluginErrorCode (*setIdentifierTag) (
681 /* inputs */
682 void* payload,
683 int64_t id,
684 const OrthancPluginDicomTag* tag);
685
686 OrthancPluginErrorCode (*setMetadata) (
687 /* inputs */
688 void* payload,
689 int64_t id,
690 int32_t metadata,
691 const char* value);
692
693 OrthancPluginErrorCode (*setProtectedPatient) (
694 /* inputs */
695 void* payload,
696 int64_t id,
697 int32_t isProtected);
698
699 OrthancPluginErrorCode (*startTransaction) (
700 /* inputs */
701 void* payload);
702
703 OrthancPluginErrorCode (*rollbackTransaction) (
704 /* inputs */
705 void* payload);
706
707 OrthancPluginErrorCode (*commitTransaction) (
708 /* inputs */
709 void* payload);
710
711 OrthancPluginErrorCode (*open) (
712 /* inputs */
713 void* payload);
714
715 OrthancPluginErrorCode (*close) (
716 /* inputs */
717 void* payload);
718
719 } OrthancPluginDatabaseBackend;
720
721
722 typedef struct
723 {
724 /**
725 * Base extensions since Orthanc 1.0.0
726 **/
727
728 /* Output: Use OrthancPluginDatabaseAnswerString() */
729 OrthancPluginErrorCode (*getAllPublicIdsWithLimit) (
730 /* outputs */
731 OrthancPluginDatabaseContext* context,
732 /* inputs */
733 void* payload,
734 OrthancPluginResourceType resourceType,
735 uint64_t since,
736 uint64_t limit);
737
738 OrthancPluginErrorCode (*getDatabaseVersion) (
739 /* outputs */
740 uint32_t* version,
741 /* inputs */
742 void* payload);
743
744 OrthancPluginErrorCode (*upgradeDatabase) (
745 /* inputs */
746 void* payload,
747 uint32_t targetVersion,
748 OrthancPluginStorageArea* storageArea);
749
750 OrthancPluginErrorCode (*clearMainDicomTags) (
751 /* inputs */
752 void* payload,
753 int64_t id);
754
755 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
756 OrthancPluginErrorCode (*getAllInternalIds) (
757 /* outputs */
758 OrthancPluginDatabaseContext* context,
759 /* inputs */
760 void* payload,
761 OrthancPluginResourceType resourceType);
762
763 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
764 OrthancPluginErrorCode (*lookupIdentifier3) (
765 /* outputs */
766 OrthancPluginDatabaseContext* context,
767 /* inputs */
768 void* payload,
769 OrthancPluginResourceType resourceType,
770 const OrthancPluginDicomTag* tag,
771 OrthancPluginIdentifierConstraint constraint);
772
773
774 /**
775 * Extensions since Orthanc 1.4.0
776 **/
777
778 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
779 OrthancPluginErrorCode (*lookupIdentifierRange) (
780 /* outputs */
781 OrthancPluginDatabaseContext* context,
782 /* inputs */
783 void* payload,
784 OrthancPluginResourceType resourceType,
785 uint16_t group,
786 uint16_t element,
787 const char* start,
788 const char* end);
789
790
791 /**
792 * Extensions since Orthanc 1.5.2
793 **/
794
795 /* Ouput: Use OrthancPluginDatabaseAnswerMatchingResource */
796 OrthancPluginErrorCode (*lookupResources) (
797 /* outputs */
798 OrthancPluginDatabaseContext* context,
799 /* inputs */
800 void* payload,
801 uint32_t constraintsCount,
802 const OrthancPluginDatabaseConstraint* constraints,
803 OrthancPluginResourceType queryLevel,
804 uint32_t limit,
805 uint8_t requestSomeInstance);
806
807 OrthancPluginErrorCode (*createInstance) (
808 /* output */
809 OrthancPluginCreateInstanceResult* output,
810 /* inputs */
811 void* payload,
812 const char* hashPatient,
813 const char* hashStudy,
814 const char* hashSeries,
815 const char* hashInstance);
816
817 OrthancPluginErrorCode (*setResourcesContent) (
818 /* inputs */
819 void* payload,
820 uint32_t countIdentifierTags,
821 const OrthancPluginResourcesContentTags* identifierTags,
822 uint32_t countMainDicomTags,
823 const OrthancPluginResourcesContentTags* mainDicomTags,
824 uint32_t countMetadata,
825 const OrthancPluginResourcesContentMetadata* metadata);
826
827 /* Ouput: Use OrthancPluginDatabaseAnswerString */
828 OrthancPluginErrorCode (*getChildrenMetadata) (
829 /* outputs */
830 OrthancPluginDatabaseContext* context,
831 /* inputs */
832 void* payload,
833 int64_t resourceId,
834 int32_t metadata);
835
836 OrthancPluginErrorCode (*getLastChangeIndex) (
837 /* outputs */
838 int64_t* target,
839 /* inputs */
840 void* payload);
841
842 OrthancPluginErrorCode (*tagMostRecentPatient) (
843 /* inputs */
844 void* payload,
845 int64_t patientId);
846
847
848 /**
849 * Extensions since Orthanc 1.5.4
850 **/
851
852 /* Ouput: Use OrthancPluginDatabaseAnswerMetadata */
853 OrthancPluginErrorCode (*getAllMetadata) (
854 /* outputs */
855 OrthancPluginDatabaseContext* context,
856 /* inputs */
857 void* payload,
858 int64_t resourceId);
859
860 /* Ouput: Use OrthancPluginDatabaseAnswerString to send
861 the public ID of the parent (if the resource is not a patient) */
862 OrthancPluginErrorCode (*lookupResourceAndParent) (
863 /* outputs */
864 OrthancPluginDatabaseContext* context,
865 uint8_t* isExisting,
866 int64_t* id,
867 OrthancPluginResourceType* type,
868
869 /* inputs */
870 void* payload,
871 const char* publicId);
872
873 } OrthancPluginDatabaseExtensions;
874
875 /*<! @endcond */
876
877
878 typedef struct
879 {
880 OrthancPluginDatabaseContext** result;
881 const OrthancPluginDatabaseBackend* backend;
882 void* payload;
883 } _OrthancPluginRegisterDatabaseBackend;
884
885 /**
886 * Register a custom database back-end (for legacy plugins).
887 *
888 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize().
889 * @param backend The callbacks of the custom database engine.
890 * @param payload Pointer containing private information for the database engine.
891 * @return The context of the database engine (it must not be manually freed).
892 * @ingroup Callbacks
893 * @deprecated
894 * @see OrthancPluginRegisterDatabaseBackendV2
895 **/
896 ORTHANC_PLUGIN_INLINE OrthancPluginDatabaseContext* OrthancPluginRegisterDatabaseBackend(
897 OrthancPluginContext* context,
898 const OrthancPluginDatabaseBackend* backend,
899 void* payload)
900 {
901 OrthancPluginDatabaseContext* result = NULL;
902 _OrthancPluginRegisterDatabaseBackend params;
903
904 if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
905 {
906 return NULL;
907 }
908
909 memset(&params, 0, sizeof(params));
910 params.backend = backend;
911 params.result = &result;
912 params.payload = payload;
913
914 if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackend, &params) ||
915 result == NULL)
916 {
917 /* Error */
918 return NULL;
919 }
920 else
921 {
922 return result;
923 }
924 }
925
926
927 typedef struct
928 {
929 OrthancPluginDatabaseContext** result;
930 const OrthancPluginDatabaseBackend* backend;
931 void* payload;
932 const OrthancPluginDatabaseExtensions* extensions;
933 uint32_t extensionsSize;
934 } _OrthancPluginRegisterDatabaseBackendV2;
935
936
937 /**
938 * Register a custom database back-end.
939 *
940 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize().
941 * @param backend The callbacks of the custom database engine.
942 * @param payload Pointer containing private information for the database engine.
943 * @param extensions Extensions to the base database SDK that was shipped until Orthanc 0.9.3.
944 * @return The context of the database engine (it must not be manually freed).
945 * @ingroup Callbacks
946 **/
947 ORTHANC_PLUGIN_INLINE OrthancPluginDatabaseContext* OrthancPluginRegisterDatabaseBackendV2(
948 OrthancPluginContext* context,
949 const OrthancPluginDatabaseBackend* backend,
950 const OrthancPluginDatabaseExtensions* extensions,
951 void* payload)
952 {
953 OrthancPluginDatabaseContext* result = NULL;
954 _OrthancPluginRegisterDatabaseBackendV2 params;
955
956 if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
957 {
958 return NULL;
959 }
960
961 memset(&params, 0, sizeof(params));
962 params.backend = backend;
963 params.result = &result;
964 params.payload = payload;
965 params.extensions = extensions;
966 params.extensionsSize = sizeof(OrthancPluginDatabaseExtensions);
967
968 if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackendV2, &params) ||
969 result == NULL)
970 {
971 /* Error */
972 return NULL;
973 }
974 else
975 {
976 return result;
977 }
978 }
979
980
981 #ifdef __cplusplus
982 }
983 #endif
984
985
986 /** @} */
987