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