comparison Framework/Plugins/OrthancCppDatabasePlugin.h @ 1:d17b2631bb67

starting StorageBackend
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 04 Jul 2018 18:05:24 +0200
parents 7cea966b6829
children 9e419261f1c9
comparison
equal deleted inserted replaced
0:7cea966b6829 1:d17b2631bb67
26 * order to uncouple its evolution from the Orthanc core. 26 * order to uncouple its evolution from the Orthanc core.
27 **/ 27 **/
28 28
29 #pragma once 29 #pragma once
30 30
31 #if HAS_ORTHANC_EXCEPTION != 1
32 # error HAS_ORTHANC_EXCEPTION must be set to 1
33 #endif
34
35
31 #include <orthanc/OrthancCDatabasePlugin.h> 36 #include <orthanc/OrthancCDatabasePlugin.h>
32 37 #include <Core/OrthancException.h>
33 #define ORTHANC_PLUGINS_DATABASE_CATCH_COMMON \ 38
34 catch (::std::runtime_error& e) \ 39
35 { \ 40 #define ORTHANC_PLUGINS_DATABASE_CATCH \
36 LogError(backend, e); \
37 return OrthancPluginErrorCode_DatabasePlugin; \
38 } \
39 catch (::OrthancPlugins::DatabaseException& e) \
40 { \
41 return e.GetErrorCode(); \
42 } \
43 catch (...) \
44 { \
45 backend->GetOutput().LogError("Native exception"); \
46 return OrthancPluginErrorCode_DatabasePlugin; \
47 }
48
49 #if HAS_ORTHANC_EXCEPTION == 1
50 # include <Core/OrthancException.h>
51 # define ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC \
52 catch (::Orthanc::OrthancException& e) \ 41 catch (::Orthanc::OrthancException& e) \
53 { \ 42 { \
54 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); \ 43 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); \
44 } \
45 catch (::std::runtime_error& e) \
46 { \
47 LogError(backend, e); \
48 return OrthancPluginErrorCode_DatabasePlugin; \
49 } \
50 catch (...) \
51 { \
52 backend->GetOutput().LogError("Native exception"); \
53 return OrthancPluginErrorCode_DatabasePlugin; \
55 } 54 }
56 #else
57 # define ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC
58 #endif
59 55
60 56
61 #include <stdexcept> 57 #include <stdexcept>
62 #include <list> 58 #include <list>
63 #include <string> 59 #include <string>
64 60
65 namespace OrthancPlugins 61 namespace OrthancPlugins
66 { 62 {
67 //! @cond Doxygen_Suppress
68 // This class mimics "boost::noncopyable"
69 class NonCopyable
70 {
71 private:
72 NonCopyable(const NonCopyable&);
73
74 NonCopyable& operator= (const NonCopyable&);
75
76 protected:
77 NonCopyable()
78 {
79 }
80
81 ~NonCopyable()
82 {
83 }
84 };
85 //! @endcond
86
87
88 /** 63 /**
89 * @ingroup Callbacks 64 * @ingroup Callbacks
90 **/ 65 **/
91 class DatabaseException 66 class DatabaseBackendOutput : public boost::noncopyable
92 {
93 private:
94 OrthancPluginErrorCode code_;
95
96 public:
97 DatabaseException() : code_(OrthancPluginErrorCode_DatabasePlugin)
98 {
99 }
100
101 DatabaseException(OrthancPluginErrorCode code) : code_(code)
102 {
103 }
104
105 OrthancPluginErrorCode GetErrorCode() const
106 {
107 return code_;
108 }
109 };
110
111
112 /**
113 * @ingroup Callbacks
114 **/
115 class DatabaseBackendOutput : public NonCopyable
116 { 67 {
117 friend class DatabaseBackendAdapter; 68 friend class DatabaseBackendAdapter;
118 69
119 private: 70 private:
120 enum AllowedAnswers 71 enum AllowedAnswers
296 247
297 248
298 /** 249 /**
299 * @ingroup Callbacks 250 * @ingroup Callbacks
300 **/ 251 **/
301 class IDatabaseBackend : public NonCopyable 252 class IDatabaseBackend : public boost::noncopyable
302 { 253 {
303 friend class DatabaseBackendAdapter; 254 friend class DatabaseBackendAdapter;
304 255
305 private: 256 private:
306 DatabaseBackendOutput* output_; 257 DatabaseBackendOutput* output_;
534 try 485 try
535 { 486 {
536 backend->AddAttachment(id, *attachment); 487 backend->AddAttachment(id, *attachment);
537 return OrthancPluginErrorCode_Success; 488 return OrthancPluginErrorCode_Success;
538 } 489 }
539 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 490 ORTHANC_PLUGINS_DATABASE_CATCH
540 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
541 } 491 }
542 492
543 493
544 static OrthancPluginErrorCode AttachChild(void* payload, 494 static OrthancPluginErrorCode AttachChild(void* payload,
545 int64_t parent, 495 int64_t parent,
551 try 501 try
552 { 502 {
553 backend->AttachChild(parent, child); 503 backend->AttachChild(parent, child);
554 return OrthancPluginErrorCode_Success; 504 return OrthancPluginErrorCode_Success;
555 } 505 }
556 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 506 ORTHANC_PLUGINS_DATABASE_CATCH
557 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
558 } 507 }
559 508
560 509
561 static OrthancPluginErrorCode ClearChanges(void* payload) 510 static OrthancPluginErrorCode ClearChanges(void* payload)
562 { 511 {
566 try 515 try
567 { 516 {
568 backend->ClearChanges(); 517 backend->ClearChanges();
569 return OrthancPluginErrorCode_Success; 518 return OrthancPluginErrorCode_Success;
570 } 519 }
571 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 520 ORTHANC_PLUGINS_DATABASE_CATCH
572 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
573 } 521 }
574 522
575 523
576 static OrthancPluginErrorCode ClearExportedResources(void* payload) 524 static OrthancPluginErrorCode ClearExportedResources(void* payload)
577 { 525 {
581 try 529 try
582 { 530 {
583 backend->ClearExportedResources(); 531 backend->ClearExportedResources();
584 return OrthancPluginErrorCode_Success; 532 return OrthancPluginErrorCode_Success;
585 } 533 }
586 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 534 ORTHANC_PLUGINS_DATABASE_CATCH
587 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
588 } 535 }
589 536
590 537
591 static OrthancPluginErrorCode CreateResource(int64_t* id, 538 static OrthancPluginErrorCode CreateResource(int64_t* id,
592 void* payload, 539 void* payload,
599 try 546 try
600 { 547 {
601 *id = backend->CreateResource(publicId, resourceType); 548 *id = backend->CreateResource(publicId, resourceType);
602 return OrthancPluginErrorCode_Success; 549 return OrthancPluginErrorCode_Success;
603 } 550 }
604 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 551 ORTHANC_PLUGINS_DATABASE_CATCH
605 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
606 } 552 }
607 553
608 554
609 static OrthancPluginErrorCode DeleteAttachment(void* payload, 555 static OrthancPluginErrorCode DeleteAttachment(void* payload,
610 int64_t id, 556 int64_t id,
616 try 562 try
617 { 563 {
618 backend->DeleteAttachment(id, contentType); 564 backend->DeleteAttachment(id, contentType);
619 return OrthancPluginErrorCode_Success; 565 return OrthancPluginErrorCode_Success;
620 } 566 }
621 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 567 ORTHANC_PLUGINS_DATABASE_CATCH
622 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
623 } 568 }
624 569
625 570
626 static OrthancPluginErrorCode DeleteMetadata(void* payload, 571 static OrthancPluginErrorCode DeleteMetadata(void* payload,
627 int64_t id, 572 int64_t id,
633 try 578 try
634 { 579 {
635 backend->DeleteMetadata(id, metadataType); 580 backend->DeleteMetadata(id, metadataType);
636 return OrthancPluginErrorCode_Success; 581 return OrthancPluginErrorCode_Success;
637 } 582 }
638 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 583 ORTHANC_PLUGINS_DATABASE_CATCH
639 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
640 } 584 }
641 585
642 586
643 static OrthancPluginErrorCode DeleteResource(void* payload, 587 static OrthancPluginErrorCode DeleteResource(void* payload,
644 int64_t id) 588 int64_t id)
649 try 593 try
650 { 594 {
651 backend->DeleteResource(id); 595 backend->DeleteResource(id);
652 return OrthancPluginErrorCode_Success; 596 return OrthancPluginErrorCode_Success;
653 } 597 }
654 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 598 ORTHANC_PLUGINS_DATABASE_CATCH
655 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
656 } 599 }
657 600
658 601
659 static OrthancPluginErrorCode GetAllInternalIds(OrthancPluginDatabaseContext* context, 602 static OrthancPluginErrorCode GetAllInternalIds(OrthancPluginDatabaseContext* context,
660 void* payload, 603 void* payload,
675 backend->GetOutput().database_, *it); 618 backend->GetOutput().database_, *it);
676 } 619 }
677 620
678 return OrthancPluginErrorCode_Success; 621 return OrthancPluginErrorCode_Success;
679 } 622 }
680 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 623 ORTHANC_PLUGINS_DATABASE_CATCH
681 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
682 } 624 }
683 625
684 626
685 static OrthancPluginErrorCode GetAllPublicIds(OrthancPluginDatabaseContext* context, 627 static OrthancPluginErrorCode GetAllPublicIds(OrthancPluginDatabaseContext* context,
686 void* payload, 628 void* payload,
702 it->c_str()); 644 it->c_str());
703 } 645 }
704 646
705 return OrthancPluginErrorCode_Success; 647 return OrthancPluginErrorCode_Success;
706 } 648 }
707 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 649 ORTHANC_PLUGINS_DATABASE_CATCH
708 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
709 } 650 }
710 651
711 652
712 static OrthancPluginErrorCode GetAllPublicIdsWithLimit(OrthancPluginDatabaseContext* context, 653 static OrthancPluginErrorCode GetAllPublicIdsWithLimit(OrthancPluginDatabaseContext* context,
713 void* payload, 654 void* payload,
731 it->c_str()); 672 it->c_str());
732 } 673 }
733 674
734 return OrthancPluginErrorCode_Success; 675 return OrthancPluginErrorCode_Success;
735 } 676 }
736 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 677 ORTHANC_PLUGINS_DATABASE_CATCH
737 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
738 } 678 }
739 679
740 680
741 static OrthancPluginErrorCode GetChanges(OrthancPluginDatabaseContext* context, 681 static OrthancPluginErrorCode GetChanges(OrthancPluginDatabaseContext* context,
742 void* payload, 682 void* payload,
757 backend->GetOutput().database_); 697 backend->GetOutput().database_);
758 } 698 }
759 699
760 return OrthancPluginErrorCode_Success; 700 return OrthancPluginErrorCode_Success;
761 } 701 }
762 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 702 ORTHANC_PLUGINS_DATABASE_CATCH
763 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
764 } 703 }
765 704
766 705
767 static OrthancPluginErrorCode GetChildrenInternalId(OrthancPluginDatabaseContext* context, 706 static OrthancPluginErrorCode GetChildrenInternalId(OrthancPluginDatabaseContext* context,
768 void* payload, 707 void* payload,
783 backend->GetOutput().database_, *it); 722 backend->GetOutput().database_, *it);
784 } 723 }
785 724
786 return OrthancPluginErrorCode_Success; 725 return OrthancPluginErrorCode_Success;
787 } 726 }
788 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 727 ORTHANC_PLUGINS_DATABASE_CATCH
789 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
790 } 728 }
791 729
792 730
793 static OrthancPluginErrorCode GetChildrenPublicId(OrthancPluginDatabaseContext* context, 731 static OrthancPluginErrorCode GetChildrenPublicId(OrthancPluginDatabaseContext* context,
794 void* payload, 732 void* payload,
810 it->c_str()); 748 it->c_str());
811 } 749 }
812 750
813 return OrthancPluginErrorCode_Success; 751 return OrthancPluginErrorCode_Success;
814 } 752 }
815 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 753 ORTHANC_PLUGINS_DATABASE_CATCH
816 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
817 } 754 }
818 755
819 756
820 static OrthancPluginErrorCode GetExportedResources(OrthancPluginDatabaseContext* context, 757 static OrthancPluginErrorCode GetExportedResources(OrthancPluginDatabaseContext* context,
821 void* payload, 758 void* payload,
835 OrthancPluginDatabaseAnswerExportedResourcesDone(backend->GetOutput().context_, 772 OrthancPluginDatabaseAnswerExportedResourcesDone(backend->GetOutput().context_,
836 backend->GetOutput().database_); 773 backend->GetOutput().database_);
837 } 774 }
838 return OrthancPluginErrorCode_Success; 775 return OrthancPluginErrorCode_Success;
839 } 776 }
840 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 777 ORTHANC_PLUGINS_DATABASE_CATCH
841 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
842 } 778 }
843 779
844 780
845 static OrthancPluginErrorCode GetLastChange(OrthancPluginDatabaseContext* context, 781 static OrthancPluginErrorCode GetLastChange(OrthancPluginDatabaseContext* context,
846 void* payload) 782 void* payload)
851 try 787 try
852 { 788 {
853 backend->GetLastChange(); 789 backend->GetLastChange();
854 return OrthancPluginErrorCode_Success; 790 return OrthancPluginErrorCode_Success;
855 } 791 }
856 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 792 ORTHANC_PLUGINS_DATABASE_CATCH
857 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
858 } 793 }
859 794
860 795
861 static OrthancPluginErrorCode GetLastExportedResource(OrthancPluginDatabaseContext* context, 796 static OrthancPluginErrorCode GetLastExportedResource(OrthancPluginDatabaseContext* context,
862 void* payload) 797 void* payload)
867 try 802 try
868 { 803 {
869 backend->GetLastExportedResource(); 804 backend->GetLastExportedResource();
870 return OrthancPluginErrorCode_Success; 805 return OrthancPluginErrorCode_Success;
871 } 806 }
872 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 807 ORTHANC_PLUGINS_DATABASE_CATCH
873 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
874 } 808 }
875 809
876 810
877 static OrthancPluginErrorCode GetMainDicomTags(OrthancPluginDatabaseContext* context, 811 static OrthancPluginErrorCode GetMainDicomTags(OrthancPluginDatabaseContext* context,
878 void* payload, 812 void* payload,
884 try 818 try
885 { 819 {
886 backend->GetMainDicomTags(id); 820 backend->GetMainDicomTags(id);
887 return OrthancPluginErrorCode_Success; 821 return OrthancPluginErrorCode_Success;
888 } 822 }
889 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 823 ORTHANC_PLUGINS_DATABASE_CATCH
890 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
891 } 824 }
892 825
893 826
894 static OrthancPluginErrorCode GetPublicId(OrthancPluginDatabaseContext* context, 827 static OrthancPluginErrorCode GetPublicId(OrthancPluginDatabaseContext* context,
895 void* payload, 828 void* payload,
905 backend->GetOutput().database_, 838 backend->GetOutput().database_,
906 s.c_str()); 839 s.c_str());
907 840
908 return OrthancPluginErrorCode_Success; 841 return OrthancPluginErrorCode_Success;
909 } 842 }
910 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 843 ORTHANC_PLUGINS_DATABASE_CATCH
911 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
912 } 844 }
913 845
914 846
915 static OrthancPluginErrorCode GetResourceCount(uint64_t* target, 847 static OrthancPluginErrorCode GetResourceCount(uint64_t* target,
916 void* payload, 848 void* payload,
922 try 854 try
923 { 855 {
924 *target = backend->GetResourceCount(resourceType); 856 *target = backend->GetResourceCount(resourceType);
925 return OrthancPluginErrorCode_Success; 857 return OrthancPluginErrorCode_Success;
926 } 858 }
927 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 859 ORTHANC_PLUGINS_DATABASE_CATCH
928 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
929 } 860 }
930 861
931 862
932 static OrthancPluginErrorCode GetResourceType(OrthancPluginResourceType* resourceType, 863 static OrthancPluginErrorCode GetResourceType(OrthancPluginResourceType* resourceType,
933 void* payload, 864 void* payload,
939 try 870 try
940 { 871 {
941 *resourceType = backend->GetResourceType(id); 872 *resourceType = backend->GetResourceType(id);
942 return OrthancPluginErrorCode_Success; 873 return OrthancPluginErrorCode_Success;
943 } 874 }
944 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 875 ORTHANC_PLUGINS_DATABASE_CATCH
945 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
946 } 876 }
947 877
948 878
949 static OrthancPluginErrorCode GetTotalCompressedSize(uint64_t* target, 879 static OrthancPluginErrorCode GetTotalCompressedSize(uint64_t* target,
950 void* payload) 880 void* payload)
955 try 885 try
956 { 886 {
957 *target = backend->GetTotalCompressedSize(); 887 *target = backend->GetTotalCompressedSize();
958 return OrthancPluginErrorCode_Success; 888 return OrthancPluginErrorCode_Success;
959 } 889 }
960 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 890 ORTHANC_PLUGINS_DATABASE_CATCH
961 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
962 } 891 }
963 892
964 893
965 static OrthancPluginErrorCode GetTotalUncompressedSize(uint64_t* target, 894 static OrthancPluginErrorCode GetTotalUncompressedSize(uint64_t* target,
966 void* payload) 895 void* payload)
971 try 900 try
972 { 901 {
973 *target = backend->GetTotalUncompressedSize(); 902 *target = backend->GetTotalUncompressedSize();
974 return OrthancPluginErrorCode_Success; 903 return OrthancPluginErrorCode_Success;
975 } 904 }
976 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 905 ORTHANC_PLUGINS_DATABASE_CATCH
977 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
978 } 906 }
979 907
980 908
981 static OrthancPluginErrorCode IsExistingResource(int32_t* existing, 909 static OrthancPluginErrorCode IsExistingResource(int32_t* existing,
982 void* payload, 910 void* payload,
988 try 916 try
989 { 917 {
990 *existing = backend->IsExistingResource(id); 918 *existing = backend->IsExistingResource(id);
991 return OrthancPluginErrorCode_Success; 919 return OrthancPluginErrorCode_Success;
992 } 920 }
993 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 921 ORTHANC_PLUGINS_DATABASE_CATCH
994 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
995 } 922 }
996 923
997 924
998 static OrthancPluginErrorCode IsProtectedPatient(int32_t* isProtected, 925 static OrthancPluginErrorCode IsProtectedPatient(int32_t* isProtected,
999 void* payload, 926 void* payload,
1005 try 932 try
1006 { 933 {
1007 *isProtected = backend->IsProtectedPatient(id); 934 *isProtected = backend->IsProtectedPatient(id);
1008 return OrthancPluginErrorCode_Success; 935 return OrthancPluginErrorCode_Success;
1009 } 936 }
1010 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 937 ORTHANC_PLUGINS_DATABASE_CATCH
1011 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1012 } 938 }
1013 939
1014 940
1015 static OrthancPluginErrorCode ListAvailableMetadata(OrthancPluginDatabaseContext* context, 941 static OrthancPluginErrorCode ListAvailableMetadata(OrthancPluginDatabaseContext* context,
1016 void* payload, 942 void* payload,
1032 *it); 958 *it);
1033 } 959 }
1034 960
1035 return OrthancPluginErrorCode_Success; 961 return OrthancPluginErrorCode_Success;
1036 } 962 }
1037 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 963 ORTHANC_PLUGINS_DATABASE_CATCH
1038 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1039 } 964 }
1040 965
1041 966
1042 static OrthancPluginErrorCode ListAvailableAttachments(OrthancPluginDatabaseContext* context, 967 static OrthancPluginErrorCode ListAvailableAttachments(OrthancPluginDatabaseContext* context,
1043 void* payload, 968 void* payload,
1059 *it); 984 *it);
1060 } 985 }
1061 986
1062 return OrthancPluginErrorCode_Success; 987 return OrthancPluginErrorCode_Success;
1063 } 988 }
1064 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 989 ORTHANC_PLUGINS_DATABASE_CATCH
1065 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1066 } 990 }
1067 991
1068 992
1069 static OrthancPluginErrorCode LogChange(void* payload, 993 static OrthancPluginErrorCode LogChange(void* payload,
1070 const OrthancPluginChange* change) 994 const OrthancPluginChange* change)
1075 try 999 try
1076 { 1000 {
1077 backend->LogChange(*change); 1001 backend->LogChange(*change);
1078 return OrthancPluginErrorCode_Success; 1002 return OrthancPluginErrorCode_Success;
1079 } 1003 }
1080 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1004 ORTHANC_PLUGINS_DATABASE_CATCH
1081 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1082 } 1005 }
1083 1006
1084 1007
1085 static OrthancPluginErrorCode LogExportedResource(void* payload, 1008 static OrthancPluginErrorCode LogExportedResource(void* payload,
1086 const OrthancPluginExportedResource* exported) 1009 const OrthancPluginExportedResource* exported)
1091 try 1014 try
1092 { 1015 {
1093 backend->LogExportedResource(*exported); 1016 backend->LogExportedResource(*exported);
1094 return OrthancPluginErrorCode_Success; 1017 return OrthancPluginErrorCode_Success;
1095 } 1018 }
1096 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1019 ORTHANC_PLUGINS_DATABASE_CATCH
1097 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1098 } 1020 }
1099 1021
1100 1022
1101 static OrthancPluginErrorCode LookupAttachment(OrthancPluginDatabaseContext* context, 1023 static OrthancPluginErrorCode LookupAttachment(OrthancPluginDatabaseContext* context,
1102 void* payload, 1024 void* payload,
1109 try 1031 try
1110 { 1032 {
1111 backend->LookupAttachment(id, contentType); 1033 backend->LookupAttachment(id, contentType);
1112 return OrthancPluginErrorCode_Success; 1034 return OrthancPluginErrorCode_Success;
1113 } 1035 }
1114 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1036 ORTHANC_PLUGINS_DATABASE_CATCH
1115 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1116 } 1037 }
1117 1038
1118 1039
1119 static OrthancPluginErrorCode LookupGlobalProperty(OrthancPluginDatabaseContext* context, 1040 static OrthancPluginErrorCode LookupGlobalProperty(OrthancPluginDatabaseContext* context,
1120 void* payload, 1041 void* payload,
1133 s.c_str()); 1054 s.c_str());
1134 } 1055 }
1135 1056
1136 return OrthancPluginErrorCode_Success; 1057 return OrthancPluginErrorCode_Success;
1137 } 1058 }
1138 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1059 ORTHANC_PLUGINS_DATABASE_CATCH
1139 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1140 } 1060 }
1141 1061
1142 1062
1143 static OrthancPluginErrorCode LookupIdentifier3(OrthancPluginDatabaseContext* context, 1063 static OrthancPluginErrorCode LookupIdentifier3(OrthancPluginDatabaseContext* context,
1144 void* payload, 1064 void* payload,
1161 backend->GetOutput().database_, *it); 1081 backend->GetOutput().database_, *it);
1162 } 1082 }
1163 1083
1164 return OrthancPluginErrorCode_Success; 1084 return OrthancPluginErrorCode_Success;
1165 } 1085 }
1166 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1086 ORTHANC_PLUGINS_DATABASE_CATCH
1167 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1168 } 1087 }
1169 1088
1170 1089
1171 static OrthancPluginErrorCode LookupIdentifierRange(OrthancPluginDatabaseContext* context, 1090 static OrthancPluginErrorCode LookupIdentifierRange(OrthancPluginDatabaseContext* context,
1172 void* payload, 1091 void* payload,
1191 backend->GetOutput().database_, *it); 1110 backend->GetOutput().database_, *it);
1192 } 1111 }
1193 1112
1194 return OrthancPluginErrorCode_Success; 1113 return OrthancPluginErrorCode_Success;
1195 } 1114 }
1196 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1115 ORTHANC_PLUGINS_DATABASE_CATCH
1197 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1198 } 1116 }
1199 1117
1200 1118
1201 static OrthancPluginErrorCode LookupMetadata(OrthancPluginDatabaseContext* context, 1119 static OrthancPluginErrorCode LookupMetadata(OrthancPluginDatabaseContext* context,
1202 void* payload, 1120 void* payload,
1215 backend->GetOutput().database_, s.c_str()); 1133 backend->GetOutput().database_, s.c_str());
1216 } 1134 }
1217 1135
1218 return OrthancPluginErrorCode_Success; 1136 return OrthancPluginErrorCode_Success;
1219 } 1137 }
1220 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1138 ORTHANC_PLUGINS_DATABASE_CATCH
1221 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1222 } 1139 }
1223 1140
1224 1141
1225 static OrthancPluginErrorCode LookupParent(OrthancPluginDatabaseContext* context, 1142 static OrthancPluginErrorCode LookupParent(OrthancPluginDatabaseContext* context,
1226 void* payload, 1143 void* payload,
1238 backend->GetOutput().database_, parent); 1155 backend->GetOutput().database_, parent);
1239 } 1156 }
1240 1157
1241 return OrthancPluginErrorCode_Success; 1158 return OrthancPluginErrorCode_Success;
1242 } 1159 }
1243 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1160 ORTHANC_PLUGINS_DATABASE_CATCH
1244 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1245 } 1161 }
1246 1162
1247 1163
1248 static OrthancPluginErrorCode LookupResource(OrthancPluginDatabaseContext* context, 1164 static OrthancPluginErrorCode LookupResource(OrthancPluginDatabaseContext* context,
1249 void* payload, 1165 void* payload,
1263 id, type); 1179 id, type);
1264 } 1180 }
1265 1181
1266 return OrthancPluginErrorCode_Success; 1182 return OrthancPluginErrorCode_Success;
1267 } 1183 }
1268 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1184 ORTHANC_PLUGINS_DATABASE_CATCH
1269 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1270 } 1185 }
1271 1186
1272 1187
1273 static OrthancPluginErrorCode SelectPatientToRecycle(OrthancPluginDatabaseContext* context, 1188 static OrthancPluginErrorCode SelectPatientToRecycle(OrthancPluginDatabaseContext* context,
1274 void* payload) 1189 void* payload)
1285 backend->GetOutput().database_, id); 1200 backend->GetOutput().database_, id);
1286 } 1201 }
1287 1202
1288 return OrthancPluginErrorCode_Success; 1203 return OrthancPluginErrorCode_Success;
1289 } 1204 }
1290 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1205 ORTHANC_PLUGINS_DATABASE_CATCH
1291 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1292 } 1206 }
1293 1207
1294 1208
1295 static OrthancPluginErrorCode SelectPatientToRecycle2(OrthancPluginDatabaseContext* context, 1209 static OrthancPluginErrorCode SelectPatientToRecycle2(OrthancPluginDatabaseContext* context,
1296 void* payload, 1210 void* payload,
1308 backend->GetOutput().database_, id); 1222 backend->GetOutput().database_, id);
1309 } 1223 }
1310 1224
1311 return OrthancPluginErrorCode_Success; 1225 return OrthancPluginErrorCode_Success;
1312 } 1226 }
1313 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1227 ORTHANC_PLUGINS_DATABASE_CATCH
1314 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1315 } 1228 }
1316 1229
1317 1230
1318 static OrthancPluginErrorCode SetGlobalProperty(void* payload, 1231 static OrthancPluginErrorCode SetGlobalProperty(void* payload,
1319 int32_t property, 1232 int32_t property,
1325 try 1238 try
1326 { 1239 {
1327 backend->SetGlobalProperty(property, value); 1240 backend->SetGlobalProperty(property, value);
1328 return OrthancPluginErrorCode_Success; 1241 return OrthancPluginErrorCode_Success;
1329 } 1242 }
1330 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1243 ORTHANC_PLUGINS_DATABASE_CATCH
1331 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1332 } 1244 }
1333 1245
1334 1246
1335 static OrthancPluginErrorCode SetMainDicomTag(void* payload, 1247 static OrthancPluginErrorCode SetMainDicomTag(void* payload,
1336 int64_t id, 1248 int64_t id,
1342 try 1254 try
1343 { 1255 {
1344 backend->SetMainDicomTag(id, tag->group, tag->element, tag->value); 1256 backend->SetMainDicomTag(id, tag->group, tag->element, tag->value);
1345 return OrthancPluginErrorCode_Success; 1257 return OrthancPluginErrorCode_Success;
1346 } 1258 }
1347 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1259 ORTHANC_PLUGINS_DATABASE_CATCH
1348 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1349 } 1260 }
1350 1261
1351 1262
1352 static OrthancPluginErrorCode SetIdentifierTag(void* payload, 1263 static OrthancPluginErrorCode SetIdentifierTag(void* payload,
1353 int64_t id, 1264 int64_t id,
1359 try 1270 try
1360 { 1271 {
1361 backend->SetIdentifierTag(id, tag->group, tag->element, tag->value); 1272 backend->SetIdentifierTag(id, tag->group, tag->element, tag->value);
1362 return OrthancPluginErrorCode_Success; 1273 return OrthancPluginErrorCode_Success;
1363 } 1274 }
1364 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1275 ORTHANC_PLUGINS_DATABASE_CATCH
1365 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1366 } 1276 }
1367 1277
1368 1278
1369 static OrthancPluginErrorCode SetMetadata(void* payload, 1279 static OrthancPluginErrorCode SetMetadata(void* payload,
1370 int64_t id, 1280 int64_t id,
1377 try 1287 try
1378 { 1288 {
1379 backend->SetMetadata(id, metadata, value); 1289 backend->SetMetadata(id, metadata, value);
1380 return OrthancPluginErrorCode_Success; 1290 return OrthancPluginErrorCode_Success;
1381 } 1291 }
1382 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1292 ORTHANC_PLUGINS_DATABASE_CATCH
1383 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1384 } 1293 }
1385 1294
1386 1295
1387 static OrthancPluginErrorCode SetProtectedPatient(void* payload, 1296 static OrthancPluginErrorCode SetProtectedPatient(void* payload,
1388 int64_t id, 1297 int64_t id,
1394 try 1303 try
1395 { 1304 {
1396 backend->SetProtectedPatient(id, (isProtected != 0)); 1305 backend->SetProtectedPatient(id, (isProtected != 0));
1397 return OrthancPluginErrorCode_Success; 1306 return OrthancPluginErrorCode_Success;
1398 } 1307 }
1399 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1308 ORTHANC_PLUGINS_DATABASE_CATCH
1400 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1401 } 1309 }
1402 1310
1403 1311
1404 static OrthancPluginErrorCode StartTransaction(void* payload) 1312 static OrthancPluginErrorCode StartTransaction(void* payload)
1405 { 1313 {
1409 try 1317 try
1410 { 1318 {
1411 backend->StartTransaction(); 1319 backend->StartTransaction();
1412 return OrthancPluginErrorCode_Success; 1320 return OrthancPluginErrorCode_Success;
1413 } 1321 }
1414 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1322 ORTHANC_PLUGINS_DATABASE_CATCH
1415 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1416 } 1323 }
1417 1324
1418 1325
1419 static OrthancPluginErrorCode RollbackTransaction(void* payload) 1326 static OrthancPluginErrorCode RollbackTransaction(void* payload)
1420 { 1327 {
1424 try 1331 try
1425 { 1332 {
1426 backend->RollbackTransaction(); 1333 backend->RollbackTransaction();
1427 return OrthancPluginErrorCode_Success; 1334 return OrthancPluginErrorCode_Success;
1428 } 1335 }
1429 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1336 ORTHANC_PLUGINS_DATABASE_CATCH
1430 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1431 } 1337 }
1432 1338
1433 1339
1434 static OrthancPluginErrorCode CommitTransaction(void* payload) 1340 static OrthancPluginErrorCode CommitTransaction(void* payload)
1435 { 1341 {
1439 try 1345 try
1440 { 1346 {
1441 backend->CommitTransaction(); 1347 backend->CommitTransaction();
1442 return OrthancPluginErrorCode_Success; 1348 return OrthancPluginErrorCode_Success;
1443 } 1349 }
1444 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1350 ORTHANC_PLUGINS_DATABASE_CATCH
1445 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1446 } 1351 }
1447 1352
1448 1353
1449 static OrthancPluginErrorCode Open(void* payload) 1354 static OrthancPluginErrorCode Open(void* payload)
1450 { 1355 {
1454 try 1359 try
1455 { 1360 {
1456 backend->Open(); 1361 backend->Open();
1457 return OrthancPluginErrorCode_Success; 1362 return OrthancPluginErrorCode_Success;
1458 } 1363 }
1459 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1364 ORTHANC_PLUGINS_DATABASE_CATCH
1460 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1461 } 1365 }
1462 1366
1463 1367
1464 static OrthancPluginErrorCode Close(void* payload) 1368 static OrthancPluginErrorCode Close(void* payload)
1465 { 1369 {
1469 try 1373 try
1470 { 1374 {
1471 backend->Close(); 1375 backend->Close();
1472 return OrthancPluginErrorCode_Success; 1376 return OrthancPluginErrorCode_Success;
1473 } 1377 }
1474 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1378 ORTHANC_PLUGINS_DATABASE_CATCH
1475 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1476 } 1379 }
1477 1380
1478 1381
1479 static OrthancPluginErrorCode GetDatabaseVersion(uint32_t* version, 1382 static OrthancPluginErrorCode GetDatabaseVersion(uint32_t* version,
1480 void* payload) 1383 void* payload)
1484 try 1387 try
1485 { 1388 {
1486 *version = backend->GetDatabaseVersion(); 1389 *version = backend->GetDatabaseVersion();
1487 return OrthancPluginErrorCode_Success; 1390 return OrthancPluginErrorCode_Success;
1488 } 1391 }
1489 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1392 ORTHANC_PLUGINS_DATABASE_CATCH
1490 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1491 } 1393 }
1492 1394
1493 1395
1494 static OrthancPluginErrorCode UpgradeDatabase(void* payload, 1396 static OrthancPluginErrorCode UpgradeDatabase(void* payload,
1495 uint32_t targetVersion, 1397 uint32_t targetVersion,
1500 try 1402 try
1501 { 1403 {
1502 backend->UpgradeDatabase(targetVersion, storageArea); 1404 backend->UpgradeDatabase(targetVersion, storageArea);
1503 return OrthancPluginErrorCode_Success; 1405 return OrthancPluginErrorCode_Success;
1504 } 1406 }
1505 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1407 ORTHANC_PLUGINS_DATABASE_CATCH
1506 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1507 } 1408 }
1508 1409
1509 1410
1510 static OrthancPluginErrorCode ClearMainDicomTags(void* payload, 1411 static OrthancPluginErrorCode ClearMainDicomTags(void* payload,
1511 int64_t internalId) 1412 int64_t internalId)
1515 try 1416 try
1516 { 1417 {
1517 backend->ClearMainDicomTags(internalId); 1418 backend->ClearMainDicomTags(internalId);
1518 return OrthancPluginErrorCode_Success; 1419 return OrthancPluginErrorCode_Success;
1519 } 1420 }
1520 ORTHANC_PLUGINS_DATABASE_CATCH_ORTHANC 1421 ORTHANC_PLUGINS_DATABASE_CATCH
1521 ORTHANC_PLUGINS_DATABASE_CATCH_COMMON
1522 } 1422 }
1523 1423
1524 1424
1525 public: 1425 public:
1526 /** 1426 /**
1606 { 1506 {
1607 OrthancPluginLogWarning(context, "Performance warning: The database plugin was compiled " 1507 OrthancPluginLogWarning(context, "Performance warning: The database plugin was compiled "
1608 "against an old version of the Orthanc SDK, consider upgrading"); 1508 "against an old version of the Orthanc SDK, consider upgrading");
1609 } 1509 }
1610 1510
1611 OrthancPluginDatabaseContext* database = OrthancPluginRegisterDatabaseBackendV2(context, &params, &extensions, &backend); 1511 OrthancPluginDatabaseContext* database =
1512 OrthancPluginRegisterDatabaseBackendV2(context, &params, &extensions, &backend);
1612 if (!context) 1513 if (!context)
1613 { 1514 {
1614 throw std::runtime_error("Unable to register the database backend"); 1515 throw std::runtime_error("Unable to register the database backend");
1615 } 1516 }
1616 1517