comparison Resources/Orthanc/Sdk-1.5.2/orthanc/OrthancCDatabasePlugin.h @ 94:badc89b06477 db-changes

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