Mercurial > hg > orthanc-databases
annotate Framework/Plugins/DatabaseBackendAdapterV4.cpp @ 577:991b9b285e1a attach-custom-data tip
fix custom-data handling
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Wed, 02 Oct 2024 09:40:20 +0200 |
parents | f18e46d7dbf8 |
children |
rev | line source |
---|---|
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Orthanc - A Lightweight, RESTful DICOM Store |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
507
54d518dcd74a
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
461
diff
changeset
|
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
54d518dcd74a
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
461
diff
changeset
|
6 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium |
459
ecd0b719cff5
update year to 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
403
diff
changeset
|
7 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * This program is free software: you can redistribute it and/or |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * modify it under the terms of the GNU Affero General Public License |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * as published by the Free Software Foundation, either version 3 of |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * the License, or (at your option) any later version. |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * This program is distributed in the hope that it will be useful, but |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * WITHOUT ANY WARRANTY; without even the implied warranty of |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * Affero General Public License for more details. |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 * You should have received a copy of the GNU Affero General Public License |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 **/ |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 #include "DatabaseBackendAdapterV4.h" |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 0) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
29 #include "IndexConnectionsPool.h" |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
30 #include "MessagesToolbox.h" |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
31 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 #include <OrthancDatabasePlugin.pb.h> // Include protobuf messages |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 #include <Logging.h> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 #include <OrthancException.h> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 #include <stdexcept> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 #include <list> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 #include <string> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 #include <cassert> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
41 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
43 #define ORTHANC_PLUGINS_DATABASE_CATCH(context) \ |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 namespace OrthancDatabases |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 static bool isBackendInUse_ = false; // Only for sanity checks |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
50 |
376 | 51 static Orthanc::DatabasePluginMessages::ResourceType Convert(OrthancPluginResourceType resourceType) |
52 { | |
53 switch (resourceType) | |
54 { | |
55 case OrthancPluginResourceType_Patient: | |
56 return Orthanc::DatabasePluginMessages::RESOURCE_PATIENT; | |
57 | |
58 case OrthancPluginResourceType_Study: | |
59 return Orthanc::DatabasePluginMessages::RESOURCE_STUDY; | |
60 | |
61 case OrthancPluginResourceType_Series: | |
62 return Orthanc::DatabasePluginMessages::RESOURCE_SERIES; | |
63 | |
64 case OrthancPluginResourceType_Instance: | |
65 return Orthanc::DatabasePluginMessages::RESOURCE_INSTANCE; | |
66 | |
67 default: | |
68 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
69 } | |
70 } | |
71 | |
72 | |
73 static OrthancPluginResourceType Convert(Orthanc::DatabasePluginMessages::ResourceType resourceType) | |
74 { | |
75 switch (resourceType) | |
76 { | |
77 case Orthanc::DatabasePluginMessages::RESOURCE_PATIENT: | |
78 return OrthancPluginResourceType_Patient; | |
79 | |
80 case Orthanc::DatabasePluginMessages::RESOURCE_STUDY: | |
81 return OrthancPluginResourceType_Study; | |
82 | |
83 case Orthanc::DatabasePluginMessages::RESOURCE_SERIES: | |
84 return OrthancPluginResourceType_Series; | |
85 | |
86 case Orthanc::DatabasePluginMessages::RESOURCE_INSTANCE: | |
87 return OrthancPluginResourceType_Instance; | |
88 | |
89 default: | |
90 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
91 } | |
92 } | |
93 | |
94 | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
95 class Output : public IDatabaseBackendOutput |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
96 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
97 private: |
377 | 98 Orthanc::DatabasePluginMessages::DeleteAttachment::Response* deleteAttachment_; |
99 Orthanc::DatabasePluginMessages::DeleteResource::Response* deleteResource_; | |
100 Orthanc::DatabasePluginMessages::GetChanges::Response* getChanges_; | |
101 Orthanc::DatabasePluginMessages::GetExportedResources::Response* getExportedResources_; | |
102 Orthanc::DatabasePluginMessages::GetLastChange::Response* getLastChange_; | |
103 Orthanc::DatabasePluginMessages::GetLastExportedResource::Response* getLastExportedResource_; | |
104 Orthanc::DatabasePluginMessages::GetMainDicomTags::Response* getMainDicomTags_; | |
379 | 105 Orthanc::DatabasePluginMessages::LookupAttachment::Response* lookupAttachment_; |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
106 Orthanc::DatabasePluginMessages::LookupResources::Response* lookupResources_; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
107 |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
108 #if ORTHANC_PLUGINS_HAS_CHANGES_EXTENDED == 1 |
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
109 Orthanc::DatabasePluginMessages::GetChangesExtended::Response* getChangesExtended_; |
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
110 #endif |
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
111 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
112 void Clear() |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
113 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
114 deleteAttachment_ = NULL; |
376 | 115 deleteResource_ = NULL; |
116 getChanges_ = NULL; | |
117 getExportedResources_ = NULL; | |
118 getLastChange_ = NULL; | |
377 | 119 getLastExportedResource_ = NULL; |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
120 getMainDicomTags_ = NULL; |
379 | 121 lookupAttachment_ = NULL; |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
122 lookupResources_ = NULL; |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
123 |
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
124 #if ORTHANC_PLUGINS_HAS_CHANGES_EXTENDED == 1 |
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
125 getChangesExtended_ = NULL; |
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
126 #endif |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
127 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
128 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
129 public: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
130 Output(Orthanc::DatabasePluginMessages::DeleteAttachment::Response& deleteAttachment) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
131 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
132 Clear(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
133 deleteAttachment_ = &deleteAttachment; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
134 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
135 |
376 | 136 Output(Orthanc::DatabasePluginMessages::DeleteResource::Response& deleteResource) |
137 { | |
138 Clear(); | |
139 deleteResource_ = &deleteResource; | |
140 } | |
141 | |
142 Output(Orthanc::DatabasePluginMessages::GetChanges::Response& getChanges) | |
143 { | |
144 Clear(); | |
145 getChanges_ = &getChanges; | |
146 } | |
536
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
147 |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
148 #if ORTHANC_PLUGINS_HAS_CHANGES_EXTENDED == 1 |
536
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
149 Output(Orthanc::DatabasePluginMessages::GetChangesExtended::Response& getChangesExtended) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
150 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
151 Clear(); |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
152 getChangesExtended_ = &getChangesExtended; |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
153 } |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
154 #endif |
536
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
155 |
376 | 156 Output(Orthanc::DatabasePluginMessages::GetExportedResources::Response& getExportedResources) |
157 { | |
158 Clear(); | |
159 getExportedResources_ = &getExportedResources; | |
160 } | |
161 | |
162 Output(Orthanc::DatabasePluginMessages::GetLastChange::Response& getLastChange) | |
163 { | |
164 Clear(); | |
165 getLastChange_ = &getLastChange; | |
166 } | |
167 | |
377 | 168 Output(Orthanc::DatabasePluginMessages::GetLastExportedResource::Response& getLastExportedResource) |
169 { | |
170 Clear(); | |
171 getLastExportedResource_ = &getLastExportedResource; | |
172 } | |
173 | |
174 Output(Orthanc::DatabasePluginMessages::GetMainDicomTags::Response& getMainDicomTags) | |
175 { | |
176 Clear(); | |
177 getMainDicomTags_ = &getMainDicomTags; | |
178 } | |
179 | |
379 | 180 Output(Orthanc::DatabasePluginMessages::LookupAttachment::Response& lookupAttachment) |
181 { | |
182 Clear(); | |
183 lookupAttachment_ = &lookupAttachment; | |
184 } | |
185 | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
186 Output(Orthanc::DatabasePluginMessages::LookupResources::Response& lookupResources) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
187 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
188 Clear(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
189 lookupResources_ = &lookupResources; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
190 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
191 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
192 virtual void SignalDeletedAttachment(const std::string& uuid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
193 int32_t contentType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
194 uint64_t uncompressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
195 const std::string& uncompressedHash, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
196 int32_t compressionType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
197 uint64_t compressedSize, |
366
cd9521e04249
DatabaseBackendAdapterV4: added support for customData + revision when not already done
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
198 const std::string& compressedHash, |
cd9521e04249
DatabaseBackendAdapterV4: added support for customData + revision when not already done
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
199 const std::string& customData) ORTHANC_OVERRIDE |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
200 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
201 Orthanc::DatabasePluginMessages::FileInfo* attachment; |
376 | 202 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
203 if (deleteAttachment_ != NULL) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
204 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
205 if (deleteAttachment_->has_deleted_attachment()) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
206 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
207 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
208 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
209 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
210 attachment = deleteAttachment_->mutable_deleted_attachment(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
211 } |
376 | 212 else if (deleteResource_ != NULL) |
213 { | |
214 attachment = deleteResource_->add_deleted_attachments(); | |
215 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
216 else |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
217 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
218 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
219 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
220 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
221 attachment->set_uuid(uuid); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
222 attachment->set_content_type(contentType); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
223 attachment->set_uncompressed_size(uncompressedSize); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
224 attachment->set_uncompressed_hash(uncompressedHash); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
225 attachment->set_compression_type(compressionType); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
226 attachment->set_compressed_size(compressedSize); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
227 attachment->set_compressed_hash(compressedHash); |
577 | 228 #if ORTHANC_PLUGINS_HAS_ATTACHMENTS_CUSTOM_DATA == 1 |
229 attachment->set_custom_data(customData); | |
230 #endif | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
231 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
232 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
233 virtual void SignalDeletedResource(const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
234 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
235 { |
376 | 236 if (deleteResource_ != NULL) |
237 { | |
238 Orthanc::DatabasePluginMessages::DeleteResource_Response_Resource* resource = deleteResource_->add_deleted_resources(); | |
239 resource->set_level(Convert(resourceType)); | |
240 resource->set_public_id(publicId); | |
241 } | |
242 else | |
243 { | |
244 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
245 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
246 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
247 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
248 virtual void SignalRemainingAncestor(const std::string& ancestorId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
249 OrthancPluginResourceType ancestorType) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
250 { |
376 | 251 if (deleteResource_ != NULL) |
252 { | |
253 if (deleteResource_->is_remaining_ancestor()) | |
254 { | |
255 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
256 } | |
257 else | |
258 { | |
259 deleteResource_->set_is_remaining_ancestor(true); | |
260 deleteResource_->mutable_remaining_ancestor()->set_level(Convert(ancestorType)); | |
261 deleteResource_->mutable_remaining_ancestor()->set_public_id(ancestorId); | |
262 } | |
263 } | |
264 else | |
265 { | |
266 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
267 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
268 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
269 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
270 virtual void AnswerAttachment(const std::string& uuid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
271 int32_t contentType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
272 uint64_t uncompressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
273 const std::string& uncompressedHash, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
274 int32_t compressionType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
275 uint64_t compressedSize, |
366
cd9521e04249
DatabaseBackendAdapterV4: added support for customData + revision when not already done
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
276 const std::string& compressedHash, |
cd9521e04249
DatabaseBackendAdapterV4: added support for customData + revision when not already done
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
277 const std::string& customData) ORTHANC_OVERRIDE |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
278 { |
379 | 279 if (lookupAttachment_ != NULL) |
280 { | |
281 if (lookupAttachment_->found()) | |
282 { | |
283 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
284 } | |
285 | |
286 lookupAttachment_->set_found(true); | |
287 lookupAttachment_->mutable_attachment()->set_uuid(uuid); | |
288 lookupAttachment_->mutable_attachment()->set_content_type(contentType); | |
289 lookupAttachment_->mutable_attachment()->set_uncompressed_size(uncompressedSize); | |
290 lookupAttachment_->mutable_attachment()->set_uncompressed_hash(uncompressedHash); | |
291 lookupAttachment_->mutable_attachment()->set_compression_type(compressionType); | |
292 lookupAttachment_->mutable_attachment()->set_compressed_size(compressedSize); | |
293 lookupAttachment_->mutable_attachment()->set_compressed_hash(compressedHash); | |
577 | 294 #if ORTHANC_PLUGINS_HAS_ATTACHMENTS_CUSTOM_DATA==1 |
295 lookupAttachment_->mutable_attachment()->set_custom_data(customData); | |
296 #endif | |
379 | 297 } |
298 else | |
299 { | |
300 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
301 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
302 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
303 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
304 virtual void AnswerChange(int64_t seq, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
305 int32_t changeType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
306 OrthancPluginResourceType resourceType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
307 const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
308 const std::string& date) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
309 { |
376 | 310 Orthanc::DatabasePluginMessages::ServerIndexChange* change; |
311 | |
312 if (getChanges_ != NULL) | |
313 { | |
314 change = getChanges_->add_changes(); | |
315 } | |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
316 #if ORTHANC_PLUGINS_HAS_CHANGES_EXTENDED == 1 |
536
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
317 else if (getChangesExtended_ != NULL) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
318 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
319 change = getChangesExtended_->add_changes(); |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
320 } |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
321 #endif |
376 | 322 else if (getLastChange_ != NULL) |
323 { | |
379 | 324 if (getLastChange_->found()) |
376 | 325 { |
326 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
327 } | |
328 | |
379 | 329 getLastChange_->set_found(true); |
376 | 330 change = getLastChange_->mutable_change(); |
331 } | |
332 else | |
333 { | |
334 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
335 } | |
336 | |
337 change->set_seq(seq); | |
338 change->set_change_type(changeType); | |
339 change->set_resource_type(Convert(resourceType)); | |
340 change->set_public_id(publicId); | |
341 change->set_date(date); | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
342 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
343 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
344 virtual void AnswerDicomTag(uint16_t group, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
345 uint16_t element, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
346 const std::string& value) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
347 { |
377 | 348 if (getMainDicomTags_ != NULL) |
349 { | |
350 Orthanc::DatabasePluginMessages::GetMainDicomTags_Response_Tag* tag = getMainDicomTags_->add_tags(); | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
351 tag->set_group(group); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
352 tag->set_element(element); |
377 | 353 tag->set_value(value); |
354 } | |
355 else | |
356 { | |
357 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
358 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
359 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
360 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
361 virtual void AnswerExportedResource(int64_t seq, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
362 OrthancPluginResourceType resourceType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
363 const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
364 const std::string& modality, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
365 const std::string& date, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
366 const std::string& patientId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
367 const std::string& studyInstanceUid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
368 const std::string& seriesInstanceUid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
369 const std::string& sopInstanceUid) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
370 { |
377 | 371 Orthanc::DatabasePluginMessages::ExportedResource* resource; |
372 | |
376 | 373 if (getExportedResources_ != NULL) |
374 { | |
377 | 375 resource = getExportedResources_->add_resources(); |
376 } | |
377 else if (getLastExportedResource_ != NULL) | |
378 { | |
379 | 379 if (getLastExportedResource_->found()) |
377 | 380 { |
381 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
382 } | |
383 | |
379 | 384 getLastExportedResource_->set_found(true); |
377 | 385 resource = getLastExportedResource_->mutable_resource(); |
376 | 386 } |
387 else | |
388 { | |
389 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
390 } | |
377 | 391 |
392 resource->set_seq(seq); | |
393 resource->set_resource_type(Convert(resourceType)); | |
394 resource->set_public_id(publicId); | |
395 resource->set_modality(modality); | |
396 resource->set_date(date); | |
397 resource->set_patient_id(patientId); | |
398 resource->set_study_instance_uid(studyInstanceUid); | |
399 resource->set_series_instance_uid(seriesInstanceUid); | |
400 resource->set_sop_instance_uid(sopInstanceUid); | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
401 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
402 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
403 virtual void AnswerMatchingResource(const std::string& resourceId) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
404 { |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
405 if (lookupResources_ != NULL) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
406 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
407 lookupResources_->add_resources_ids(resourceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
408 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
409 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
410 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
411 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
412 } |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
413 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
414 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
415 virtual void AnswerMatchingResource(const std::string& resourceId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
416 const std::string& someInstanceId) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
417 { |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
418 if (lookupResources_ != NULL) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
419 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
420 lookupResources_->add_resources_ids(resourceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
421 lookupResources_->add_instances_ids(someInstanceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
422 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
423 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
424 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
425 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
426 } |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
427 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
428 }; |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
429 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
430 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
431 static void ProcessDatabaseOperation(Orthanc::DatabasePluginMessages::DatabaseResponse& response, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
432 const Orthanc::DatabasePluginMessages::DatabaseRequest& request, |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
433 IndexConnectionsPool& pool) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
434 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
435 switch (request.operation()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
436 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
437 case Orthanc::DatabasePluginMessages::OPERATION_GET_SYSTEM_INFORMATION: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
438 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
439 IndexConnectionsPool::Accessor accessor(pool); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
440 response.mutable_get_system_information()->set_database_version(accessor.GetBackend().GetDatabaseVersion(accessor.GetManager())); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
441 response.mutable_get_system_information()->set_supports_flush_to_disk(false); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
442 response.mutable_get_system_information()->set_supports_revisions(accessor.GetBackend().HasRevisionsSupport()); |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
443 response.mutable_get_system_information()->set_supports_labels(accessor.GetBackend().HasLabelsSupport()); |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
444 |
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
445 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 3) |
431 | 446 response.mutable_get_system_information()->set_supports_increment_global_property(accessor.GetBackend().HasAtomicIncrementGlobalProperty()); |
436
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
447 response.mutable_get_system_information()->set_has_update_and_get_statistics(accessor.GetBackend().HasUpdateAndGetStatistics()); |
447 | 448 response.mutable_get_system_information()->set_has_measure_latency(accessor.GetBackend().HasMeasureLatency()); |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
449 #endif |
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
450 |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
451 #if ORTHANC_PLUGINS_HAS_INTEGRATED_FIND == 1 |
525
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
452 response.mutable_get_system_information()->set_supports_find(accessor.GetBackend().HasFindSupport()); |
532 | 453 response.mutable_get_system_information()->set_has_extended_changes(accessor.GetBackend().HasExtendedChanges()); |
525
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
454 #endif |
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
455 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
456 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
457 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
458 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
459 case Orthanc::DatabasePluginMessages::OPERATION_OPEN: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
460 { |
403
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
461 std::list<IdentifierTag> identifierTags; |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
462 |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
463 if (request.open().identifier_tags().empty()) |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
464 { |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
465 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
466 "No identifier tag was provided by the Orthanc core"); |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
467 } |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
468 |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
469 for (int i = 0; i < request.open().identifier_tags().size(); i++) |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
470 { |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
471 const Orthanc::DatabasePluginMessages::Open_Request_IdentifierTag& tag = request.open().identifier_tags(i); |
550
9ed9a91bde33
un-sharing DatabaseConstraint and ISqlLookupFormatter with Orthanc core
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
539
diff
changeset
|
472 identifierTags.push_back(IdentifierTag(MessagesToolbox::Convert(tag.level()), |
403
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
473 Orthanc::DicomTag(tag.group(), tag.element()), |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
474 tag.name())); |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
475 } |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
476 |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
477 pool.OpenConnections(true, identifierTags); |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
478 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
479 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
480 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
481 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
482 case Orthanc::DatabasePluginMessages::OPERATION_CLOSE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
483 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
484 pool.CloseConnections(); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
485 break; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
486 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
487 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
488 case Orthanc::DatabasePluginMessages::OPERATION_FLUSH_TO_DISK: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
489 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
490 // Raise an exception since "set_supports_flush_to_disk(false)" |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
491 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
492 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
493 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
494 case Orthanc::DatabasePluginMessages::OPERATION_START_TRANSACTION: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
495 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
496 std::unique_ptr<IndexConnectionsPool::Accessor> transaction(new IndexConnectionsPool::Accessor(pool)); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
497 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
498 switch (request.start_transaction().type()) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
499 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
500 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_ONLY: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
501 transaction->GetManager().StartTransaction(TransactionType_ReadOnly); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
502 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
503 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
504 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_WRITE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
505 transaction->GetManager().StartTransaction(TransactionType_ReadWrite); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
506 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
507 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
508 default: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
509 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
510 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
511 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
512 response.mutable_start_transaction()->set_transaction(reinterpret_cast<intptr_t>(transaction.release())); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
513 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
514 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
515 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
516 case Orthanc::DatabasePluginMessages::OPERATION_UPGRADE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
517 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
518 IndexConnectionsPool::Accessor accessor(pool); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
519 OrthancPluginStorageArea* storageArea = reinterpret_cast<OrthancPluginStorageArea*>(request.upgrade().storage_area()); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
520 accessor.GetBackend().UpgradeDatabase(accessor.GetManager(), request.upgrade().target_version(), storageArea); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
521 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
522 } |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
523 |
382
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
524 case Orthanc::DatabasePluginMessages::OPERATION_FINALIZE_TRANSACTION: |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
525 { |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
526 IndexConnectionsPool::Accessor* transaction = reinterpret_cast<IndexConnectionsPool::Accessor*>(request.finalize_transaction().transaction()); |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
527 |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
528 if (transaction == NULL) |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
529 { |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
530 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
531 } |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
532 else |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
533 { |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
534 delete transaction; |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
535 } |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
536 |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
537 break; |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
538 } |
447 | 539 |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
540 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 3) |
447 | 541 case Orthanc::DatabasePluginMessages::OPERATION_MEASURE_LATENCY: |
542 { | |
543 IndexConnectionsPool::Accessor accessor(pool); | |
544 response.mutable_measure_latency()->set_latency_us(accessor.GetBackend().MeasureLatency(accessor.GetManager())); | |
545 break; | |
546 } | |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
547 #endif |
447 | 548 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
549 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
550 LOG(ERROR) << "Not implemented database operation from protobuf: " << request.operation(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
551 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
552 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
553 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
554 |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
555 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
556 static void ApplyLookupResources(Orthanc::DatabasePluginMessages::LookupResources_Response& response, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
557 const Orthanc::DatabasePluginMessages::LookupResources_Request& request, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
558 IndexBackend& backend, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
559 DatabaseManager& manager) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
560 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
561 size_t countValues = 0; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
562 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
563 for (int i = 0; i < request.lookup().size(); i++) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
564 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
565 const Orthanc::DatabasePluginMessages::DatabaseConstraint& constraint = request.lookup(i); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
566 countValues += constraint.values().size(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
567 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
568 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
569 std::vector<const char*> values; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
570 values.reserve(countValues); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
571 |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
572 DatabaseConstraints lookup; |
538 | 573 |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
574 for (int i = 0; i < request.lookup().size(); i++) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
575 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
576 const Orthanc::DatabasePluginMessages::DatabaseConstraint& constraint = request.lookup(i); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
577 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
578 if (constraint.tag_group() > 0xffffu || |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
579 constraint.tag_element() > 0xffffu) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
580 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
581 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
582 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
583 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
584 OrthancPluginDatabaseConstraint c; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
585 c.level = Convert(constraint.level()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
586 c.tagGroup = constraint.tag_group(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
587 c.tagElement = constraint.tag_element(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
588 c.isIdentifierTag = (constraint.is_identifier_tag() ? 1 : 0); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
589 c.isCaseSensitive = (constraint.is_case_sensitive() ? 1 : 0); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
590 c.isMandatory = (constraint.is_mandatory() ? 1 : 0); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
591 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
592 switch (constraint.type()) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
593 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
594 case Orthanc::DatabasePluginMessages::CONSTRAINT_EQUAL: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
595 c.type = OrthancPluginConstraintType_Equal; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
596 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
597 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
598 case Orthanc::DatabasePluginMessages::CONSTRAINT_SMALLER_OR_EQUAL: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
599 c.type = OrthancPluginConstraintType_SmallerOrEqual; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
600 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
601 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
602 case Orthanc::DatabasePluginMessages::CONSTRAINT_GREATER_OR_EQUAL: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
603 c.type = OrthancPluginConstraintType_GreaterOrEqual; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
604 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
605 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
606 case Orthanc::DatabasePluginMessages::CONSTRAINT_WILDCARD: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
607 c.type = OrthancPluginConstraintType_Wildcard; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
608 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
609 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
610 case Orthanc::DatabasePluginMessages::CONSTRAINT_LIST: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
611 c.type = OrthancPluginConstraintType_List; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
612 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
613 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
614 default: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
615 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
616 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
617 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
618 c.valuesCount = constraint.values().size(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
619 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
620 if (c.valuesCount == 0) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
621 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
622 c.values = NULL; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
623 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
624 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
625 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
626 c.values = &values[values.size()]; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
627 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
628 for (int j = 0; j < constraint.values().size(); j++) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
629 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
630 assert(values.size() < countValues); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
631 values.push_back(constraint.values(j).c_str()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
632 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
633 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
634 |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
635 lookup.AddConstraint(new DatabaseConstraint(c)); |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
636 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
637 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
638 assert(values.size() == countValues); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
639 |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
640 std::set<std::string> labels; |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
641 |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
642 for (int i = 0; i < request.labels().size(); i++) |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
643 { |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
644 labels.insert(request.labels(i)); |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
645 } |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
646 |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
647 LabelsConstraint labelsConstraint; |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
648 switch (request.labels_constraint()) |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
649 { |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
650 case Orthanc::DatabasePluginMessages::LABELS_CONSTRAINT_ALL: |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
651 labelsConstraint = LabelsConstraint_All; |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
652 break; |
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
653 |
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
654 case Orthanc::DatabasePluginMessages::LABELS_CONSTRAINT_ANY: |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
655 labelsConstraint = LabelsConstraint_Any; |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
656 break; |
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
657 |
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
658 case Orthanc::DatabasePluginMessages::LABELS_CONSTRAINT_NONE: |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
659 labelsConstraint = LabelsConstraint_None; |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
660 break; |
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
661 |
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
662 default: |
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
663 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
664 } |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
665 |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
666 Output output(response); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
667 backend.LookupResources(output, manager, lookup, Convert(request.query_level()), |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
396
diff
changeset
|
668 labels, labelsConstraint, request.limit(), request.retrieve_instances_ids()); |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
669 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
670 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
671 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
672 static void ProcessTransactionOperation(Orthanc::DatabasePluginMessages::TransactionResponse& response, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
673 const Orthanc::DatabasePluginMessages::TransactionRequest& request, |
377 | 674 IndexBackend& backend, |
675 DatabaseManager& manager) | |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
676 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
677 switch (request.operation()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
678 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
679 case Orthanc::DatabasePluginMessages::OPERATION_ROLLBACK: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
680 { |
377 | 681 manager.RollbackTransaction(); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
682 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
683 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
684 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
685 case Orthanc::DatabasePluginMessages::OPERATION_COMMIT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
686 { |
377 | 687 manager.CommitTransaction(); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
688 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
689 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
690 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
691 case Orthanc::DatabasePluginMessages::OPERATION_ADD_ATTACHMENT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
692 { |
577 | 693 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 6) |
694 backend.AddAttachment(response, manager, request.add_attachment()); | |
695 #else | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
696 OrthancPluginAttachment attachment; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
697 attachment.uuid = request.add_attachment().attachment().uuid().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
698 attachment.contentType = request.add_attachment().attachment().content_type(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
699 attachment.uncompressedSize = request.add_attachment().attachment().uncompressed_size(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
700 attachment.uncompressedHash = request.add_attachment().attachment().uncompressed_hash().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
701 attachment.compressionType = request.add_attachment().attachment().compression_type(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
702 attachment.compressedSize = request.add_attachment().attachment().compressed_size(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
703 attachment.compressedHash = request.add_attachment().attachment().compressed_hash().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
704 |
377 | 705 backend.AddAttachment(manager, request.add_attachment().id(), attachment, request.add_attachment().revision()); |
577 | 706 #endif |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
707 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
708 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
709 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_CHANGES: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
710 { |
377 | 711 backend.ClearChanges(manager); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
712 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
713 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
714 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
715 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_EXPORTED_RESOURCES: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
716 { |
377 | 717 backend.ClearExportedResources(manager); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
718 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
719 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
720 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
721 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_ATTACHMENT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
722 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
723 Output output(*response.mutable_delete_attachment()); |
377 | 724 backend.DeleteAttachment(output, manager, request.delete_attachment().id(), request.delete_attachment().type()); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
725 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
726 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
727 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
728 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_METADATA: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
729 { |
377 | 730 backend.DeleteMetadata(manager, request.delete_metadata().id(), request.delete_metadata().type()); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
731 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
732 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
733 |
376 | 734 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_RESOURCE: |
735 { | |
736 response.mutable_delete_resource()->set_is_remaining_ancestor(false); | |
737 | |
738 Output output(*response.mutable_delete_resource()); | |
377 | 739 backend.DeleteResource(output, manager, request.delete_resource().id()); |
376 | 740 break; |
741 } | |
742 | |
743 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_METADATA: | |
744 { | |
745 typedef std::map<int32_t, std::string> Values; | |
746 | |
747 Values values; | |
377 | 748 backend.GetAllMetadata(values, manager, request.get_all_metadata().id()); |
376 | 749 |
384 | 750 response.mutable_get_all_metadata()->mutable_metadata()->Reserve(values.size()); |
376 | 751 for (Values::const_iterator it = values.begin(); it != values.end(); ++it) |
752 { | |
377 | 753 Orthanc::DatabasePluginMessages::GetAllMetadata_Response_Metadata* metadata = |
754 response.mutable_get_all_metadata()->add_metadata(); | |
376 | 755 metadata->set_type(it->first); |
756 metadata->set_value(it->second); | |
757 } | |
758 | |
759 break; | |
760 } | |
761 | |
762 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS: | |
763 { | |
764 std::list<std::string> values; | |
377 | 765 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids().resource_type())); |
376 | 766 |
384 | 767 response.mutable_get_all_public_ids()->mutable_ids()->Reserve(values.size()); |
376 | 768 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) |
769 { | |
770 response.mutable_get_all_public_ids()->add_ids(*it); | |
771 } | |
772 | |
773 break; | |
774 } | |
775 | |
776 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS_WITH_LIMITS: | |
777 { | |
778 std::list<std::string> values; | |
377 | 779 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids_with_limits().resource_type()), |
780 request.get_all_public_ids_with_limits().since(), | |
781 request.get_all_public_ids_with_limits().limit()); | |
376 | 782 |
384 | 783 response.mutable_get_all_public_ids_with_limits()->mutable_ids()->Reserve(values.size()); |
376 | 784 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) |
785 { | |
786 response.mutable_get_all_public_ids_with_limits()->add_ids(*it); | |
787 } | |
788 | |
789 break; | |
790 } | |
791 | |
792 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHANGES: | |
793 { | |
794 Output output(*response.mutable_get_changes()); | |
795 | |
796 bool done; | |
377 | 797 backend.GetChanges(output, done, manager, request.get_changes().since(), request.get_changes().limit()); |
376 | 798 |
799 response.mutable_get_changes()->set_done(done); | |
800 break; | |
801 } | |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
802 #if ORTHANC_PLUGINS_HAS_CHANGES_EXTENDED == 1 |
532 | 803 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHANGES_EXTENDED: |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
804 { |
536
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
805 Output output(*response.mutable_get_changes_extended()); |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
806 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
807 bool done; |
567
22bbce1f88ff
changes extended: support multiple filters
Alain Mazy <am@orthanc.team>
parents:
553
diff
changeset
|
808 std::set<uint32_t> changeTypes; |
22bbce1f88ff
changes extended: support multiple filters
Alain Mazy <am@orthanc.team>
parents:
553
diff
changeset
|
809 for (int i = 0; i < request.get_changes_extended().change_type_size(); ++i) |
22bbce1f88ff
changes extended: support multiple filters
Alain Mazy <am@orthanc.team>
parents:
553
diff
changeset
|
810 { |
22bbce1f88ff
changes extended: support multiple filters
Alain Mazy <am@orthanc.team>
parents:
553
diff
changeset
|
811 changeTypes.insert(request.get_changes_extended().change_type(i)); |
22bbce1f88ff
changes extended: support multiple filters
Alain Mazy <am@orthanc.team>
parents:
553
diff
changeset
|
812 } |
22bbce1f88ff
changes extended: support multiple filters
Alain Mazy <am@orthanc.team>
parents:
553
diff
changeset
|
813 |
22bbce1f88ff
changes extended: support multiple filters
Alain Mazy <am@orthanc.team>
parents:
553
diff
changeset
|
814 backend.GetChangesExtended(output, done, manager, request.get_changes_extended().since(), request.get_changes_extended().to(), changeTypes, request.get_changes_extended().limit()); |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
815 |
532 | 816 response.mutable_get_changes_extended()->set_done(done); |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
817 break; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
818 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
819 #endif |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
461
diff
changeset
|
820 |
376 | 821 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID: |
822 { | |
823 std::list<int64_t> values; | |
377 | 824 backend.GetChildrenInternalId(values, manager, request.get_children_internal_id().id()); |
376 | 825 |
384 | 826 response.mutable_get_children_internal_id()->mutable_ids()->Reserve(values.size()); |
376 | 827 for (std::list<int64_t>::const_iterator it = values.begin(); it != values.end(); ++it) |
828 { | |
829 response.mutable_get_children_internal_id()->add_ids(*it); | |
830 } | |
831 | |
832 break; | |
833 } | |
834 | |
835 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID: | |
836 { | |
837 std::list<std::string> values; | |
377 | 838 backend.GetChildrenPublicId(values, manager, request.get_children_public_id().id()); |
376 | 839 |
384 | 840 response.mutable_get_children_public_id()->mutable_ids()->Reserve(values.size()); |
376 | 841 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) |
842 { | |
843 response.mutable_get_children_public_id()->add_ids(*it); | |
844 } | |
845 | |
846 break; | |
847 } | |
848 | |
849 case Orthanc::DatabasePluginMessages::OPERATION_GET_EXPORTED_RESOURCES: | |
850 { | |
851 Output output(*response.mutable_get_exported_resources()); | |
852 | |
853 bool done; | |
377 | 854 backend.GetExportedResources(output, done, manager, request.get_exported_resources().since(), |
855 request.get_exported_resources().limit()); | |
376 | 856 |
857 response.mutable_get_exported_resources()->set_done(done); | |
858 break; | |
859 } | |
860 | |
861 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_CHANGE: | |
862 { | |
379 | 863 response.mutable_get_last_change()->set_found(false); |
376 | 864 |
865 Output output(*response.mutable_get_last_change()); | |
377 | 866 backend.GetLastChange(output, manager); |
867 break; | |
868 } | |
869 | |
870 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_EXPORTED_RESOURCE: | |
871 { | |
379 | 872 response.mutable_get_last_exported_resource()->set_found(false); |
377 | 873 |
874 Output output(*response.mutable_get_last_exported_resource()); | |
875 backend.GetLastExportedResource(output, manager); | |
876 break; | |
877 } | |
878 | |
879 case Orthanc::DatabasePluginMessages::OPERATION_GET_MAIN_DICOM_TAGS: | |
880 { | |
881 Output output(*response.mutable_get_main_dicom_tags()); | |
882 backend.GetMainDicomTags(output, manager, request.get_main_dicom_tags().id()); | |
376 | 883 break; |
884 } | |
885 | |
377 | 886 case Orthanc::DatabasePluginMessages::OPERATION_GET_PUBLIC_ID: |
887 { | |
888 const std::string id = backend.GetPublicId(manager, request.get_public_id().id()); | |
889 response.mutable_get_public_id()->set_id(id); | |
890 break; | |
891 } | |
892 | |
893 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCES_COUNT: | |
894 { | |
895 OrthancPluginResourceType type = Convert(request.get_resources_count().type()); | |
896 uint64_t count = backend.GetResourcesCount(manager, type); | |
897 response.mutable_get_resources_count()->set_count(count); | |
898 break; | |
899 } | |
900 | |
901 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE: | |
902 { | |
384 | 903 OrthancPluginResourceType type = backend.GetResourceType(manager, request.get_resource_type().id()); |
377 | 904 response.mutable_get_resource_type()->set_type(Convert(type)); |
905 break; | |
906 } | |
907 | |
908 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE: | |
909 { | |
910 response.mutable_get_total_compressed_size()->set_size(backend.GetTotalCompressedSize(manager)); | |
911 break; | |
912 } | |
913 | |
914 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_UNCOMPRESSED_SIZE: | |
915 { | |
916 response.mutable_get_total_uncompressed_size()->set_size(backend.GetTotalUncompressedSize(manager)); | |
917 break; | |
918 } | |
919 | |
378
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
920 case Orthanc::DatabasePluginMessages::OPERATION_IS_PROTECTED_PATIENT: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
921 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
922 bool isProtected = backend.IsProtectedPatient(manager, request.is_protected_patient().patient_id()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
923 response.mutable_is_protected_patient()->set_protected_patient(isProtected); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
924 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
925 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
926 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
927 case Orthanc::DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
928 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
929 std::list<int32_t> values; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
930 backend.ListAvailableAttachments(values, manager, request.list_available_attachments().id()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
931 |
384 | 932 response.mutable_list_available_attachments()->mutable_attachments()->Reserve(values.size()); |
378
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
933 for (std::list<int32_t>::const_iterator it = values.begin(); it != values.end(); ++it) |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
934 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
935 response.mutable_list_available_attachments()->add_attachments(*it); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
936 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
937 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
938 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
939 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
940 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
941 case Orthanc::DatabasePluginMessages::OPERATION_LOG_CHANGE: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
942 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
943 backend.LogChange(manager, request.log_change().change_type(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
944 request.log_change().resource_id(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
945 Convert(request.log_change().resource_type()), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
946 request.log_change().date().c_str()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
947 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
948 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
949 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
950 case Orthanc::DatabasePluginMessages::OPERATION_LOG_EXPORTED_RESOURCE: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
951 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
952 backend.LogExportedResource(manager, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
953 Convert(request.log_exported_resource().resource_type()), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
954 request.log_exported_resource().public_id().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
955 request.log_exported_resource().modality().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
956 request.log_exported_resource().date().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
957 request.log_exported_resource().patient_id().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
958 request.log_exported_resource().study_instance_uid().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
959 request.log_exported_resource().series_instance_uid().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
960 request.log_exported_resource().sop_instance_uid().c_str()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
961 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
962 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
963 |
379 | 964 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_ATTACHMENT: |
965 { | |
966 Output output(*response.mutable_lookup_attachment()); | |
967 | |
968 int64_t revision = -1; | |
969 backend.LookupAttachment(output, revision, manager, request.lookup_attachment().id(), request.lookup_attachment().content_type()); | |
970 | |
971 if (response.lookup_attachment().found()) | |
972 { | |
973 response.mutable_lookup_attachment()->set_revision(revision); | |
974 } | |
975 | |
976 break; | |
977 } | |
978 | |
979 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_GLOBAL_PROPERTY: | |
980 { | |
981 std::string value; | |
982 if (backend.LookupGlobalProperty(value, manager, request.lookup_global_property().server_id().c_str(), | |
983 request.lookup_global_property().property())) | |
984 { | |
985 response.mutable_lookup_global_property()->set_found(true); | |
986 response.mutable_lookup_global_property()->set_value(value); | |
987 } | |
988 else | |
989 { | |
990 response.mutable_lookup_global_property()->set_found(false); | |
991 } | |
992 | |
993 break; | |
994 } | |
431 | 995 |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
996 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 3) |
436
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
997 case Orthanc::DatabasePluginMessages::OPERATION_UPDATE_AND_GET_STATISTICS: |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
998 { |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
999 int64_t patientsCount, studiesCount, seriesCount, instancesCount, compressedSize, uncompressedSize; |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1000 backend.UpdateAndGetStatistics(manager, patientsCount, studiesCount, seriesCount, instancesCount, compressedSize, uncompressedSize); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1001 |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1002 response.mutable_update_and_get_statistics()->set_patients_count(patientsCount); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1003 response.mutable_update_and_get_statistics()->set_studies_count(studiesCount); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1004 response.mutable_update_and_get_statistics()->set_series_count(seriesCount); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1005 response.mutable_update_and_get_statistics()->set_instances_count(instancesCount); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1006 response.mutable_update_and_get_statistics()->set_total_compressed_size(compressedSize); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1007 response.mutable_update_and_get_statistics()->set_total_uncompressed_size(uncompressedSize); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1008 break; |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1009 } |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
1010 #endif |
436
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
431
diff
changeset
|
1011 |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
1012 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 3) |
431 | 1013 case Orthanc::DatabasePluginMessages::OPERATION_INCREMENT_GLOBAL_PROPERTY: |
1014 { | |
1015 int64_t value = backend.IncrementGlobalProperty(manager, request.increment_global_property().server_id().c_str(), | |
1016 request.increment_global_property().property(), | |
1017 request.increment_global_property().increment()); | |
1018 response.mutable_increment_global_property()->set_new_value(value); | |
1019 break; | |
1020 } | |
461
c2d6ce6818fe
fix compatibility with older versions of Orthanc SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
460
diff
changeset
|
1021 #endif |
431 | 1022 |
379 | 1023 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_METADATA: |
1024 { | |
1025 std::string value; | |
1026 int64_t revision = -1; | |
1027 if (backend.LookupMetadata(value, revision, manager, request.lookup_metadata().id(), request.lookup_metadata().metadata_type())) | |
1028 { | |
1029 response.mutable_lookup_metadata()->set_found(true); | |
1030 response.mutable_lookup_metadata()->set_value(value); | |
1031 response.mutable_lookup_metadata()->set_revision(revision); | |
1032 } | |
1033 else | |
1034 { | |
1035 response.mutable_lookup_metadata()->set_found(false); | |
1036 } | |
1037 | |
1038 break; | |
1039 } | |
1040 | |
1041 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_PARENT: | |
1042 { | |
1043 int64_t parent = -1; | |
1044 if (backend.LookupParent(parent, manager, request.lookup_parent().id())) | |
1045 { | |
1046 response.mutable_lookup_parent()->set_found(true); | |
1047 response.mutable_lookup_parent()->set_parent(parent); | |
1048 } | |
1049 else | |
1050 { | |
1051 response.mutable_lookup_parent()->set_found(false); | |
1052 } | |
1053 | |
1054 break; | |
1055 } | |
1056 | |
1057 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_RESOURCE: | |
1058 { | |
1059 int64_t internalId = -1; | |
1060 OrthancPluginResourceType type; | |
1061 if (backend.LookupResource(internalId, type, manager, request.lookup_resource().public_id().c_str())) | |
1062 { | |
1063 response.mutable_lookup_resource()->set_found(true); | |
1064 response.mutable_lookup_resource()->set_internal_id(internalId); | |
1065 response.mutable_lookup_resource()->set_type(Convert(type)); | |
1066 } | |
1067 else | |
1068 { | |
1069 response.mutable_lookup_resource()->set_found(false); | |
1070 } | |
1071 | |
1072 break; | |
1073 } | |
1074 | |
1075 case Orthanc::DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE: | |
1076 { | |
1077 int64_t patientId = -1; | |
1078 if (backend.SelectPatientToRecycle(patientId, manager)) | |
1079 { | |
1080 response.mutable_select_patient_to_recycle()->set_found(true); | |
1081 response.mutable_select_patient_to_recycle()->set_patient_id(patientId); | |
1082 } | |
1083 else | |
1084 { | |
1085 response.mutable_select_patient_to_recycle()->set_found(false); | |
1086 } | |
1087 | |
1088 break; | |
1089 } | |
1090 | |
1091 case Orthanc::DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE_WITH_AVOID: | |
1092 { | |
1093 int64_t patientId = -1; | |
1094 if (backend.SelectPatientToRecycle(patientId, manager, request.select_patient_to_recycle_with_avoid().patient_id_to_avoid())) | |
1095 { | |
1096 response.mutable_select_patient_to_recycle_with_avoid()->set_found(true); | |
1097 response.mutable_select_patient_to_recycle_with_avoid()->set_patient_id(patientId); | |
1098 } | |
1099 else | |
1100 { | |
1101 response.mutable_select_patient_to_recycle_with_avoid()->set_found(false); | |
1102 } | |
1103 | |
1104 break; | |
1105 } | |
1106 | |
1107 case Orthanc::DatabasePluginMessages::OPERATION_SET_GLOBAL_PROPERTY: | |
1108 { | |
1109 backend.SetGlobalProperty(manager, request.set_global_property().server_id().c_str(), | |
1110 request.set_global_property().property(), | |
1111 request.set_global_property().value().c_str()); | |
1112 break; | |
1113 } | |
1114 | |
1115 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_MAIN_DICOM_TAGS: | |
1116 { | |
1117 backend.ClearMainDicomTags(manager, request.clear_main_dicom_tags().id()); | |
1118 break; | |
1119 } | |
1120 | |
1121 case Orthanc::DatabasePluginMessages::OPERATION_SET_METADATA: | |
1122 { | |
1123 backend.SetMetadata(manager, request.set_metadata().id(), | |
1124 request.set_metadata().metadata_type(), | |
1125 request.set_metadata().value().c_str(), | |
1126 request.set_metadata().revision()); | |
1127 break; | |
1128 } | |
1129 | |
1130 case Orthanc::DatabasePluginMessages::OPERATION_SET_PROTECTED_PATIENT: | |
1131 { | |
1132 backend.SetProtectedPatient(manager, request.set_protected_patient().patient_id(), | |
1133 request.set_protected_patient().protected_patient()); | |
1134 break; | |
1135 } | |
1136 | |
1137 case Orthanc::DatabasePluginMessages::OPERATION_IS_DISK_SIZE_ABOVE: | |
1138 { | |
1139 bool above = (backend.GetTotalCompressedSize(manager) >= request.is_disk_size_above().threshold()); | |
1140 response.mutable_is_disk_size_above()->set_result(above); | |
1141 break; | |
1142 } | |
1143 | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1144 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_RESOURCES: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1145 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1146 ApplyLookupResources(*response.mutable_lookup_resources(), request.lookup_resources(), backend, manager); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1147 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1148 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1149 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1150 case Orthanc::DatabasePluginMessages::OPERATION_CREATE_INSTANCE: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1151 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1152 const char* hashPatient = request.create_instance().patient().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1153 const char* hashStudy = request.create_instance().study().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1154 const char* hashSeries = request.create_instance().series().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1155 const char* hashInstance = request.create_instance().instance().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1156 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1157 OrthancPluginCreateInstanceResult result; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1158 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1159 if (backend.HasCreateInstance()) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1160 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1161 backend.CreateInstance(result, manager, hashPatient, hashStudy, hashSeries, hashInstance); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1162 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1163 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1164 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1165 backend.CreateInstanceGeneric(result, manager, hashPatient, hashStudy, hashSeries, hashInstance); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1166 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1167 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1168 response.mutable_create_instance()->set_is_new_instance(result.isNewInstance); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1169 response.mutable_create_instance()->set_instance_id(result.instanceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1170 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1171 if (result.isNewInstance) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1172 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1173 response.mutable_create_instance()->set_is_new_patient(result.isNewPatient); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1174 response.mutable_create_instance()->set_is_new_study(result.isNewStudy); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1175 response.mutable_create_instance()->set_is_new_series(result.isNewSeries); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1176 response.mutable_create_instance()->set_patient_id(result.patientId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1177 response.mutable_create_instance()->set_study_id(result.studyId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1178 response.mutable_create_instance()->set_series_id(result.seriesId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1179 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1180 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1181 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1182 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1183 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1184 case Orthanc::DatabasePluginMessages::OPERATION_SET_RESOURCES_CONTENT: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1185 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1186 std::vector<OrthancPluginResourcesContentTags> identifierTags; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1187 std::vector<OrthancPluginResourcesContentTags> mainDicomTags; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1188 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1189 identifierTags.reserve(request.set_resources_content().tags().size()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1190 mainDicomTags.reserve(request.set_resources_content().tags().size()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1191 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1192 for (int i = 0; i < request.set_resources_content().tags().size(); i++) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1193 { |
383 | 1194 if (request.set_resources_content().tags(i).group() > 0xffffu || |
1195 request.set_resources_content().tags(i).element() > 0xffffu) | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1196 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1197 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1198 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1199 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1200 OrthancPluginResourcesContentTags tag; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1201 tag.resource = request.set_resources_content().tags(i).resource_id(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1202 tag.group = request.set_resources_content().tags(i).group(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1203 tag.element = request.set_resources_content().tags(i).element(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1204 tag.value = request.set_resources_content().tags(i).value().c_str(); |
384 | 1205 |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1206 if (request.set_resources_content().tags(i).is_identifier()) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1207 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1208 identifierTags.push_back(tag); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1209 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1210 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1211 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1212 mainDicomTags.push_back(tag); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1213 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1214 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1215 |
384 | 1216 std::vector<OrthancPluginResourcesContentMetadata> metadata; |
1217 metadata.reserve(request.set_resources_content().metadata().size()); | |
1218 | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1219 for (int i = 0; i < request.set_resources_content().metadata().size(); i++) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1220 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1221 OrthancPluginResourcesContentMetadata item; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1222 item.resource = request.set_resources_content().metadata(i).resource_id(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1223 item.metadata = request.set_resources_content().metadata(i).metadata(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1224 item.value = request.set_resources_content().metadata(i).value().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1225 metadata.push_back(item); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1226 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1227 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1228 backend.SetResourcesContent(manager, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1229 identifierTags.size(), (identifierTags.empty() ? NULL : &identifierTags[0]), |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1230 mainDicomTags.size(), (mainDicomTags.empty() ? NULL : &mainDicomTags[0]), |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1231 metadata.size(), (metadata.empty() ? NULL : &metadata[0])); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1232 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1233 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1234 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1235 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_METADATA: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1236 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1237 std::list<std::string> values; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1238 backend.GetChildrenMetadata(values, manager, request.get_children_metadata().id(), request.get_children_metadata().metadata()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1239 |
384 | 1240 response.mutable_get_children_metadata()->mutable_values()->Reserve(values.size()); |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1241 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1242 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1243 response.mutable_get_children_metadata()->add_values(*it); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1244 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1245 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1246 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1247 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1248 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1249 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_CHANGE_INDEX: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1250 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1251 response.mutable_get_last_change_index()->set_result(backend.GetLastChangeIndex(manager)); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1252 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1253 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1254 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1255 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_RESOURCE_AND_PARENT: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1256 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1257 int64_t id; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1258 OrthancPluginResourceType type; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1259 std::string parent; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1260 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1261 if (backend.LookupResourceAndParent(id, type, parent, manager, request.lookup_resource_and_parent().public_id().c_str())) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1262 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1263 response.mutable_lookup_resource_and_parent()->set_found(true); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1264 response.mutable_lookup_resource_and_parent()->set_id(id); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1265 response.mutable_lookup_resource_and_parent()->set_type(Convert(type)); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1266 |
384 | 1267 switch (type) |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1268 { |
384 | 1269 case OrthancPluginResourceType_Study: |
1270 case OrthancPluginResourceType_Series: | |
1271 case OrthancPluginResourceType_Instance: | |
1272 if (parent.empty()) | |
1273 { | |
1274 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
1275 } | |
1276 else | |
1277 { | |
1278 response.mutable_lookup_resource_and_parent()->set_parent_public_id(parent); | |
1279 } | |
1280 break; | |
1281 | |
1282 case OrthancPluginResourceType_Patient: | |
1283 if (!parent.empty()) | |
1284 { | |
1285 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
1286 } | |
1287 break; | |
1288 | |
1289 default: | |
1290 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1291 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1292 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1293 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1294 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1295 response.mutable_lookup_resource_and_parent()->set_found(false); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1296 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1297 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1298 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1299 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1300 |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1301 case Orthanc::DatabasePluginMessages::OPERATION_ADD_LABEL: |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1302 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1303 backend.AddLabel(manager, request.add_label().id(), request.add_label().label()); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1304 break; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1305 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1306 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1307 case Orthanc::DatabasePluginMessages::OPERATION_REMOVE_LABEL: |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1308 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1309 backend.RemoveLabel(manager, request.remove_label().id(), request.remove_label().label()); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1310 break; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1311 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1312 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1313 case Orthanc::DatabasePluginMessages::OPERATION_LIST_LABELS: |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1314 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1315 std::list<std::string> labels; |
402
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1316 |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1317 if (request.list_labels().single_resource()) |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1318 { |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1319 backend.ListLabels(labels, manager, request.list_labels().id()); |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1320 } |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1321 else |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1322 { |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1323 backend.ListAllLabels(labels, manager); |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
1324 } |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1325 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1326 response.mutable_list_available_attachments()->mutable_attachments()->Reserve(labels.size()); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1327 for (std::list<std::string>::const_iterator it = labels.begin(); it != labels.end(); ++it) |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1328 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1329 response.mutable_list_labels()->add_labels(*it); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1330 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1331 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1332 break; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1333 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1334 |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
1335 #if ORTHANC_PLUGINS_HAS_INTEGRATED_FIND == 1 |
525
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
1336 case Orthanc::DatabasePluginMessages::OPERATION_FIND: |
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
1337 { |
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
1338 backend.ExecuteFind(response, manager, request.find()); |
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
1339 break; |
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
1340 } |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
553
diff
changeset
|
1341 #endif |
525
451125122692
created branch find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
507
diff
changeset
|
1342 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1343 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1344 LOG(ERROR) << "Not implemented transaction operation from protobuf: " << request.operation(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1345 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1346 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1347 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1348 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1349 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1350 static OrthancPluginErrorCode CallBackend(OrthancPluginMemoryBuffer64* serializedResponse, |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1351 void* rawPool, |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1352 const void* requestData, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1353 uint64_t requestSize) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1354 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1355 Orthanc::DatabasePluginMessages::Request request; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1356 if (!request.ParseFromArray(requestData, requestSize)) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1357 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1358 LOG(ERROR) << "Cannot parse message from the Orthanc core using protobuf"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1359 return OrthancPluginErrorCode_InternalError; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1360 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1361 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1362 if (rawPool == NULL) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1363 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1364 LOG(ERROR) << "Received a NULL pointer from the database"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1365 return OrthancPluginErrorCode_InternalError; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1366 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1367 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1368 IndexConnectionsPool& pool = *reinterpret_cast<IndexConnectionsPool*>(rawPool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1369 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1370 try |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1371 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1372 Orthanc::DatabasePluginMessages::Response response; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1373 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1374 switch (request.type()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1375 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1376 case Orthanc::DatabasePluginMessages::REQUEST_DATABASE: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1377 ProcessDatabaseOperation(*response.mutable_database_response(), request.database_request(), pool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1378 break; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1379 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1380 case Orthanc::DatabasePluginMessages::REQUEST_TRANSACTION: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1381 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1382 IndexConnectionsPool::Accessor& transaction = *reinterpret_cast<IndexConnectionsPool::Accessor*>(request.transaction_request().transaction()); |
377 | 1383 ProcessTransactionOperation(*response.mutable_transaction_response(), request.transaction_request(), |
1384 transaction.GetBackend(), transaction.GetManager()); | |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1385 break; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1386 } |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1387 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1388 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1389 LOG(ERROR) << "Not implemented request type from protobuf: " << request.type(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1390 break; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1391 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1392 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1393 std::string s; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1394 if (!response.SerializeToString(&s)) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1395 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1396 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Cannot serialize to protobuf"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1397 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1398 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1399 if (OrthancPluginCreateMemoryBuffer64(pool.GetContext(), serializedResponse, s.size()) != OrthancPluginErrorCode_Success) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1400 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1401 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotEnoughMemory, "Cannot allocate a memory buffer"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1402 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1403 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1404 if (!s.empty()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1405 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1406 assert(serializedResponse->size == s.size()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1407 memcpy(serializedResponse->data, s.c_str(), s.size()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1408 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1409 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1410 return OrthancPluginErrorCode_Success; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1411 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1412 catch (::Orthanc::OrthancException& e) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1413 { |
445
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1414 if (e.GetErrorCode() == ::Orthanc::ErrorCode_DatabaseCannotSerialize) |
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1415 { |
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1416 LOG(WARNING) << "An SQL transaction failed and will likely be retried: " << e.GetDetails(); |
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1417 } |
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1418 else |
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1419 { |
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1420 LOG(ERROR) << "Exception in database back-end: " << e.What(); |
cec6a0cd399f
now logging DatabaseCannotSerialize as a warning only with the details (Orthanc will log it as an error after all retries)
Alain Mazy <am@osimis.io>
parents:
436
diff
changeset
|
1421 } |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1422 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1423 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1424 catch (::std::runtime_error& e) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1425 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1426 LOG(ERROR) << "Exception in database back-end: " << e.what(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1427 return OrthancPluginErrorCode_DatabasePlugin; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1428 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1429 catch (...) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1430 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1431 LOG(ERROR) << "Native exception"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1432 return OrthancPluginErrorCode_DatabasePlugin; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1433 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1434 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1435 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1436 static void FinalizeBackend(void* rawPool) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1437 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1438 if (rawPool != NULL) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1439 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1440 IndexConnectionsPool* pool = reinterpret_cast<IndexConnectionsPool*>(rawPool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1441 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1442 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1443 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1444 isBackendInUse_ = false; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1445 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1446 else |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1447 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1448 LOG(ERROR) << "More than one index backend was registered, internal error"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1449 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1450 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1451 delete pool; |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1452 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1453 else |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1454 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1455 LOG(ERROR) << "Received a null pointer from the Orthanc core, internal error"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1456 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1457 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1458 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1459 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1460 void DatabaseBackendAdapterV4::Register(IndexBackend* backend, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1461 size_t countConnections, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1462 unsigned int maxDatabaseRetries) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1463 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1464 std::unique_ptr<IndexConnectionsPool> pool(new IndexConnectionsPool(backend, countConnections)); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1465 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1466 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1467 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1468 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1469 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1470 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1471 OrthancPluginContext* context = backend->GetContext(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1472 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1473 if (OrthancPluginRegisterDatabaseBackendV4(context, pool.release(), maxDatabaseRetries, |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1474 CallBackend, FinalizeBackend) != OrthancPluginErrorCode_Success) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1475 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1476 delete backend; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1477 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Unable to register the database backend"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1478 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1479 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1480 isBackendInUse_ = true; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1481 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1482 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1483 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1484 void DatabaseBackendAdapterV4::Finalize() |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1485 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1486 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1487 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1488 LOG(ERROR) << "The Orthanc core has not destructed the index backend, internal error"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1489 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1490 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1491 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1492 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1493 # endif |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1494 #endif |