Mercurial > hg > orthanc-databases
annotate Framework/Plugins/DatabaseBackendAdapterV4.cpp @ 379:33b2aaffdd6c db-protobuf
cont
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 29 Mar 2023 08:47:35 +0200 |
parents | 9db9e0275ec0 |
children | cb91096fef06 |
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 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * This program is free software: you can redistribute it and/or |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * modify it under the terms of the GNU Affero General Public License |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * as published by the Free Software Foundation, either version 3 of |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * the License, or (at your option) any later version. |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * 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
|
14 * WITHOUT ANY WARRANTY; without even the implied warranty of |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * Affero General Public License for more details. |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * 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
|
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 **/ |
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 #include "DatabaseBackendAdapterV4.h" |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 #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
|
26 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 0) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
28 #include "IndexConnectionsPool.h" |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
29 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 #include <OrthancDatabasePlugin.pb.h> // Include protobuf messages |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 #include <Logging.h> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 #include <OrthancException.h> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 #include <stdexcept> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 #include <list> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 #include <string> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 #include <cassert> |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
41 #define ORTHANC_PLUGINS_DATABASE_CATCH(context) \ |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
43 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 namespace OrthancDatabases |
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 static bool isBackendInUse_ = false; // Only for sanity checks |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
48 |
376 | 49 static Orthanc::DatabasePluginMessages::ResourceType Convert(OrthancPluginResourceType resourceType) |
50 { | |
51 switch (resourceType) | |
52 { | |
53 case OrthancPluginResourceType_Patient: | |
54 return Orthanc::DatabasePluginMessages::RESOURCE_PATIENT; | |
55 | |
56 case OrthancPluginResourceType_Study: | |
57 return Orthanc::DatabasePluginMessages::RESOURCE_STUDY; | |
58 | |
59 case OrthancPluginResourceType_Series: | |
60 return Orthanc::DatabasePluginMessages::RESOURCE_SERIES; | |
61 | |
62 case OrthancPluginResourceType_Instance: | |
63 return Orthanc::DatabasePluginMessages::RESOURCE_INSTANCE; | |
64 | |
65 default: | |
66 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
67 } | |
68 } | |
69 | |
70 | |
71 static OrthancPluginResourceType Convert(Orthanc::DatabasePluginMessages::ResourceType resourceType) | |
72 { | |
73 switch (resourceType) | |
74 { | |
75 case Orthanc::DatabasePluginMessages::RESOURCE_PATIENT: | |
76 return OrthancPluginResourceType_Patient; | |
77 | |
78 case Orthanc::DatabasePluginMessages::RESOURCE_STUDY: | |
79 return OrthancPluginResourceType_Study; | |
80 | |
81 case Orthanc::DatabasePluginMessages::RESOURCE_SERIES: | |
82 return OrthancPluginResourceType_Series; | |
83 | |
84 case Orthanc::DatabasePluginMessages::RESOURCE_INSTANCE: | |
85 return OrthancPluginResourceType_Instance; | |
86 | |
87 default: | |
88 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
89 } | |
90 } | |
91 | |
92 | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
93 class Output : public IDatabaseBackendOutput |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
94 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
95 private: |
377 | 96 Orthanc::DatabasePluginMessages::DeleteAttachment::Response* deleteAttachment_; |
97 Orthanc::DatabasePluginMessages::DeleteResource::Response* deleteResource_; | |
98 Orthanc::DatabasePluginMessages::GetChanges::Response* getChanges_; | |
99 Orthanc::DatabasePluginMessages::GetExportedResources::Response* getExportedResources_; | |
100 Orthanc::DatabasePluginMessages::GetLastChange::Response* getLastChange_; | |
101 Orthanc::DatabasePluginMessages::GetLastExportedResource::Response* getLastExportedResource_; | |
102 Orthanc::DatabasePluginMessages::GetMainDicomTags::Response* getMainDicomTags_; | |
379 | 103 Orthanc::DatabasePluginMessages::LookupAttachment::Response* lookupAttachment_; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
104 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
105 void Clear() |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
106 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
107 deleteAttachment_ = NULL; |
376 | 108 deleteResource_ = NULL; |
109 getChanges_ = NULL; | |
110 getExportedResources_ = NULL; | |
111 getLastChange_ = NULL; | |
377 | 112 getLastExportedResource_ = NULL; |
379 | 113 lookupAttachment_ = NULL; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
114 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
115 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
116 public: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
117 Output(Orthanc::DatabasePluginMessages::DeleteAttachment::Response& deleteAttachment) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
118 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
119 Clear(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
120 deleteAttachment_ = &deleteAttachment; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
121 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
122 |
376 | 123 Output(Orthanc::DatabasePluginMessages::DeleteResource::Response& deleteResource) |
124 { | |
125 Clear(); | |
126 deleteResource_ = &deleteResource; | |
127 } | |
128 | |
129 Output(Orthanc::DatabasePluginMessages::GetChanges::Response& getChanges) | |
130 { | |
131 Clear(); | |
132 getChanges_ = &getChanges; | |
133 } | |
134 | |
135 Output(Orthanc::DatabasePluginMessages::GetExportedResources::Response& getExportedResources) | |
136 { | |
137 Clear(); | |
138 getExportedResources_ = &getExportedResources; | |
139 } | |
140 | |
141 Output(Orthanc::DatabasePluginMessages::GetLastChange::Response& getLastChange) | |
142 { | |
143 Clear(); | |
144 getLastChange_ = &getLastChange; | |
145 } | |
146 | |
377 | 147 Output(Orthanc::DatabasePluginMessages::GetLastExportedResource::Response& getLastExportedResource) |
148 { | |
149 Clear(); | |
150 getLastExportedResource_ = &getLastExportedResource; | |
151 } | |
152 | |
153 Output(Orthanc::DatabasePluginMessages::GetMainDicomTags::Response& getMainDicomTags) | |
154 { | |
155 Clear(); | |
156 getMainDicomTags_ = &getMainDicomTags; | |
157 } | |
158 | |
379 | 159 Output(Orthanc::DatabasePluginMessages::LookupAttachment::Response& lookupAttachment) |
160 { | |
161 Clear(); | |
162 lookupAttachment_ = &lookupAttachment; | |
163 } | |
164 | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
165 virtual void SignalDeletedAttachment(const std::string& uuid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
166 int32_t contentType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
167 uint64_t uncompressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
168 const std::string& uncompressedHash, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
169 int32_t compressionType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
170 uint64_t compressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
171 const std::string& compressedHash) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
172 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
173 Orthanc::DatabasePluginMessages::FileInfo* attachment; |
376 | 174 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
175 if (deleteAttachment_ != NULL) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
176 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
177 if (deleteAttachment_->has_deleted_attachment()) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
178 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
179 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
180 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
181 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
182 attachment = deleteAttachment_->mutable_deleted_attachment(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
183 } |
376 | 184 else if (deleteResource_ != NULL) |
185 { | |
186 attachment = deleteResource_->add_deleted_attachments(); | |
187 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
188 else |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
189 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
190 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
191 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
192 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
193 attachment->set_uuid(uuid); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
194 attachment->set_content_type(contentType); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
195 attachment->set_uncompressed_size(uncompressedSize); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
196 attachment->set_uncompressed_hash(uncompressedHash); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
197 attachment->set_compression_type(compressionType); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
198 attachment->set_compressed_size(compressedSize); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
199 attachment->set_compressed_hash(compressedHash); |
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 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
202 virtual void SignalDeletedResource(const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
203 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
204 { |
376 | 205 if (deleteResource_ != NULL) |
206 { | |
207 Orthanc::DatabasePluginMessages::DeleteResource_Response_Resource* resource = deleteResource_->add_deleted_resources(); | |
208 resource->set_level(Convert(resourceType)); | |
209 resource->set_public_id(publicId); | |
210 } | |
211 else | |
212 { | |
213 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
214 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
215 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
216 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
217 virtual void SignalRemainingAncestor(const std::string& ancestorId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
218 OrthancPluginResourceType ancestorType) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
219 { |
376 | 220 if (deleteResource_ != NULL) |
221 { | |
222 if (deleteResource_->is_remaining_ancestor()) | |
223 { | |
224 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
225 } | |
226 else | |
227 { | |
228 deleteResource_->set_is_remaining_ancestor(true); | |
229 deleteResource_->mutable_remaining_ancestor()->set_level(Convert(ancestorType)); | |
230 deleteResource_->mutable_remaining_ancestor()->set_public_id(ancestorId); | |
231 } | |
232 } | |
233 else | |
234 { | |
235 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
236 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
237 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
238 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
239 virtual void AnswerAttachment(const std::string& uuid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
240 int32_t contentType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
241 uint64_t uncompressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
242 const std::string& uncompressedHash, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
243 int32_t compressionType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
244 uint64_t compressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
245 const std::string& compressedHash) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
246 { |
379 | 247 if (lookupAttachment_ != NULL) |
248 { | |
249 if (lookupAttachment_->found()) | |
250 { | |
251 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
252 } | |
253 | |
254 lookupAttachment_->set_found(true); | |
255 lookupAttachment_->mutable_attachment()->set_uuid(uuid); | |
256 lookupAttachment_->mutable_attachment()->set_content_type(contentType); | |
257 lookupAttachment_->mutable_attachment()->set_uncompressed_size(uncompressedSize); | |
258 lookupAttachment_->mutable_attachment()->set_uncompressed_hash(uncompressedHash); | |
259 lookupAttachment_->mutable_attachment()->set_compression_type(compressionType); | |
260 lookupAttachment_->mutable_attachment()->set_compressed_size(compressedSize); | |
261 lookupAttachment_->mutable_attachment()->set_compressed_hash(compressedHash); | |
262 } | |
263 else | |
264 { | |
265 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
266 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
267 } |
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 virtual void AnswerChange(int64_t seq, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
270 int32_t changeType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
271 OrthancPluginResourceType resourceType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
272 const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
273 const std::string& date) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
274 { |
376 | 275 Orthanc::DatabasePluginMessages::ServerIndexChange* change; |
276 | |
277 if (getChanges_ != NULL) | |
278 { | |
279 change = getChanges_->add_changes(); | |
280 } | |
281 else if (getLastChange_ != NULL) | |
282 { | |
379 | 283 if (getLastChange_->found()) |
376 | 284 { |
285 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
286 } | |
287 | |
379 | 288 getLastChange_->set_found(true); |
376 | 289 change = getLastChange_->mutable_change(); |
290 } | |
291 else | |
292 { | |
293 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
294 } | |
295 | |
296 change->set_seq(seq); | |
297 change->set_change_type(changeType); | |
298 change->set_resource_type(Convert(resourceType)); | |
299 change->set_public_id(publicId); | |
300 change->set_date(date); | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
301 } |
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 virtual void AnswerDicomTag(uint16_t group, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
304 uint16_t element, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
305 const std::string& value) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
306 { |
377 | 307 if (getMainDicomTags_ != NULL) |
308 { | |
309 Orthanc::DatabasePluginMessages::GetMainDicomTags_Response_Tag* tag = getMainDicomTags_->add_tags(); | |
310 tag->set_key((static_cast<uint32_t>(group) << 16) + static_cast<uint32_t>(element)); | |
311 tag->set_value(value); | |
312 } | |
313 else | |
314 { | |
315 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
316 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
317 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
318 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
319 virtual void AnswerExportedResource(int64_t seq, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
320 OrthancPluginResourceType resourceType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
321 const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
322 const std::string& modality, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
323 const std::string& date, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
324 const std::string& patientId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
325 const std::string& studyInstanceUid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
326 const std::string& seriesInstanceUid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
327 const std::string& sopInstanceUid) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
328 { |
377 | 329 Orthanc::DatabasePluginMessages::ExportedResource* resource; |
330 | |
376 | 331 if (getExportedResources_ != NULL) |
332 { | |
377 | 333 resource = getExportedResources_->add_resources(); |
334 } | |
335 else if (getLastExportedResource_ != NULL) | |
336 { | |
379 | 337 if (getLastExportedResource_->found()) |
377 | 338 { |
339 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
340 } | |
341 | |
379 | 342 getLastExportedResource_->set_found(true); |
377 | 343 resource = getLastExportedResource_->mutable_resource(); |
376 | 344 } |
345 else | |
346 { | |
347 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
348 } | |
377 | 349 |
350 resource->set_seq(seq); | |
351 resource->set_resource_type(Convert(resourceType)); | |
352 resource->set_public_id(publicId); | |
353 resource->set_modality(modality); | |
354 resource->set_date(date); | |
355 resource->set_patient_id(patientId); | |
356 resource->set_study_instance_uid(studyInstanceUid); | |
357 resource->set_series_instance_uid(seriesInstanceUid); | |
358 resource->set_sop_instance_uid(sopInstanceUid); | |
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 AnswerMatchingResource(const std::string& resourceId) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
362 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
363 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
364 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
365 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
366 virtual void AnswerMatchingResource(const std::string& resourceId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
367 const std::string& someInstanceId) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
368 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
369 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
370 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
371 }; |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
372 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
373 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
374 static void ProcessDatabaseOperation(Orthanc::DatabasePluginMessages::DatabaseResponse& response, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
375 const Orthanc::DatabasePluginMessages::DatabaseRequest& request, |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
376 IndexConnectionsPool& pool) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
377 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
378 switch (request.operation()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
379 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
380 case Orthanc::DatabasePluginMessages::OPERATION_GET_SYSTEM_INFORMATION: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
381 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
382 IndexConnectionsPool::Accessor accessor(pool); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
383 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
|
384 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
|
385 response.mutable_get_system_information()->set_supports_revisions(accessor.GetBackend().HasRevisionsSupport()); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
386 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
387 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
388 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
389 case Orthanc::DatabasePluginMessages::OPERATION_OPEN: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
390 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
391 pool.OpenConnections(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
392 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
393 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
394 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
395 case Orthanc::DatabasePluginMessages::OPERATION_CLOSE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
396 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
397 pool.CloseConnections(); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
398 break; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
399 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
400 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
401 case Orthanc::DatabasePluginMessages::OPERATION_FLUSH_TO_DISK: |
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 // Raise an exception since "set_supports_flush_to_disk(false)" |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
404 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
405 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
406 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
407 case Orthanc::DatabasePluginMessages::OPERATION_START_TRANSACTION: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
408 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
409 std::unique_ptr<IndexConnectionsPool::Accessor> transaction(new IndexConnectionsPool::Accessor(pool)); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
410 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
411 switch (request.start_transaction().type()) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
412 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
413 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_ONLY: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
414 transaction->GetManager().StartTransaction(TransactionType_ReadOnly); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
415 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
416 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
417 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_WRITE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
418 transaction->GetManager().StartTransaction(TransactionType_ReadWrite); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
419 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
420 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
421 default: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
422 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
423 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
424 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
425 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
|
426 break; |
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 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
429 case Orthanc::DatabasePluginMessages::OPERATION_UPGRADE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
430 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
431 IndexConnectionsPool::Accessor accessor(pool); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
432 OrthancPluginStorageArea* storageArea = reinterpret_cast<OrthancPluginStorageArea*>(request.upgrade().storage_area()); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
433 accessor.GetBackend().UpgradeDatabase(accessor.GetManager(), request.upgrade().target_version(), storageArea); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
434 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
435 } |
373
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 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
438 LOG(ERROR) << "Not implemented database operation from protobuf: " << request.operation(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
439 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
440 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
441 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
442 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
443 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
444 static void ProcessTransactionOperation(Orthanc::DatabasePluginMessages::TransactionResponse& response, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
445 const Orthanc::DatabasePluginMessages::TransactionRequest& request, |
377 | 446 IndexBackend& backend, |
447 DatabaseManager& manager) | |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
448 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
449 switch (request.operation()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
450 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
451 case Orthanc::DatabasePluginMessages::OPERATION_ROLLBACK: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
452 { |
377 | 453 manager.RollbackTransaction(); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
454 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
455 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
456 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
457 case Orthanc::DatabasePluginMessages::OPERATION_COMMIT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
458 { |
377 | 459 manager.CommitTransaction(); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
460 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
461 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
462 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
463 case Orthanc::DatabasePluginMessages::OPERATION_ADD_ATTACHMENT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
464 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
465 OrthancPluginAttachment attachment; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
466 attachment.uuid = request.add_attachment().attachment().uuid().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
467 attachment.contentType = request.add_attachment().attachment().content_type(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
468 attachment.uncompressedSize = request.add_attachment().attachment().uncompressed_size(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
469 attachment.uncompressedHash = request.add_attachment().attachment().uncompressed_hash().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
470 attachment.compressionType = request.add_attachment().attachment().compression_type(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
471 attachment.compressedSize = request.add_attachment().attachment().compressed_size(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
472 attachment.compressedHash = request.add_attachment().attachment().compressed_hash().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
473 |
377 | 474 backend.AddAttachment(manager, request.add_attachment().id(), attachment, request.add_attachment().revision()); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
475 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
476 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
477 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
478 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_CHANGES: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
479 { |
377 | 480 backend.ClearChanges(manager); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
481 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
482 } |
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 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_EXPORTED_RESOURCES: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
485 { |
377 | 486 backend.ClearExportedResources(manager); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
487 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
488 } |
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 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_ATTACHMENT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
491 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
492 Output output(*response.mutable_delete_attachment()); |
377 | 493 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
|
494 break; |
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 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
497 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_METADATA: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
498 { |
377 | 499 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
|
500 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
501 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
502 |
376 | 503 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_RESOURCE: |
504 { | |
505 response.mutable_delete_resource()->set_is_remaining_ancestor(false); | |
506 | |
507 Output output(*response.mutable_delete_resource()); | |
377 | 508 backend.DeleteResource(output, manager, request.delete_resource().id()); |
376 | 509 break; |
510 } | |
511 | |
512 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_METADATA: | |
513 { | |
514 typedef std::map<int32_t, std::string> Values; | |
515 | |
516 Values values; | |
377 | 517 backend.GetAllMetadata(values, manager, request.get_all_metadata().id()); |
376 | 518 |
519 for (Values::const_iterator it = values.begin(); it != values.end(); ++it) | |
520 { | |
377 | 521 Orthanc::DatabasePluginMessages::GetAllMetadata_Response_Metadata* metadata = |
522 response.mutable_get_all_metadata()->add_metadata(); | |
376 | 523 metadata->set_type(it->first); |
524 metadata->set_value(it->second); | |
525 } | |
526 | |
527 break; | |
528 } | |
529 | |
530 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS: | |
531 { | |
532 std::list<std::string> values; | |
377 | 533 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids().resource_type())); |
376 | 534 |
535 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) | |
536 { | |
537 response.mutable_get_all_public_ids()->add_ids(*it); | |
538 } | |
539 | |
540 break; | |
541 } | |
542 | |
543 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS_WITH_LIMITS: | |
544 { | |
545 std::list<std::string> values; | |
377 | 546 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids_with_limits().resource_type()), |
547 request.get_all_public_ids_with_limits().since(), | |
548 request.get_all_public_ids_with_limits().limit()); | |
376 | 549 |
550 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) | |
551 { | |
552 response.mutable_get_all_public_ids_with_limits()->add_ids(*it); | |
553 } | |
554 | |
555 break; | |
556 } | |
557 | |
558 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHANGES: | |
559 { | |
560 Output output(*response.mutable_get_changes()); | |
561 | |
562 bool done; | |
377 | 563 backend.GetChanges(output, done, manager, request.get_changes().since(), request.get_changes().limit()); |
376 | 564 |
565 response.mutable_get_changes()->set_done(done); | |
566 break; | |
567 } | |
568 | |
569 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID: | |
570 { | |
571 std::list<int64_t> values; | |
377 | 572 backend.GetChildrenInternalId(values, manager, request.get_children_internal_id().id()); |
376 | 573 |
574 for (std::list<int64_t>::const_iterator it = values.begin(); it != values.end(); ++it) | |
575 { | |
576 response.mutable_get_children_internal_id()->add_ids(*it); | |
577 } | |
578 | |
579 break; | |
580 } | |
581 | |
582 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID: | |
583 { | |
584 std::list<std::string> values; | |
377 | 585 backend.GetChildrenPublicId(values, manager, request.get_children_public_id().id()); |
376 | 586 |
587 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) | |
588 { | |
589 response.mutable_get_children_public_id()->add_ids(*it); | |
590 } | |
591 | |
592 break; | |
593 } | |
594 | |
595 case Orthanc::DatabasePluginMessages::OPERATION_GET_EXPORTED_RESOURCES: | |
596 { | |
597 Output output(*response.mutable_get_exported_resources()); | |
598 | |
599 bool done; | |
377 | 600 backend.GetExportedResources(output, done, manager, request.get_exported_resources().since(), |
601 request.get_exported_resources().limit()); | |
376 | 602 |
603 response.mutable_get_exported_resources()->set_done(done); | |
604 break; | |
605 } | |
606 | |
607 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_CHANGE: | |
608 { | |
379 | 609 response.mutable_get_last_change()->set_found(false); |
376 | 610 |
611 Output output(*response.mutable_get_last_change()); | |
377 | 612 backend.GetLastChange(output, manager); |
613 break; | |
614 } | |
615 | |
616 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_EXPORTED_RESOURCE: | |
617 { | |
379 | 618 response.mutable_get_last_exported_resource()->set_found(false); |
377 | 619 |
620 Output output(*response.mutable_get_last_exported_resource()); | |
621 backend.GetLastExportedResource(output, manager); | |
622 break; | |
623 } | |
624 | |
625 case Orthanc::DatabasePluginMessages::OPERATION_GET_MAIN_DICOM_TAGS: | |
626 { | |
627 Output output(*response.mutable_get_main_dicom_tags()); | |
628 backend.GetMainDicomTags(output, manager, request.get_main_dicom_tags().id()); | |
376 | 629 break; |
630 } | |
631 | |
377 | 632 case Orthanc::DatabasePluginMessages::OPERATION_GET_PUBLIC_ID: |
633 { | |
634 const std::string id = backend.GetPublicId(manager, request.get_public_id().id()); | |
635 response.mutable_get_public_id()->set_id(id); | |
636 break; | |
637 } | |
638 | |
639 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCES_COUNT: | |
640 { | |
641 OrthancPluginResourceType type = Convert(request.get_resources_count().type()); | |
642 uint64_t count = backend.GetResourcesCount(manager, type); | |
643 response.mutable_get_resources_count()->set_count(count); | |
644 break; | |
645 } | |
646 | |
647 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE: | |
648 { | |
649 OrthancPluginResourceType type = backend.GetResourceType(manager, request.get_public_id().id()); | |
650 response.mutable_get_resource_type()->set_type(Convert(type)); | |
651 break; | |
652 } | |
653 | |
654 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE: | |
655 { | |
656 response.mutable_get_total_compressed_size()->set_size(backend.GetTotalCompressedSize(manager)); | |
657 break; | |
658 } | |
659 | |
660 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_UNCOMPRESSED_SIZE: | |
661 { | |
662 response.mutable_get_total_uncompressed_size()->set_size(backend.GetTotalUncompressedSize(manager)); | |
663 break; | |
664 } | |
665 | |
378
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
666 case Orthanc::DatabasePluginMessages::OPERATION_IS_PROTECTED_PATIENT: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
667 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
668 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
|
669 response.mutable_is_protected_patient()->set_protected_patient(isProtected); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
670 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
671 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
672 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
673 case Orthanc::DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
674 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
675 std::list<int32_t> values; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
676 backend.ListAvailableAttachments(values, manager, request.list_available_attachments().id()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
677 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
678 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
|
679 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
680 response.mutable_list_available_attachments()->add_attachments(*it); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
681 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
682 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
683 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
684 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
685 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
686 case Orthanc::DatabasePluginMessages::OPERATION_LOG_CHANGE: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
687 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
688 backend.LogChange(manager, request.log_change().change_type(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
689 request.log_change().resource_id(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
690 Convert(request.log_change().resource_type()), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
691 request.log_change().date().c_str()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
692 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
693 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
694 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
695 case Orthanc::DatabasePluginMessages::OPERATION_LOG_EXPORTED_RESOURCE: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
696 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
697 backend.LogExportedResource(manager, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
698 Convert(request.log_exported_resource().resource_type()), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
699 request.log_exported_resource().public_id().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
700 request.log_exported_resource().modality().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
701 request.log_exported_resource().date().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
702 request.log_exported_resource().patient_id().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
703 request.log_exported_resource().study_instance_uid().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
704 request.log_exported_resource().series_instance_uid().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
705 request.log_exported_resource().sop_instance_uid().c_str()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
706 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
707 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
708 |
379 | 709 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_ATTACHMENT: |
710 { | |
711 Output output(*response.mutable_lookup_attachment()); | |
712 | |
713 int64_t revision = -1; | |
714 backend.LookupAttachment(output, revision, manager, request.lookup_attachment().id(), request.lookup_attachment().content_type()); | |
715 | |
716 if (response.lookup_attachment().found()) | |
717 { | |
718 response.mutable_lookup_attachment()->set_revision(revision); | |
719 } | |
720 | |
721 break; | |
722 } | |
723 | |
724 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_GLOBAL_PROPERTY: | |
725 { | |
726 std::string value; | |
727 if (backend.LookupGlobalProperty(value, manager, request.lookup_global_property().server_id().c_str(), | |
728 request.lookup_global_property().property())) | |
729 { | |
730 response.mutable_lookup_global_property()->set_found(true); | |
731 response.mutable_lookup_global_property()->set_value(value); | |
732 } | |
733 else | |
734 { | |
735 response.mutable_lookup_global_property()->set_found(false); | |
736 } | |
737 | |
738 break; | |
739 } | |
740 | |
741 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_METADATA: | |
742 { | |
743 std::string value; | |
744 int64_t revision = -1; | |
745 if (backend.LookupMetadata(value, revision, manager, request.lookup_metadata().id(), request.lookup_metadata().metadata_type())) | |
746 { | |
747 response.mutable_lookup_metadata()->set_found(true); | |
748 response.mutable_lookup_metadata()->set_value(value); | |
749 response.mutable_lookup_metadata()->set_revision(revision); | |
750 } | |
751 else | |
752 { | |
753 response.mutable_lookup_metadata()->set_found(false); | |
754 } | |
755 | |
756 break; | |
757 } | |
758 | |
759 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_PARENT: | |
760 { | |
761 int64_t parent = -1; | |
762 if (backend.LookupParent(parent, manager, request.lookup_parent().id())) | |
763 { | |
764 response.mutable_lookup_parent()->set_found(true); | |
765 response.mutable_lookup_parent()->set_parent(parent); | |
766 } | |
767 else | |
768 { | |
769 response.mutable_lookup_parent()->set_found(false); | |
770 } | |
771 | |
772 break; | |
773 } | |
774 | |
775 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_RESOURCE: | |
776 { | |
777 int64_t internalId = -1; | |
778 OrthancPluginResourceType type; | |
779 if (backend.LookupResource(internalId, type, manager, request.lookup_resource().public_id().c_str())) | |
780 { | |
781 response.mutable_lookup_resource()->set_found(true); | |
782 response.mutable_lookup_resource()->set_internal_id(internalId); | |
783 response.mutable_lookup_resource()->set_type(Convert(type)); | |
784 } | |
785 else | |
786 { | |
787 response.mutable_lookup_resource()->set_found(false); | |
788 } | |
789 | |
790 break; | |
791 } | |
792 | |
793 case Orthanc::DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE: | |
794 { | |
795 int64_t patientId = -1; | |
796 if (backend.SelectPatientToRecycle(patientId, manager)) | |
797 { | |
798 response.mutable_select_patient_to_recycle()->set_found(true); | |
799 response.mutable_select_patient_to_recycle()->set_patient_id(patientId); | |
800 } | |
801 else | |
802 { | |
803 response.mutable_select_patient_to_recycle()->set_found(false); | |
804 } | |
805 | |
806 break; | |
807 } | |
808 | |
809 case Orthanc::DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE_WITH_AVOID: | |
810 { | |
811 int64_t patientId = -1; | |
812 if (backend.SelectPatientToRecycle(patientId, manager, request.select_patient_to_recycle_with_avoid().patient_id_to_avoid())) | |
813 { | |
814 response.mutable_select_patient_to_recycle_with_avoid()->set_found(true); | |
815 response.mutable_select_patient_to_recycle_with_avoid()->set_patient_id(patientId); | |
816 } | |
817 else | |
818 { | |
819 response.mutable_select_patient_to_recycle_with_avoid()->set_found(false); | |
820 } | |
821 | |
822 break; | |
823 } | |
824 | |
825 case Orthanc::DatabasePluginMessages::OPERATION_SET_GLOBAL_PROPERTY: | |
826 { | |
827 backend.SetGlobalProperty(manager, request.set_global_property().server_id().c_str(), | |
828 request.set_global_property().property(), | |
829 request.set_global_property().value().c_str()); | |
830 break; | |
831 } | |
832 | |
833 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_MAIN_DICOM_TAGS: | |
834 { | |
835 backend.ClearMainDicomTags(manager, request.clear_main_dicom_tags().id()); | |
836 break; | |
837 } | |
838 | |
839 case Orthanc::DatabasePluginMessages::OPERATION_SET_METADATA: | |
840 { | |
841 backend.SetMetadata(manager, request.set_metadata().id(), | |
842 request.set_metadata().metadata_type(), | |
843 request.set_metadata().value().c_str(), | |
844 request.set_metadata().revision()); | |
845 break; | |
846 } | |
847 | |
848 case Orthanc::DatabasePluginMessages::OPERATION_SET_PROTECTED_PATIENT: | |
849 { | |
850 backend.SetProtectedPatient(manager, request.set_protected_patient().patient_id(), | |
851 request.set_protected_patient().protected_patient()); | |
852 break; | |
853 } | |
854 | |
855 case Orthanc::DatabasePluginMessages::OPERATION_IS_DISK_SIZE_ABOVE: | |
856 { | |
857 bool above = (backend.GetTotalCompressedSize(manager) >= request.is_disk_size_above().threshold()); | |
858 response.mutable_is_disk_size_above()->set_result(above); | |
859 break; | |
860 } | |
861 | |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
862 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
863 LOG(ERROR) << "Not implemented transaction operation from protobuf: " << request.operation(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
864 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
865 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
866 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
867 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
868 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
869 static OrthancPluginErrorCode CallBackend(OrthancPluginMemoryBuffer64* serializedResponse, |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
870 void* rawPool, |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
871 const void* requestData, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
872 uint64_t requestSize) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
873 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
874 Orthanc::DatabasePluginMessages::Request request; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
875 if (!request.ParseFromArray(requestData, requestSize)) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
876 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
877 LOG(ERROR) << "Cannot parse message from the Orthanc core using protobuf"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
878 return OrthancPluginErrorCode_InternalError; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
879 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
880 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
881 if (rawPool == NULL) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
882 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
883 LOG(ERROR) << "Received a NULL pointer from the database"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
884 return OrthancPluginErrorCode_InternalError; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
885 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
886 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
887 IndexConnectionsPool& pool = *reinterpret_cast<IndexConnectionsPool*>(rawPool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
888 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
889 try |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
890 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
891 Orthanc::DatabasePluginMessages::Response response; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
892 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
893 switch (request.type()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
894 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
895 case Orthanc::DatabasePluginMessages::REQUEST_DATABASE: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
896 ProcessDatabaseOperation(*response.mutable_database_response(), request.database_request(), pool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
897 break; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
898 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
899 case Orthanc::DatabasePluginMessages::REQUEST_TRANSACTION: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
900 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
901 IndexConnectionsPool::Accessor& transaction = *reinterpret_cast<IndexConnectionsPool::Accessor*>(request.transaction_request().transaction()); |
377 | 902 ProcessTransactionOperation(*response.mutable_transaction_response(), request.transaction_request(), |
903 transaction.GetBackend(), transaction.GetManager()); | |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
904 break; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
905 } |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
906 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
907 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
908 LOG(ERROR) << "Not implemented request type from protobuf: " << request.type(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
909 break; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
910 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
911 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
912 std::string s; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
913 if (!response.SerializeToString(&s)) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
914 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
915 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Cannot serialize to protobuf"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
916 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
917 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
918 if (OrthancPluginCreateMemoryBuffer64(pool.GetContext(), serializedResponse, s.size()) != OrthancPluginErrorCode_Success) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
919 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
920 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotEnoughMemory, "Cannot allocate a memory buffer"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
921 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
922 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
923 if (!s.empty()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
924 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
925 assert(serializedResponse->size == s.size()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
926 memcpy(serializedResponse->data, s.c_str(), s.size()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
927 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
928 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
929 return OrthancPluginErrorCode_Success; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
930 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
931 catch (::Orthanc::OrthancException& e) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
932 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
933 LOG(ERROR) << "Exception in database back-end: " << e.What(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
934 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
935 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
936 catch (::std::runtime_error& e) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
937 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
938 LOG(ERROR) << "Exception in database back-end: " << e.what(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
939 return OrthancPluginErrorCode_DatabasePlugin; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
940 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
941 catch (...) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
942 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
943 LOG(ERROR) << "Native exception"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
944 return OrthancPluginErrorCode_DatabasePlugin; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
945 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
946 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
947 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
948 static void FinalizeBackend(void* rawPool) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
949 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
950 if (rawPool != NULL) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
951 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
952 IndexConnectionsPool* pool = reinterpret_cast<IndexConnectionsPool*>(rawPool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
953 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
954 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
955 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
956 isBackendInUse_ = false; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
957 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
958 else |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
959 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
960 LOG(ERROR) << "More than one index backend was registered, internal error"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
961 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
962 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
963 delete pool; |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
964 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
965 else |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
966 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
967 LOG(ERROR) << "Received a null pointer from the Orthanc core, internal error"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
968 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
969 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
970 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
971 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
972 void DatabaseBackendAdapterV4::Register(IndexBackend* backend, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
973 size_t countConnections, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
974 unsigned int maxDatabaseRetries) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
975 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
976 std::unique_ptr<IndexConnectionsPool> pool(new IndexConnectionsPool(backend, countConnections)); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
977 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
978 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
979 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
980 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
981 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
982 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
983 OrthancPluginContext* context = backend->GetContext(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
984 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
985 if (OrthancPluginRegisterDatabaseBackendV4(context, pool.release(), maxDatabaseRetries, |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
986 CallBackend, FinalizeBackend) != OrthancPluginErrorCode_Success) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
987 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
988 delete backend; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
989 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Unable to register the database backend"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
990 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
991 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
992 isBackendInUse_ = true; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
993 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
994 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
995 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
996 void DatabaseBackendAdapterV4::Finalize() |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
997 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
998 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
999 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1000 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
|
1001 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1002 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1003 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1004 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1005 # endif |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1006 #endif |