Mercurial > hg > orthanc-databases
annotate Framework/Plugins/DatabaseBackendAdapterV4.cpp @ 400:897253c21208 db-protobuf
support for labels in mysql
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 07 Apr 2023 15:43:42 +0200 |
parents | 7b3acfa95bd8 |
children | a8774581adfc |
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 |
389
3d6886f3e5b3
upgrade to year 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
3d6886f3e5b3
upgrade to year 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
384
diff
changeset
|
6 * Copyright (C) 2021-2023 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
373
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_; |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
104 Orthanc::DatabasePluginMessages::LookupResources::Response* lookupResources_; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
105 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
106 void Clear() |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
107 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
108 deleteAttachment_ = NULL; |
376 | 109 deleteResource_ = NULL; |
110 getChanges_ = NULL; | |
111 getExportedResources_ = NULL; | |
112 getLastChange_ = NULL; | |
377 | 113 getLastExportedResource_ = NULL; |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
114 getMainDicomTags_ = NULL; |
379 | 115 lookupAttachment_ = NULL; |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
116 lookupResources_ = NULL; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
117 } |
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 public: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
120 Output(Orthanc::DatabasePluginMessages::DeleteAttachment::Response& 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 Clear(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
123 deleteAttachment_ = &deleteAttachment; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
124 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
125 |
376 | 126 Output(Orthanc::DatabasePluginMessages::DeleteResource::Response& deleteResource) |
127 { | |
128 Clear(); | |
129 deleteResource_ = &deleteResource; | |
130 } | |
131 | |
132 Output(Orthanc::DatabasePluginMessages::GetChanges::Response& getChanges) | |
133 { | |
134 Clear(); | |
135 getChanges_ = &getChanges; | |
136 } | |
137 | |
138 Output(Orthanc::DatabasePluginMessages::GetExportedResources::Response& getExportedResources) | |
139 { | |
140 Clear(); | |
141 getExportedResources_ = &getExportedResources; | |
142 } | |
143 | |
144 Output(Orthanc::DatabasePluginMessages::GetLastChange::Response& getLastChange) | |
145 { | |
146 Clear(); | |
147 getLastChange_ = &getLastChange; | |
148 } | |
149 | |
377 | 150 Output(Orthanc::DatabasePluginMessages::GetLastExportedResource::Response& getLastExportedResource) |
151 { | |
152 Clear(); | |
153 getLastExportedResource_ = &getLastExportedResource; | |
154 } | |
155 | |
156 Output(Orthanc::DatabasePluginMessages::GetMainDicomTags::Response& getMainDicomTags) | |
157 { | |
158 Clear(); | |
159 getMainDicomTags_ = &getMainDicomTags; | |
160 } | |
161 | |
379 | 162 Output(Orthanc::DatabasePluginMessages::LookupAttachment::Response& lookupAttachment) |
163 { | |
164 Clear(); | |
165 lookupAttachment_ = &lookupAttachment; | |
166 } | |
167 | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
168 Output(Orthanc::DatabasePluginMessages::LookupResources::Response& lookupResources) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
169 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
170 Clear(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
171 lookupResources_ = &lookupResources; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
172 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
173 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
174 virtual void SignalDeletedAttachment(const std::string& uuid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
175 int32_t contentType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
176 uint64_t uncompressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
177 const std::string& uncompressedHash, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
178 int32_t compressionType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
179 uint64_t compressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
180 const std::string& compressedHash) ORTHANC_OVERRIDE |
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 Orthanc::DatabasePluginMessages::FileInfo* attachment; |
376 | 183 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
184 if (deleteAttachment_ != NULL) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
185 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
186 if (deleteAttachment_->has_deleted_attachment()) |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
187 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
188 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
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 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
191 attachment = deleteAttachment_->mutable_deleted_attachment(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
192 } |
376 | 193 else if (deleteResource_ != NULL) |
194 { | |
195 attachment = deleteResource_->add_deleted_attachments(); | |
196 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
197 else |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
198 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
199 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
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 attachment->set_uuid(uuid); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
203 attachment->set_content_type(contentType); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
204 attachment->set_uncompressed_size(uncompressedSize); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
205 attachment->set_uncompressed_hash(uncompressedHash); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
206 attachment->set_compression_type(compressionType); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
207 attachment->set_compressed_size(compressedSize); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
208 attachment->set_compressed_hash(compressedHash); |
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 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
211 virtual void SignalDeletedResource(const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
212 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
213 { |
376 | 214 if (deleteResource_ != NULL) |
215 { | |
216 Orthanc::DatabasePluginMessages::DeleteResource_Response_Resource* resource = deleteResource_->add_deleted_resources(); | |
217 resource->set_level(Convert(resourceType)); | |
218 resource->set_public_id(publicId); | |
219 } | |
220 else | |
221 { | |
222 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
223 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
224 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
225 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
226 virtual void SignalRemainingAncestor(const std::string& ancestorId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
227 OrthancPluginResourceType ancestorType) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
228 { |
376 | 229 if (deleteResource_ != NULL) |
230 { | |
231 if (deleteResource_->is_remaining_ancestor()) | |
232 { | |
233 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
234 } | |
235 else | |
236 { | |
237 deleteResource_->set_is_remaining_ancestor(true); | |
238 deleteResource_->mutable_remaining_ancestor()->set_level(Convert(ancestorType)); | |
239 deleteResource_->mutable_remaining_ancestor()->set_public_id(ancestorId); | |
240 } | |
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 AnswerAttachment(const std::string& uuid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
249 int32_t contentType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
250 uint64_t uncompressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
251 const std::string& uncompressedHash, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
252 int32_t compressionType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
253 uint64_t compressedSize, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
254 const std::string& compressedHash) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
255 { |
379 | 256 if (lookupAttachment_ != NULL) |
257 { | |
258 if (lookupAttachment_->found()) | |
259 { | |
260 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
261 } | |
262 | |
263 lookupAttachment_->set_found(true); | |
264 lookupAttachment_->mutable_attachment()->set_uuid(uuid); | |
265 lookupAttachment_->mutable_attachment()->set_content_type(contentType); | |
266 lookupAttachment_->mutable_attachment()->set_uncompressed_size(uncompressedSize); | |
267 lookupAttachment_->mutable_attachment()->set_uncompressed_hash(uncompressedHash); | |
268 lookupAttachment_->mutable_attachment()->set_compression_type(compressionType); | |
269 lookupAttachment_->mutable_attachment()->set_compressed_size(compressedSize); | |
270 lookupAttachment_->mutable_attachment()->set_compressed_hash(compressedHash); | |
271 } | |
272 else | |
273 { | |
274 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
275 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
276 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
277 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
278 virtual void AnswerChange(int64_t seq, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
279 int32_t changeType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
280 OrthancPluginResourceType resourceType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
281 const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
282 const std::string& date) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
283 { |
376 | 284 Orthanc::DatabasePluginMessages::ServerIndexChange* change; |
285 | |
286 if (getChanges_ != NULL) | |
287 { | |
288 change = getChanges_->add_changes(); | |
289 } | |
290 else if (getLastChange_ != NULL) | |
291 { | |
379 | 292 if (getLastChange_->found()) |
376 | 293 { |
294 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
295 } | |
296 | |
379 | 297 getLastChange_->set_found(true); |
376 | 298 change = getLastChange_->mutable_change(); |
299 } | |
300 else | |
301 { | |
302 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
303 } | |
304 | |
305 change->set_seq(seq); | |
306 change->set_change_type(changeType); | |
307 change->set_resource_type(Convert(resourceType)); | |
308 change->set_public_id(publicId); | |
309 change->set_date(date); | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
310 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
311 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
312 virtual void AnswerDicomTag(uint16_t group, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
313 uint16_t element, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
314 const std::string& value) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
315 { |
377 | 316 if (getMainDicomTags_ != NULL) |
317 { | |
318 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
|
319 tag->set_group(group); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
320 tag->set_element(element); |
377 | 321 tag->set_value(value); |
322 } | |
323 else | |
324 { | |
325 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
326 } | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
327 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
328 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
329 virtual void AnswerExportedResource(int64_t seq, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
330 OrthancPluginResourceType resourceType, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
331 const std::string& publicId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
332 const std::string& modality, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
333 const std::string& date, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
334 const std::string& patientId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
335 const std::string& studyInstanceUid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
336 const std::string& seriesInstanceUid, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
337 const std::string& sopInstanceUid) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
338 { |
377 | 339 Orthanc::DatabasePluginMessages::ExportedResource* resource; |
340 | |
376 | 341 if (getExportedResources_ != NULL) |
342 { | |
377 | 343 resource = getExportedResources_->add_resources(); |
344 } | |
345 else if (getLastExportedResource_ != NULL) | |
346 { | |
379 | 347 if (getLastExportedResource_->found()) |
377 | 348 { |
349 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
350 } | |
351 | |
379 | 352 getLastExportedResource_->set_found(true); |
377 | 353 resource = getLastExportedResource_->mutable_resource(); |
376 | 354 } |
355 else | |
356 { | |
357 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
358 } | |
377 | 359 |
360 resource->set_seq(seq); | |
361 resource->set_resource_type(Convert(resourceType)); | |
362 resource->set_public_id(publicId); | |
363 resource->set_modality(modality); | |
364 resource->set_date(date); | |
365 resource->set_patient_id(patientId); | |
366 resource->set_study_instance_uid(studyInstanceUid); | |
367 resource->set_series_instance_uid(seriesInstanceUid); | |
368 resource->set_sop_instance_uid(sopInstanceUid); | |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
369 } |
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 virtual void AnswerMatchingResource(const std::string& resourceId) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
372 { |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
373 if (lookupResources_ != NULL) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
374 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
375 lookupResources_->add_resources_ids(resourceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
376 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
377 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
378 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
379 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
380 } |
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 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
383 virtual void AnswerMatchingResource(const std::string& resourceId, |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
384 const std::string& someInstanceId) ORTHANC_OVERRIDE |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
385 { |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
386 if (lookupResources_ != NULL) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
387 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
388 lookupResources_->add_resources_ids(resourceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
389 lookupResources_->add_instances_ids(someInstanceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
390 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
391 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
392 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
393 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
394 } |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
395 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
396 }; |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
397 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
398 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
399 static void ProcessDatabaseOperation(Orthanc::DatabasePluginMessages::DatabaseResponse& response, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
400 const Orthanc::DatabasePluginMessages::DatabaseRequest& request, |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
401 IndexConnectionsPool& pool) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
402 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
403 switch (request.operation()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
404 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
405 case Orthanc::DatabasePluginMessages::OPERATION_GET_SYSTEM_INFORMATION: |
375
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 IndexConnectionsPool::Accessor accessor(pool); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
408 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
|
409 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
|
410 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
|
411 response.mutable_get_system_information()->set_supports_labels(accessor.GetBackend().HasLabelsSupport()); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
412 break; |
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 case Orthanc::DatabasePluginMessages::OPERATION_OPEN: |
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 pool.OpenConnections(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
418 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
419 } |
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 case Orthanc::DatabasePluginMessages::OPERATION_CLOSE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
422 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
423 pool.CloseConnections(); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
424 break; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
425 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
426 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
427 case Orthanc::DatabasePluginMessages::OPERATION_FLUSH_TO_DISK: |
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 // Raise an exception since "set_supports_flush_to_disk(false)" |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
430 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
431 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
432 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
433 case Orthanc::DatabasePluginMessages::OPERATION_START_TRANSACTION: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
434 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
435 std::unique_ptr<IndexConnectionsPool::Accessor> transaction(new IndexConnectionsPool::Accessor(pool)); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
436 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
437 switch (request.start_transaction().type()) |
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 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_ONLY: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
440 transaction->GetManager().StartTransaction(TransactionType_ReadOnly); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
441 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
442 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
443 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_WRITE: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
444 transaction->GetManager().StartTransaction(TransactionType_ReadWrite); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
445 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
446 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
447 default: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
448 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
449 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
450 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
451 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
|
452 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
453 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
454 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
455 case Orthanc::DatabasePluginMessages::OPERATION_UPGRADE: |
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 IndexConnectionsPool::Accessor accessor(pool); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
458 OrthancPluginStorageArea* storageArea = reinterpret_cast<OrthancPluginStorageArea*>(request.upgrade().storage_area()); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
459 accessor.GetBackend().UpgradeDatabase(accessor.GetManager(), request.upgrade().target_version(), storageArea); |
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 } |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
462 |
382
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
463 case Orthanc::DatabasePluginMessages::OPERATION_FINALIZE_TRANSACTION: |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
464 { |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
465 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
|
466 |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
467 if (transaction == NULL) |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
468 { |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
469 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
470 } |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
471 else |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
472 { |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
473 delete transaction; |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
474 } |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
475 |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
476 break; |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
477 } |
97f12bcd1826
implemented finalize_transaction()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
380
diff
changeset
|
478 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
479 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
480 LOG(ERROR) << "Not implemented database operation from protobuf: " << request.operation(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
481 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
482 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
483 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
484 |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
485 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
486 static void ApplyLookupResources(Orthanc::DatabasePluginMessages::LookupResources_Response& response, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
487 const Orthanc::DatabasePluginMessages::LookupResources_Request& request, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
488 IndexBackend& backend, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
489 DatabaseManager& manager) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
490 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
491 std::vector<Orthanc::DatabaseConstraint> lookup; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
492 lookup.reserve(request.lookup().size()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
493 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
494 size_t countValues = 0; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
495 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
496 for (int i = 0; i < request.lookup().size(); i++) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
497 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
498 const Orthanc::DatabasePluginMessages::DatabaseConstraint& constraint = request.lookup(i); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
499 countValues += constraint.values().size(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
500 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
501 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
502 std::vector<const char*> values; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
503 values.reserve(countValues); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
504 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
505 for (int i = 0; i < request.lookup().size(); i++) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
506 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
507 const Orthanc::DatabasePluginMessages::DatabaseConstraint& constraint = request.lookup(i); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
508 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
509 if (constraint.tag_group() > 0xffffu || |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
510 constraint.tag_element() > 0xffffu) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
511 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
512 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
513 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
514 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
515 OrthancPluginDatabaseConstraint c; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
516 c.level = Convert(constraint.level()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
517 c.tagGroup = constraint.tag_group(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
518 c.tagElement = constraint.tag_element(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
519 c.isIdentifierTag = (constraint.is_identifier_tag() ? 1 : 0); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
520 c.isCaseSensitive = (constraint.is_case_sensitive() ? 1 : 0); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
521 c.isMandatory = (constraint.is_mandatory() ? 1 : 0); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
522 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
523 switch (constraint.type()) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
524 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
525 case Orthanc::DatabasePluginMessages::CONSTRAINT_EQUAL: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
526 c.type = OrthancPluginConstraintType_Equal; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
527 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
528 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
529 case Orthanc::DatabasePluginMessages::CONSTRAINT_SMALLER_OR_EQUAL: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
530 c.type = OrthancPluginConstraintType_SmallerOrEqual; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
531 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
532 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
533 case Orthanc::DatabasePluginMessages::CONSTRAINT_GREATER_OR_EQUAL: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
534 c.type = OrthancPluginConstraintType_GreaterOrEqual; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
535 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
536 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
537 case Orthanc::DatabasePluginMessages::CONSTRAINT_WILDCARD: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
538 c.type = OrthancPluginConstraintType_Wildcard; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
539 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
540 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
541 case Orthanc::DatabasePluginMessages::CONSTRAINT_LIST: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
542 c.type = OrthancPluginConstraintType_List; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
543 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
544 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
545 default: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
546 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
547 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
548 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
549 c.valuesCount = constraint.values().size(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
550 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
551 if (c.valuesCount == 0) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
552 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
553 c.values = NULL; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
554 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
555 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
556 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
557 c.values = &values[values.size()]; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
558 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
559 for (int j = 0; j < constraint.values().size(); j++) |
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 assert(values.size() < countValues); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
562 values.push_back(constraint.values(j).c_str()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
563 } |
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 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
566 lookup.push_back(Orthanc::DatabaseConstraint(c)); |
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 assert(values.size() == countValues); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
570 |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
571 std::set<std::string> withLabels, withoutLabels; |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
572 |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
573 for (int i = 0; i < request.with_labels().size(); i++) |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
574 { |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
575 withLabels.insert(request.with_labels(i)); |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
576 } |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
577 |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
578 for (int i = 0; i < request.without_labels().size(); i++) |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
579 { |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
580 withoutLabels.insert(request.without_labels(i)); |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
581 } |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
582 |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
583 Output output(response); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
584 backend.LookupResources(output, manager, lookup, Convert(request.query_level()), |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
585 withLabels, withoutLabels, request.limit(), request.retrieve_instances_ids()); |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
586 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
587 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
588 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
589 static void ProcessTransactionOperation(Orthanc::DatabasePluginMessages::TransactionResponse& response, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
590 const Orthanc::DatabasePluginMessages::TransactionRequest& request, |
377 | 591 IndexBackend& backend, |
592 DatabaseManager& manager) | |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
593 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
594 switch (request.operation()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
595 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
596 case Orthanc::DatabasePluginMessages::OPERATION_ROLLBACK: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
597 { |
377 | 598 manager.RollbackTransaction(); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
599 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
600 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
601 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
602 case Orthanc::DatabasePluginMessages::OPERATION_COMMIT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
603 { |
377 | 604 manager.CommitTransaction(); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
605 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
606 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
607 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
608 case Orthanc::DatabasePluginMessages::OPERATION_ADD_ATTACHMENT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
609 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
610 OrthancPluginAttachment attachment; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
611 attachment.uuid = request.add_attachment().attachment().uuid().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
612 attachment.contentType = request.add_attachment().attachment().content_type(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
613 attachment.uncompressedSize = request.add_attachment().attachment().uncompressed_size(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
614 attachment.uncompressedHash = request.add_attachment().attachment().uncompressed_hash().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
615 attachment.compressionType = request.add_attachment().attachment().compression_type(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
616 attachment.compressedSize = request.add_attachment().attachment().compressed_size(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
617 attachment.compressedHash = request.add_attachment().attachment().compressed_hash().c_str(); |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
618 |
377 | 619 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
|
620 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
621 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
622 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
623 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_CHANGES: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
624 { |
377 | 625 backend.ClearChanges(manager); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
626 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
627 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
628 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
629 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_EXPORTED_RESOURCES: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
630 { |
377 | 631 backend.ClearExportedResources(manager); |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
632 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
633 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
634 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
635 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_ATTACHMENT: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
636 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
637 Output output(*response.mutable_delete_attachment()); |
377 | 638 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
|
639 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
640 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
641 |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
642 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_METADATA: |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
643 { |
377 | 644 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
|
645 break; |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
646 } |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
647 |
376 | 648 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_RESOURCE: |
649 { | |
650 response.mutable_delete_resource()->set_is_remaining_ancestor(false); | |
651 | |
652 Output output(*response.mutable_delete_resource()); | |
377 | 653 backend.DeleteResource(output, manager, request.delete_resource().id()); |
376 | 654 break; |
655 } | |
656 | |
657 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_METADATA: | |
658 { | |
659 typedef std::map<int32_t, std::string> Values; | |
660 | |
661 Values values; | |
377 | 662 backend.GetAllMetadata(values, manager, request.get_all_metadata().id()); |
376 | 663 |
384 | 664 response.mutable_get_all_metadata()->mutable_metadata()->Reserve(values.size()); |
376 | 665 for (Values::const_iterator it = values.begin(); it != values.end(); ++it) |
666 { | |
377 | 667 Orthanc::DatabasePluginMessages::GetAllMetadata_Response_Metadata* metadata = |
668 response.mutable_get_all_metadata()->add_metadata(); | |
376 | 669 metadata->set_type(it->first); |
670 metadata->set_value(it->second); | |
671 } | |
672 | |
673 break; | |
674 } | |
675 | |
676 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS: | |
677 { | |
678 std::list<std::string> values; | |
377 | 679 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids().resource_type())); |
376 | 680 |
384 | 681 response.mutable_get_all_public_ids()->mutable_ids()->Reserve(values.size()); |
376 | 682 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) |
683 { | |
684 response.mutable_get_all_public_ids()->add_ids(*it); | |
685 } | |
686 | |
687 break; | |
688 } | |
689 | |
690 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS_WITH_LIMITS: | |
691 { | |
692 std::list<std::string> values; | |
377 | 693 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids_with_limits().resource_type()), |
694 request.get_all_public_ids_with_limits().since(), | |
695 request.get_all_public_ids_with_limits().limit()); | |
376 | 696 |
384 | 697 response.mutable_get_all_public_ids_with_limits()->mutable_ids()->Reserve(values.size()); |
376 | 698 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) |
699 { | |
700 response.mutable_get_all_public_ids_with_limits()->add_ids(*it); | |
701 } | |
702 | |
703 break; | |
704 } | |
705 | |
706 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHANGES: | |
707 { | |
708 Output output(*response.mutable_get_changes()); | |
709 | |
710 bool done; | |
377 | 711 backend.GetChanges(output, done, manager, request.get_changes().since(), request.get_changes().limit()); |
376 | 712 |
713 response.mutable_get_changes()->set_done(done); | |
714 break; | |
715 } | |
716 | |
717 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID: | |
718 { | |
719 std::list<int64_t> values; | |
377 | 720 backend.GetChildrenInternalId(values, manager, request.get_children_internal_id().id()); |
376 | 721 |
384 | 722 response.mutable_get_children_internal_id()->mutable_ids()->Reserve(values.size()); |
376 | 723 for (std::list<int64_t>::const_iterator it = values.begin(); it != values.end(); ++it) |
724 { | |
725 response.mutable_get_children_internal_id()->add_ids(*it); | |
726 } | |
727 | |
728 break; | |
729 } | |
730 | |
731 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID: | |
732 { | |
733 std::list<std::string> values; | |
377 | 734 backend.GetChildrenPublicId(values, manager, request.get_children_public_id().id()); |
376 | 735 |
384 | 736 response.mutable_get_children_public_id()->mutable_ids()->Reserve(values.size()); |
376 | 737 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) |
738 { | |
739 response.mutable_get_children_public_id()->add_ids(*it); | |
740 } | |
741 | |
742 break; | |
743 } | |
744 | |
745 case Orthanc::DatabasePluginMessages::OPERATION_GET_EXPORTED_RESOURCES: | |
746 { | |
747 Output output(*response.mutable_get_exported_resources()); | |
748 | |
749 bool done; | |
377 | 750 backend.GetExportedResources(output, done, manager, request.get_exported_resources().since(), |
751 request.get_exported_resources().limit()); | |
376 | 752 |
753 response.mutable_get_exported_resources()->set_done(done); | |
754 break; | |
755 } | |
756 | |
757 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_CHANGE: | |
758 { | |
379 | 759 response.mutable_get_last_change()->set_found(false); |
376 | 760 |
761 Output output(*response.mutable_get_last_change()); | |
377 | 762 backend.GetLastChange(output, manager); |
763 break; | |
764 } | |
765 | |
766 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_EXPORTED_RESOURCE: | |
767 { | |
379 | 768 response.mutable_get_last_exported_resource()->set_found(false); |
377 | 769 |
770 Output output(*response.mutable_get_last_exported_resource()); | |
771 backend.GetLastExportedResource(output, manager); | |
772 break; | |
773 } | |
774 | |
775 case Orthanc::DatabasePluginMessages::OPERATION_GET_MAIN_DICOM_TAGS: | |
776 { | |
777 Output output(*response.mutable_get_main_dicom_tags()); | |
778 backend.GetMainDicomTags(output, manager, request.get_main_dicom_tags().id()); | |
376 | 779 break; |
780 } | |
781 | |
377 | 782 case Orthanc::DatabasePluginMessages::OPERATION_GET_PUBLIC_ID: |
783 { | |
784 const std::string id = backend.GetPublicId(manager, request.get_public_id().id()); | |
785 response.mutable_get_public_id()->set_id(id); | |
786 break; | |
787 } | |
788 | |
789 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCES_COUNT: | |
790 { | |
791 OrthancPluginResourceType type = Convert(request.get_resources_count().type()); | |
792 uint64_t count = backend.GetResourcesCount(manager, type); | |
793 response.mutable_get_resources_count()->set_count(count); | |
794 break; | |
795 } | |
796 | |
797 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE: | |
798 { | |
384 | 799 OrthancPluginResourceType type = backend.GetResourceType(manager, request.get_resource_type().id()); |
377 | 800 response.mutable_get_resource_type()->set_type(Convert(type)); |
801 break; | |
802 } | |
803 | |
804 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE: | |
805 { | |
806 response.mutable_get_total_compressed_size()->set_size(backend.GetTotalCompressedSize(manager)); | |
807 break; | |
808 } | |
809 | |
810 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_UNCOMPRESSED_SIZE: | |
811 { | |
812 response.mutable_get_total_uncompressed_size()->set_size(backend.GetTotalUncompressedSize(manager)); | |
813 break; | |
814 } | |
815 | |
378
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
816 case Orthanc::DatabasePluginMessages::OPERATION_IS_PROTECTED_PATIENT: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
817 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
818 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
|
819 response.mutable_is_protected_patient()->set_protected_patient(isProtected); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
820 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
821 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
822 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
823 case Orthanc::DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
824 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
825 std::list<int32_t> values; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
826 backend.ListAvailableAttachments(values, manager, request.list_available_attachments().id()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
827 |
384 | 828 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
|
829 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
|
830 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
831 response.mutable_list_available_attachments()->add_attachments(*it); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
832 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
833 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
834 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
835 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
836 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
837 case Orthanc::DatabasePluginMessages::OPERATION_LOG_CHANGE: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
838 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
839 backend.LogChange(manager, request.log_change().change_type(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
840 request.log_change().resource_id(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
841 Convert(request.log_change().resource_type()), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
842 request.log_change().date().c_str()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
843 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
844 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
845 |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
846 case Orthanc::DatabasePluginMessages::OPERATION_LOG_EXPORTED_RESOURCE: |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
847 { |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
848 backend.LogExportedResource(manager, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
849 Convert(request.log_exported_resource().resource_type()), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
850 request.log_exported_resource().public_id().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
851 request.log_exported_resource().modality().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
852 request.log_exported_resource().date().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
853 request.log_exported_resource().patient_id().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
854 request.log_exported_resource().study_instance_uid().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
855 request.log_exported_resource().series_instance_uid().c_str(), |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
856 request.log_exported_resource().sop_instance_uid().c_str()); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
857 break; |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
858 } |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
377
diff
changeset
|
859 |
379 | 860 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_ATTACHMENT: |
861 { | |
862 Output output(*response.mutable_lookup_attachment()); | |
863 | |
864 int64_t revision = -1; | |
865 backend.LookupAttachment(output, revision, manager, request.lookup_attachment().id(), request.lookup_attachment().content_type()); | |
866 | |
867 if (response.lookup_attachment().found()) | |
868 { | |
869 response.mutable_lookup_attachment()->set_revision(revision); | |
870 } | |
871 | |
872 break; | |
873 } | |
874 | |
875 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_GLOBAL_PROPERTY: | |
876 { | |
877 std::string value; | |
878 if (backend.LookupGlobalProperty(value, manager, request.lookup_global_property().server_id().c_str(), | |
879 request.lookup_global_property().property())) | |
880 { | |
881 response.mutable_lookup_global_property()->set_found(true); | |
882 response.mutable_lookup_global_property()->set_value(value); | |
883 } | |
884 else | |
885 { | |
886 response.mutable_lookup_global_property()->set_found(false); | |
887 } | |
888 | |
889 break; | |
890 } | |
891 | |
892 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_METADATA: | |
893 { | |
894 std::string value; | |
895 int64_t revision = -1; | |
896 if (backend.LookupMetadata(value, revision, manager, request.lookup_metadata().id(), request.lookup_metadata().metadata_type())) | |
897 { | |
898 response.mutable_lookup_metadata()->set_found(true); | |
899 response.mutable_lookup_metadata()->set_value(value); | |
900 response.mutable_lookup_metadata()->set_revision(revision); | |
901 } | |
902 else | |
903 { | |
904 response.mutable_lookup_metadata()->set_found(false); | |
905 } | |
906 | |
907 break; | |
908 } | |
909 | |
910 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_PARENT: | |
911 { | |
912 int64_t parent = -1; | |
913 if (backend.LookupParent(parent, manager, request.lookup_parent().id())) | |
914 { | |
915 response.mutable_lookup_parent()->set_found(true); | |
916 response.mutable_lookup_parent()->set_parent(parent); | |
917 } | |
918 else | |
919 { | |
920 response.mutable_lookup_parent()->set_found(false); | |
921 } | |
922 | |
923 break; | |
924 } | |
925 | |
926 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_RESOURCE: | |
927 { | |
928 int64_t internalId = -1; | |
929 OrthancPluginResourceType type; | |
930 if (backend.LookupResource(internalId, type, manager, request.lookup_resource().public_id().c_str())) | |
931 { | |
932 response.mutable_lookup_resource()->set_found(true); | |
933 response.mutable_lookup_resource()->set_internal_id(internalId); | |
934 response.mutable_lookup_resource()->set_type(Convert(type)); | |
935 } | |
936 else | |
937 { | |
938 response.mutable_lookup_resource()->set_found(false); | |
939 } | |
940 | |
941 break; | |
942 } | |
943 | |
944 case Orthanc::DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE: | |
945 { | |
946 int64_t patientId = -1; | |
947 if (backend.SelectPatientToRecycle(patientId, manager)) | |
948 { | |
949 response.mutable_select_patient_to_recycle()->set_found(true); | |
950 response.mutable_select_patient_to_recycle()->set_patient_id(patientId); | |
951 } | |
952 else | |
953 { | |
954 response.mutable_select_patient_to_recycle()->set_found(false); | |
955 } | |
956 | |
957 break; | |
958 } | |
959 | |
960 case Orthanc::DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE_WITH_AVOID: | |
961 { | |
962 int64_t patientId = -1; | |
963 if (backend.SelectPatientToRecycle(patientId, manager, request.select_patient_to_recycle_with_avoid().patient_id_to_avoid())) | |
964 { | |
965 response.mutable_select_patient_to_recycle_with_avoid()->set_found(true); | |
966 response.mutable_select_patient_to_recycle_with_avoid()->set_patient_id(patientId); | |
967 } | |
968 else | |
969 { | |
970 response.mutable_select_patient_to_recycle_with_avoid()->set_found(false); | |
971 } | |
972 | |
973 break; | |
974 } | |
975 | |
976 case Orthanc::DatabasePluginMessages::OPERATION_SET_GLOBAL_PROPERTY: | |
977 { | |
978 backend.SetGlobalProperty(manager, request.set_global_property().server_id().c_str(), | |
979 request.set_global_property().property(), | |
980 request.set_global_property().value().c_str()); | |
981 break; | |
982 } | |
983 | |
984 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_MAIN_DICOM_TAGS: | |
985 { | |
986 backend.ClearMainDicomTags(manager, request.clear_main_dicom_tags().id()); | |
987 break; | |
988 } | |
989 | |
990 case Orthanc::DatabasePluginMessages::OPERATION_SET_METADATA: | |
991 { | |
992 backend.SetMetadata(manager, request.set_metadata().id(), | |
993 request.set_metadata().metadata_type(), | |
994 request.set_metadata().value().c_str(), | |
995 request.set_metadata().revision()); | |
996 break; | |
997 } | |
998 | |
999 case Orthanc::DatabasePluginMessages::OPERATION_SET_PROTECTED_PATIENT: | |
1000 { | |
1001 backend.SetProtectedPatient(manager, request.set_protected_patient().patient_id(), | |
1002 request.set_protected_patient().protected_patient()); | |
1003 break; | |
1004 } | |
1005 | |
1006 case Orthanc::DatabasePluginMessages::OPERATION_IS_DISK_SIZE_ABOVE: | |
1007 { | |
1008 bool above = (backend.GetTotalCompressedSize(manager) >= request.is_disk_size_above().threshold()); | |
1009 response.mutable_is_disk_size_above()->set_result(above); | |
1010 break; | |
1011 } | |
1012 | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1013 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_RESOURCES: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1014 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1015 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
|
1016 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1017 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1018 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1019 case Orthanc::DatabasePluginMessages::OPERATION_CREATE_INSTANCE: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1020 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1021 const char* hashPatient = request.create_instance().patient().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1022 const char* hashStudy = request.create_instance().study().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1023 const char* hashSeries = request.create_instance().series().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1024 const char* hashInstance = request.create_instance().instance().c_str(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1025 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1026 OrthancPluginCreateInstanceResult result; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1027 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1028 if (backend.HasCreateInstance()) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1029 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1030 backend.CreateInstance(result, manager, hashPatient, hashStudy, hashSeries, hashInstance); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1031 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1032 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1033 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1034 backend.CreateInstanceGeneric(result, manager, hashPatient, hashStudy, hashSeries, hashInstance); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1035 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1036 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1037 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
|
1038 response.mutable_create_instance()->set_instance_id(result.instanceId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1039 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1040 if (result.isNewInstance) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1041 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1042 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
|
1043 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
|
1044 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
|
1045 response.mutable_create_instance()->set_patient_id(result.patientId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1046 response.mutable_create_instance()->set_study_id(result.studyId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1047 response.mutable_create_instance()->set_series_id(result.seriesId); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1048 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1049 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1050 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1051 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1052 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1053 case Orthanc::DatabasePluginMessages::OPERATION_SET_RESOURCES_CONTENT: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1054 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1055 std::vector<OrthancPluginResourcesContentTags> identifierTags; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1056 std::vector<OrthancPluginResourcesContentTags> mainDicomTags; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1057 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1058 identifierTags.reserve(request.set_resources_content().tags().size()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1059 mainDicomTags.reserve(request.set_resources_content().tags().size()); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1060 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1061 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
|
1062 { |
383 | 1063 if (request.set_resources_content().tags(i).group() > 0xffffu || |
1064 request.set_resources_content().tags(i).element() > 0xffffu) | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1065 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1066 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1067 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1068 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1069 OrthancPluginResourcesContentTags tag; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1070 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
|
1071 tag.group = request.set_resources_content().tags(i).group(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1072 tag.element = request.set_resources_content().tags(i).element(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1073 tag.value = request.set_resources_content().tags(i).value().c_str(); |
384 | 1074 |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1075 if (request.set_resources_content().tags(i).is_identifier()) |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1076 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1077 identifierTags.push_back(tag); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1078 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1079 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1080 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1081 mainDicomTags.push_back(tag); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1082 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1083 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1084 |
384 | 1085 std::vector<OrthancPluginResourcesContentMetadata> metadata; |
1086 metadata.reserve(request.set_resources_content().metadata().size()); | |
1087 | |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1088 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
|
1089 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1090 OrthancPluginResourcesContentMetadata item; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1091 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
|
1092 item.metadata = request.set_resources_content().metadata(i).metadata(); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1093 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
|
1094 metadata.push_back(item); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1095 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1096 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1097 backend.SetResourcesContent(manager, |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1098 identifierTags.size(), (identifierTags.empty() ? NULL : &identifierTags[0]), |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1099 mainDicomTags.size(), (mainDicomTags.empty() ? NULL : &mainDicomTags[0]), |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1100 metadata.size(), (metadata.empty() ? NULL : &metadata[0])); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1101 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1102 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1103 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1104 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_METADATA: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1105 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1106 std::list<std::string> values; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1107 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
|
1108 |
384 | 1109 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
|
1110 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
|
1111 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1112 response.mutable_get_children_metadata()->add_values(*it); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1113 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1114 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1115 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1116 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1117 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1118 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_CHANGE_INDEX: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1119 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1120 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
|
1121 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1122 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1123 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1124 case Orthanc::DatabasePluginMessages::OPERATION_LOOKUP_RESOURCE_AND_PARENT: |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1125 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1126 int64_t id; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1127 OrthancPluginResourceType type; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1128 std::string parent; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1129 |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1130 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
|
1131 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1132 response.mutable_lookup_resource_and_parent()->set_found(true); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1133 response.mutable_lookup_resource_and_parent()->set_id(id); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1134 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
|
1135 |
384 | 1136 switch (type) |
380
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1137 { |
384 | 1138 case OrthancPluginResourceType_Study: |
1139 case OrthancPluginResourceType_Series: | |
1140 case OrthancPluginResourceType_Instance: | |
1141 if (parent.empty()) | |
1142 { | |
1143 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
1144 } | |
1145 else | |
1146 { | |
1147 response.mutable_lookup_resource_and_parent()->set_parent_public_id(parent); | |
1148 } | |
1149 break; | |
1150 | |
1151 case OrthancPluginResourceType_Patient: | |
1152 if (!parent.empty()) | |
1153 { | |
1154 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
1155 } | |
1156 break; | |
1157 | |
1158 default: | |
1159 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
380
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 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1162 else |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1163 { |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1164 response.mutable_lookup_resource_and_parent()->set_found(false); |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1165 } |
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 break; |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1168 } |
cb91096fef06
implemented full protobuf api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
379
diff
changeset
|
1169 |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1170 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
|
1171 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1172 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
|
1173 break; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1174 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1175 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1176 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
|
1177 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1178 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
|
1179 break; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1180 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1181 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1182 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
|
1183 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1184 std::list<std::string> labels; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1185 backend.ListLabels(labels, manager, request.list_labels().id()); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1186 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1187 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
|
1188 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
|
1189 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1190 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
|
1191 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1192 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1193 break; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1194 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
1195 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1196 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1197 LOG(ERROR) << "Not implemented transaction operation from protobuf: " << request.operation(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1198 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1199 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1200 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1201 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1202 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1203 static OrthancPluginErrorCode CallBackend(OrthancPluginMemoryBuffer64* serializedResponse, |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1204 void* rawPool, |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1205 const void* requestData, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1206 uint64_t requestSize) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1207 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1208 Orthanc::DatabasePluginMessages::Request request; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1209 if (!request.ParseFromArray(requestData, requestSize)) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1210 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1211 LOG(ERROR) << "Cannot parse message from the Orthanc core using protobuf"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1212 return OrthancPluginErrorCode_InternalError; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1213 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1214 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1215 if (rawPool == NULL) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1216 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1217 LOG(ERROR) << "Received a NULL pointer from the database"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1218 return OrthancPluginErrorCode_InternalError; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1219 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1220 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1221 IndexConnectionsPool& pool = *reinterpret_cast<IndexConnectionsPool*>(rawPool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1222 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1223 try |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1224 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1225 Orthanc::DatabasePluginMessages::Response response; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1226 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1227 switch (request.type()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1228 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1229 case Orthanc::DatabasePluginMessages::REQUEST_DATABASE: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1230 ProcessDatabaseOperation(*response.mutable_database_response(), request.database_request(), pool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1231 break; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1232 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1233 case Orthanc::DatabasePluginMessages::REQUEST_TRANSACTION: |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1234 { |
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1235 IndexConnectionsPool::Accessor& transaction = *reinterpret_cast<IndexConnectionsPool::Accessor*>(request.transaction_request().transaction()); |
377 | 1236 ProcessTransactionOperation(*response.mutable_transaction_response(), request.transaction_request(), |
1237 transaction.GetBackend(), transaction.GetManager()); | |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1238 break; |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1239 } |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1240 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1241 default: |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1242 LOG(ERROR) << "Not implemented request type from protobuf: " << request.type(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1243 break; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1244 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1245 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1246 std::string s; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1247 if (!response.SerializeToString(&s)) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1248 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1249 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Cannot serialize to protobuf"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1250 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1251 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1252 if (OrthancPluginCreateMemoryBuffer64(pool.GetContext(), serializedResponse, s.size()) != OrthancPluginErrorCode_Success) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1253 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1254 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotEnoughMemory, "Cannot allocate a memory buffer"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1255 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1256 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1257 if (!s.empty()) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1258 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1259 assert(serializedResponse->size == s.size()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1260 memcpy(serializedResponse->data, s.c_str(), s.size()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1261 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1262 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1263 return OrthancPluginErrorCode_Success; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1264 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1265 catch (::Orthanc::OrthancException& e) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1266 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1267 LOG(ERROR) << "Exception in database back-end: " << e.What(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1268 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1269 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1270 catch (::std::runtime_error& e) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1271 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1272 LOG(ERROR) << "Exception in database back-end: " << e.what(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1273 return OrthancPluginErrorCode_DatabasePlugin; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1274 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1275 catch (...) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1276 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1277 LOG(ERROR) << "Native exception"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1278 return OrthancPluginErrorCode_DatabasePlugin; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1279 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1280 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1281 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1282 static void FinalizeBackend(void* rawPool) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1283 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1284 if (rawPool != NULL) |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1285 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1286 IndexConnectionsPool* pool = reinterpret_cast<IndexConnectionsPool*>(rawPool); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1287 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1288 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1289 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1290 isBackendInUse_ = false; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1291 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1292 else |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1293 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1294 LOG(ERROR) << "More than one index backend was registered, internal error"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1295 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1296 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1297 delete pool; |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1298 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1299 else |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1300 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1301 LOG(ERROR) << "Received a null pointer from the Orthanc core, internal error"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1302 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1303 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1304 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1305 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1306 void DatabaseBackendAdapterV4::Register(IndexBackend* backend, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1307 size_t countConnections, |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1308 unsigned int maxDatabaseRetries) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1309 { |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1310 std::unique_ptr<IndexConnectionsPool> pool(new IndexConnectionsPool(backend, countConnections)); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1311 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1312 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1313 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1314 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1315 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1316 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1317 OrthancPluginContext* context = backend->GetContext(); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1318 |
375
824d70ce85ff
implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1319 if (OrthancPluginRegisterDatabaseBackendV4(context, pool.release(), maxDatabaseRetries, |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1320 CallBackend, FinalizeBackend) != OrthancPluginErrorCode_Success) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1321 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1322 delete backend; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1323 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Unable to register the database backend"); |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1324 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1325 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1326 isBackendInUse_ = true; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1327 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1328 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1329 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1330 void DatabaseBackendAdapterV4::Finalize() |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1331 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1332 if (isBackendInUse_) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1333 { |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1334 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
|
1335 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1336 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1337 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1338 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1339 # endif |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1340 #endif |