Mercurial > hg > orthanc-databases
annotate Framework/Plugins/DatabaseBackendAdapterV3.cpp @ 233:7d46c99523a2
reorganization
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 06 Apr 2021 15:07:27 +0200 |
parents | 4e15eace9b90 |
children | d1b124d116c1 |
rev | line source |
---|---|
212 | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
5 * Copyright (C) 2017-2021 Osimis S.A., Belgium | |
6 * | |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU Affero General Public License | |
9 * as published by the Free Software Foundation, either version 3 of | |
10 * the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Affero General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Affero General Public License | |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 **/ | |
20 | |
21 | |
22 #include "DatabaseBackendAdapterV3.h" | |
23 | |
24 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 | |
25 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 2) | |
26 | |
233 | 27 #include <MultiThreading/SharedMessageQueue.h> |
28 | |
212 | 29 #include <OrthancException.h> |
30 | |
31 #include <stdexcept> | |
32 #include <list> | |
33 #include <string> | |
34 #include <cassert> | |
35 | |
36 | |
37 #define ORTHANC_PLUGINS_DATABASE_CATCH(context) \ | |
38 catch (::Orthanc::OrthancException& e) \ | |
39 { \ | |
40 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); \ | |
41 } \ | |
42 catch (::std::runtime_error& e) \ | |
43 { \ | |
44 const std::string message = "Exception in database back-end: " + std::string(e.what()); \ | |
45 OrthancPluginLogError(context, message.c_str()); \ | |
46 return OrthancPluginErrorCode_DatabasePlugin; \ | |
47 } \ | |
48 catch (...) \ | |
49 { \ | |
50 OrthancPluginLogError(context, "Native exception"); \ | |
51 return OrthancPluginErrorCode_DatabasePlugin; \ | |
52 } | |
53 | |
54 | |
55 namespace OrthancDatabases | |
56 { | |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
57 static bool isBackendInUse_ = false; // Only for sanity checks |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
58 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
59 |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
60 // TODO - TURN THIS INTO A CONNECTION POOL |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
61 class DatabaseBackendAdapterV3::Adapter : public boost::noncopyable |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
62 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
63 private: |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
64 std::unique_ptr<IndexBackend> backend_; |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
65 OrthancPluginContext* context_; |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
66 boost::mutex managerMutex_; |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
67 std::unique_ptr<DatabaseManager> manager_; |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
68 |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
69 DatabaseManager& GetManager() const |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
70 { |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
71 if (manager_.get() == NULL) |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
72 { |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
73 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
74 } |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
75 else |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
76 { |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
77 return *manager_; |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
78 } |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
79 } |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
80 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
81 public: |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
82 Adapter(IndexBackend* backend) : |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
83 backend_(backend) |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
84 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
85 if (backend == NULL) |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
86 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
87 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
88 } |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
89 else |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
90 { |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
91 context_ = backend_->GetContext(); |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
92 } |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
93 } |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
94 |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
95 OrthancPluginContext* GetContext() const |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
96 { |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
97 return context_; |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
98 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
99 |
233 | 100 void OpenConnections() |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
101 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
102 boost::mutex::scoped_lock lock(managerMutex_); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
103 |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
104 if (manager_.get() == NULL) |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
105 { |
226
a4918d57435c
DatabaseManager doesn't IDatabaseFactory anymore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
225
diff
changeset
|
106 manager_.reset(IndexBackend::CreateSingleDatabaseManager(*backend_)); |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
107 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
108 else |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
109 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
110 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
111 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
112 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
113 |
233 | 114 void CloseConnections() |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
115 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
116 boost::mutex::scoped_lock lock(managerMutex_); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
117 |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
118 if (manager_.get() == NULL) |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
119 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
120 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
121 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
122 else |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
123 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
124 manager_->Close(); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
125 manager_.reset(NULL); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
126 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
127 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
128 |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
129 class DatabaseAccessor : public boost::noncopyable |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
130 { |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
131 private: |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
132 boost::mutex::scoped_lock lock_; |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
133 IndexBackend& backend_; |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
134 DatabaseManager& manager_; |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
135 |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
136 public: |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
137 DatabaseAccessor(Adapter& adapter) : |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
138 lock_(adapter.managerMutex_), |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
139 backend_(*adapter.backend_), |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
140 manager_(adapter.GetManager()) |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
141 { |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
142 } |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
143 |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
144 IndexBackend& GetBackend() const |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
145 { |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
146 return backend_; |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
147 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
148 |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
149 DatabaseManager& GetManager() const |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
150 { |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
151 return manager_; |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
152 } |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
153 }; |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
154 }; |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
155 |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
156 |
212 | 157 class DatabaseBackendAdapterV3::Output : public IDatabaseBackendOutput |
158 { | |
159 private: | |
160 struct Metadata | |
161 { | |
162 int32_t metadata; | |
163 const char* value; | |
164 }; | |
165 | |
166 _OrthancPluginDatabaseAnswerType answerType_; | |
167 std::list<std::string> stringsStore_; | |
168 | |
169 std::vector<OrthancPluginAttachment> attachments_; | |
170 std::vector<OrthancPluginChange> changes_; | |
171 std::vector<OrthancPluginDicomTag> tags_; | |
172 std::vector<OrthancPluginExportedResource> exported_; | |
173 std::vector<OrthancPluginDatabaseEvent> events_; | |
174 std::vector<int32_t> integers32_; | |
175 std::vector<int64_t> integers64_; | |
176 std::vector<OrthancPluginMatchingResource> matches_; | |
177 std::vector<Metadata> metadata_; | |
178 std::vector<std::string> stringAnswers_; | |
179 | |
180 const char* StoreString(const std::string& s) | |
181 { | |
182 stringsStore_.push_back(s); | |
183 return stringsStore_.back().c_str(); | |
184 } | |
185 | |
186 void SetupAnswerType(_OrthancPluginDatabaseAnswerType type) | |
187 { | |
188 if (answerType_ == _OrthancPluginDatabaseAnswerType_None) | |
189 { | |
190 answerType_ = type; | |
191 } | |
192 else if (answerType_ != type) | |
193 { | |
194 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
195 } | |
196 } | |
197 | |
198 public: | |
199 Output() : | |
200 answerType_(_OrthancPluginDatabaseAnswerType_None) | |
201 { | |
202 } | |
203 | |
204 void Clear() | |
205 { | |
206 // We don't systematically clear all the vectors, in order to | |
207 // avoid spending unnecessary time | |
208 | |
209 switch (answerType_) | |
210 { | |
211 case _OrthancPluginDatabaseAnswerType_None: | |
212 break; | |
213 | |
214 case _OrthancPluginDatabaseAnswerType_Attachment: | |
215 attachments_.clear(); | |
216 break; | |
217 | |
218 case _OrthancPluginDatabaseAnswerType_Change: | |
219 changes_.clear(); | |
220 break; | |
221 | |
222 case _OrthancPluginDatabaseAnswerType_DicomTag: | |
223 tags_.clear(); | |
224 break; | |
225 | |
226 case _OrthancPluginDatabaseAnswerType_ExportedResource: | |
227 exported_.clear(); | |
228 break; | |
229 | |
230 case _OrthancPluginDatabaseAnswerType_Int32: | |
231 integers32_.clear(); | |
232 break; | |
233 | |
234 case _OrthancPluginDatabaseAnswerType_Int64: | |
235 integers64_.clear(); | |
236 break; | |
237 | |
238 case _OrthancPluginDatabaseAnswerType_MatchingResource: | |
239 matches_.clear(); | |
240 break; | |
241 | |
242 case _OrthancPluginDatabaseAnswerType_Metadata: | |
243 metadata_.clear(); | |
244 break; | |
245 | |
246 case _OrthancPluginDatabaseAnswerType_String: | |
247 stringAnswers_.clear(); | |
248 break; | |
249 | |
250 default: | |
251 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
252 } | |
253 | |
254 answerType_ = _OrthancPluginDatabaseAnswerType_None; | |
255 stringsStore_.clear(); | |
256 events_.clear(); | |
257 | |
258 assert(attachments_.empty()); | |
259 assert(changes_.empty()); | |
260 assert(tags_.empty()); | |
261 assert(exported_.empty()); | |
262 assert(events_.empty()); | |
263 assert(integers32_.empty()); | |
264 assert(integers64_.empty()); | |
265 assert(matches_.empty()); | |
266 assert(metadata_.empty()); | |
267 assert(stringAnswers_.empty()); | |
268 } | |
269 | |
270 | |
271 OrthancPluginErrorCode ReadAnswersCount(uint32_t& target) const | |
272 { | |
273 switch (answerType_) | |
274 { | |
275 case _OrthancPluginDatabaseAnswerType_None: | |
276 target = static_cast<uint32_t>(0); | |
277 break; | |
278 | |
279 case _OrthancPluginDatabaseAnswerType_Attachment: | |
280 target = static_cast<uint32_t>(attachments_.size()); | |
281 break; | |
282 | |
283 case _OrthancPluginDatabaseAnswerType_Change: | |
284 target = static_cast<uint32_t>(changes_.size()); | |
285 break; | |
286 | |
287 case _OrthancPluginDatabaseAnswerType_DicomTag: | |
288 target = static_cast<uint32_t>(tags_.size()); | |
289 break; | |
290 | |
291 case _OrthancPluginDatabaseAnswerType_ExportedResource: | |
292 target = static_cast<uint32_t>(exported_.size()); | |
293 break; | |
294 | |
295 case _OrthancPluginDatabaseAnswerType_Int32: | |
296 target = static_cast<uint32_t>(integers32_.size()); | |
297 break; | |
298 | |
299 case _OrthancPluginDatabaseAnswerType_Int64: | |
300 target = static_cast<uint32_t>(integers64_.size()); | |
301 break; | |
302 | |
303 case _OrthancPluginDatabaseAnswerType_MatchingResource: | |
304 target = static_cast<uint32_t>(matches_.size()); | |
305 break; | |
306 | |
307 case _OrthancPluginDatabaseAnswerType_Metadata: | |
308 target = static_cast<uint32_t>(metadata_.size()); | |
309 break; | |
310 | |
311 case _OrthancPluginDatabaseAnswerType_String: | |
312 target = static_cast<uint32_t>(stringAnswers_.size()); | |
313 break; | |
314 | |
315 default: | |
316 return OrthancPluginErrorCode_InternalError; | |
317 } | |
318 | |
319 return OrthancPluginErrorCode_Success; | |
320 } | |
321 | |
322 | |
323 OrthancPluginErrorCode ReadAnswerAttachment(OrthancPluginAttachment& target /* out */, | |
324 uint32_t index) const | |
325 { | |
326 if (index < attachments_.size()) | |
327 { | |
328 target = attachments_[index]; | |
329 return OrthancPluginErrorCode_Success; | |
330 } | |
331 else | |
332 { | |
333 return OrthancPluginErrorCode_ParameterOutOfRange; | |
334 } | |
335 } | |
336 | |
337 | |
338 OrthancPluginErrorCode ReadAnswerChange(OrthancPluginChange& target /* out */, | |
339 uint32_t index) const | |
340 { | |
341 if (index < changes_.size()) | |
342 { | |
343 target = changes_[index]; | |
344 return OrthancPluginErrorCode_Success; | |
345 } | |
346 else | |
347 { | |
348 return OrthancPluginErrorCode_ParameterOutOfRange; | |
349 } | |
350 } | |
351 | |
352 | |
353 OrthancPluginErrorCode ReadAnswerDicomTag(uint16_t& group, | |
354 uint16_t& element, | |
355 const char*& value, | |
356 uint32_t index) const | |
357 { | |
358 if (index < tags_.size()) | |
359 { | |
360 const OrthancPluginDicomTag& tag = tags_[index]; | |
361 group = tag.group; | |
362 element = tag.element; | |
363 value = tag.value; | |
364 return OrthancPluginErrorCode_Success; | |
365 } | |
366 else | |
367 { | |
368 return OrthancPluginErrorCode_ParameterOutOfRange; | |
369 } | |
370 } | |
371 | |
372 | |
373 OrthancPluginErrorCode ReadAnswerExportedResource(OrthancPluginExportedResource& target /* out */, | |
374 uint32_t index) const | |
375 { | |
376 if (index < exported_.size()) | |
377 { | |
378 target = exported_[index]; | |
379 return OrthancPluginErrorCode_Success; | |
380 } | |
381 else | |
382 { | |
383 return OrthancPluginErrorCode_ParameterOutOfRange; | |
384 } | |
385 } | |
386 | |
387 | |
388 OrthancPluginErrorCode ReadAnswerInt32(int32_t& target, | |
389 uint32_t index) const | |
390 { | |
391 if (index < integers32_.size()) | |
392 { | |
393 target = integers32_[index]; | |
394 return OrthancPluginErrorCode_Success; | |
395 } | |
396 else | |
397 { | |
398 return OrthancPluginErrorCode_ParameterOutOfRange; | |
399 } | |
400 } | |
401 | |
402 | |
403 OrthancPluginErrorCode ReadAnswerInt64(int64_t& target, | |
404 uint32_t index) const | |
405 { | |
406 if (index < integers64_.size()) | |
407 { | |
408 target = integers64_[index]; | |
409 return OrthancPluginErrorCode_Success; | |
410 } | |
411 else | |
412 { | |
413 return OrthancPluginErrorCode_ParameterOutOfRange; | |
414 } | |
415 } | |
416 | |
417 | |
418 OrthancPluginErrorCode ReadAnswerMatchingResource(OrthancPluginMatchingResource& target, | |
419 uint32_t index) const | |
420 { | |
421 if (index < matches_.size()) | |
422 { | |
423 target = matches_[index]; | |
424 return OrthancPluginErrorCode_Success; | |
425 } | |
426 else | |
427 { | |
428 return OrthancPluginErrorCode_ParameterOutOfRange; | |
429 } | |
430 } | |
431 | |
432 | |
433 OrthancPluginErrorCode ReadAnswerMetadata(int32_t& metadata, | |
434 const char*& value, | |
435 uint32_t index) const | |
436 { | |
437 if (index < metadata_.size()) | |
438 { | |
439 const Metadata& tmp = metadata_[index]; | |
440 metadata = tmp.metadata; | |
441 value = tmp.value; | |
442 return OrthancPluginErrorCode_Success; | |
443 } | |
444 else | |
445 { | |
446 return OrthancPluginErrorCode_ParameterOutOfRange; | |
447 } | |
448 } | |
449 | |
450 | |
451 OrthancPluginErrorCode ReadAnswerString(const char*& target, | |
452 uint32_t index) const | |
453 { | |
454 if (index < stringAnswers_.size()) | |
455 { | |
456 target = stringAnswers_[index].c_str(); | |
457 return OrthancPluginErrorCode_Success; | |
458 } | |
459 else | |
460 { | |
461 return OrthancPluginErrorCode_ParameterOutOfRange; | |
462 } | |
463 } | |
464 | |
465 | |
466 OrthancPluginErrorCode ReadEventsCount(uint32_t& target /* out */) const | |
467 { | |
468 target = static_cast<uint32_t>(events_.size()); | |
469 return OrthancPluginErrorCode_Success; | |
470 } | |
471 | |
472 | |
473 OrthancPluginErrorCode ReadEvent(OrthancPluginDatabaseEvent& event /* out */, | |
474 uint32_t index) const | |
475 { | |
476 if (index < events_.size()) | |
477 { | |
478 event = events_[index]; | |
479 return OrthancPluginErrorCode_Success; | |
480 } | |
481 else | |
482 { | |
483 return OrthancPluginErrorCode_ParameterOutOfRange; | |
484 } | |
485 } | |
486 | |
487 | |
488 virtual void SignalDeletedAttachment(const std::string& uuid, | |
489 int32_t contentType, | |
490 uint64_t uncompressedSize, | |
491 const std::string& uncompressedHash, | |
492 int32_t compressionType, | |
493 uint64_t compressedSize, | |
494 const std::string& compressedHash) ORTHANC_OVERRIDE | |
495 { | |
496 OrthancPluginDatabaseEvent event; | |
497 event.type = OrthancPluginDatabaseEventType_DeletedAttachment; | |
498 event.content.attachment.uuid = StoreString(uuid); | |
499 event.content.attachment.contentType = contentType; | |
500 event.content.attachment.uncompressedSize = uncompressedSize; | |
501 event.content.attachment.uncompressedHash = StoreString(uncompressedHash); | |
502 event.content.attachment.compressionType = compressionType; | |
503 event.content.attachment.compressedSize = compressedSize; | |
504 event.content.attachment.compressedHash = StoreString(compressedHash); | |
505 | |
506 events_.push_back(event); | |
507 } | |
508 | |
509 | |
510 virtual void SignalDeletedResource(const std::string& publicId, | |
511 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE | |
512 { | |
513 OrthancPluginDatabaseEvent event; | |
514 event.type = OrthancPluginDatabaseEventType_DeletedResource; | |
515 event.content.resource.level = resourceType; | |
516 event.content.resource.publicId = StoreString(publicId); | |
517 | |
518 events_.push_back(event); | |
519 } | |
520 | |
521 | |
522 virtual void SignalRemainingAncestor(const std::string& ancestorId, | |
523 OrthancPluginResourceType ancestorType) ORTHANC_OVERRIDE | |
524 { | |
525 OrthancPluginDatabaseEvent event; | |
526 event.type = OrthancPluginDatabaseEventType_RemainingAncestor; | |
527 event.content.resource.level = ancestorType; | |
528 event.content.resource.publicId = StoreString(ancestorId); | |
529 | |
530 events_.push_back(event); | |
531 } | |
532 | |
533 | |
534 virtual void AnswerAttachment(const std::string& uuid, | |
535 int32_t contentType, | |
536 uint64_t uncompressedSize, | |
537 const std::string& uncompressedHash, | |
538 int32_t compressionType, | |
539 uint64_t compressedSize, | |
540 const std::string& compressedHash) ORTHANC_OVERRIDE | |
541 { | |
542 SetupAnswerType(_OrthancPluginDatabaseAnswerType_Attachment); | |
543 | |
544 OrthancPluginAttachment attachment; | |
545 attachment.uuid = StoreString(uuid); | |
546 attachment.contentType = contentType; | |
547 attachment.uncompressedSize = uncompressedSize; | |
548 attachment.uncompressedHash = StoreString(uncompressedHash); | |
549 attachment.compressionType = compressionType; | |
550 attachment.compressedSize = compressedSize; | |
551 attachment.compressedHash = StoreString(compressedHash); | |
552 | |
553 attachments_.push_back(attachment); | |
554 } | |
555 | |
556 | |
557 virtual void AnswerChange(int64_t seq, | |
558 int32_t changeType, | |
559 OrthancPluginResourceType resourceType, | |
560 const std::string& publicId, | |
561 const std::string& date) ORTHANC_OVERRIDE | |
562 { | |
563 SetupAnswerType(_OrthancPluginDatabaseAnswerType_Change); | |
564 | |
565 OrthancPluginChange change; | |
566 change.seq = seq; | |
567 change.changeType = changeType; | |
568 change.resourceType = resourceType; | |
569 change.publicId = StoreString(publicId); | |
570 change.date = StoreString(date); | |
571 | |
572 changes_.push_back(change); | |
573 } | |
574 | |
575 | |
576 virtual void AnswerDicomTag(uint16_t group, | |
577 uint16_t element, | |
578 const std::string& value) ORTHANC_OVERRIDE | |
579 { | |
580 SetupAnswerType(_OrthancPluginDatabaseAnswerType_DicomTag); | |
581 | |
582 OrthancPluginDicomTag tag; | |
583 tag.group = group; | |
584 tag.element = element; | |
585 tag.value = StoreString(value); | |
586 | |
587 tags_.push_back(tag); | |
588 } | |
589 | |
590 | |
591 virtual void AnswerExportedResource(int64_t seq, | |
592 OrthancPluginResourceType resourceType, | |
593 const std::string& publicId, | |
594 const std::string& modality, | |
595 const std::string& date, | |
596 const std::string& patientId, | |
597 const std::string& studyInstanceUid, | |
598 const std::string& seriesInstanceUid, | |
599 const std::string& sopInstanceUid) ORTHANC_OVERRIDE | |
600 { | |
601 SetupAnswerType(_OrthancPluginDatabaseAnswerType_ExportedResource); | |
602 | |
603 OrthancPluginExportedResource exported; | |
604 exported.seq = seq; | |
605 exported.resourceType = resourceType; | |
606 exported.publicId = StoreString(publicId); | |
607 exported.modality = StoreString(modality); | |
608 exported.date = StoreString(date); | |
609 exported.patientId = StoreString(patientId); | |
610 exported.studyInstanceUid = StoreString(studyInstanceUid); | |
611 exported.seriesInstanceUid = StoreString(seriesInstanceUid); | |
612 exported.sopInstanceUid = StoreString(sopInstanceUid); | |
613 | |
614 exported_.push_back(exported); | |
615 } | |
616 | |
617 | |
618 virtual void AnswerMatchingResource(const std::string& resourceId) ORTHANC_OVERRIDE | |
619 { | |
620 SetupAnswerType(_OrthancPluginDatabaseAnswerType_MatchingResource); | |
621 | |
622 OrthancPluginMatchingResource match; | |
623 match.resourceId = StoreString(resourceId); | |
624 match.someInstanceId = NULL; | |
625 | |
626 matches_.push_back(match); | |
627 } | |
628 | |
629 | |
630 virtual void AnswerMatchingResource(const std::string& resourceId, | |
631 const std::string& someInstanceId) ORTHANC_OVERRIDE | |
632 { | |
633 SetupAnswerType(_OrthancPluginDatabaseAnswerType_MatchingResource); | |
634 | |
635 OrthancPluginMatchingResource match; | |
636 match.resourceId = StoreString(resourceId); | |
637 match.someInstanceId = StoreString(someInstanceId); | |
638 | |
639 matches_.push_back(match); | |
640 } | |
641 | |
642 | |
643 void AnswerIntegers32(const std::list<int32_t>& values) | |
644 { | |
645 SetupAnswerType(_OrthancPluginDatabaseAnswerType_Int32); | |
646 | |
647 integers32_.reserve(values.size()); | |
648 std::copy(std::begin(values), std::end(values), std::back_inserter(integers32_)); | |
649 } | |
650 | |
651 | |
652 void AnswerIntegers64(const std::list<int64_t>& values) | |
653 { | |
654 SetupAnswerType(_OrthancPluginDatabaseAnswerType_Int64); | |
655 | |
656 integers64_.reserve(values.size()); | |
657 std::copy(std::begin(values), std::end(values), std::back_inserter(integers64_)); | |
658 } | |
659 | |
660 | |
661 void AnswerInteger64(int64_t value) | |
662 { | |
663 SetupAnswerType(_OrthancPluginDatabaseAnswerType_Int64); | |
664 | |
665 integers64_.resize(1); | |
666 integers64_[0] = value; | |
667 } | |
668 | |
669 | |
670 void AnswerMetadata(int32_t metadata, | |
671 const std::string& value) | |
672 { | |
673 SetupAnswerType(_OrthancPluginDatabaseAnswerType_Metadata); | |
674 | |
675 Metadata tmp; | |
676 tmp.metadata = metadata; | |
677 tmp.value = StoreString(value); | |
678 | |
679 metadata_.push_back(tmp); | |
680 } | |
681 | |
682 | |
683 void AnswerStrings(const std::list<std::string>& values) | |
684 { | |
685 SetupAnswerType(_OrthancPluginDatabaseAnswerType_String); | |
686 | |
687 stringAnswers_.reserve(values.size()); | |
688 std::copy(std::begin(values), std::end(values), std::back_inserter(stringAnswers_)); | |
689 } | |
690 | |
691 | |
692 void AnswerString(const std::string& value) | |
693 { | |
694 SetupAnswerType(_OrthancPluginDatabaseAnswerType_String); | |
695 | |
696 if (stringAnswers_.empty()) | |
697 { | |
698 stringAnswers_.push_back(value); | |
699 } | |
700 else | |
701 { | |
702 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
703 } | |
704 } | |
705 }; | |
706 | |
707 | |
708 IDatabaseBackendOutput* DatabaseBackendAdapterV3::Factory::CreateOutput() | |
709 { | |
710 return new DatabaseBackendAdapterV3::Output; | |
711 } | |
712 | |
713 | |
714 class DatabaseBackendAdapterV3::Transaction : public boost::noncopyable | |
715 { | |
716 private: | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
717 Adapter& adapter_; |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
718 std::unique_ptr<Adapter::DatabaseAccessor> accessor_; |
212 | 719 std::unique_ptr<Output> output_; |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
720 |
212 | 721 public: |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
722 Transaction(Adapter& adapter) : |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
723 adapter_(adapter), |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
724 accessor_(new Adapter::DatabaseAccessor(adapter)), |
212 | 725 output_(new Output) |
726 { | |
727 } | |
728 | |
729 ~Transaction() | |
730 { | |
731 } | |
732 | |
733 IndexBackend& GetBackend() const | |
734 { | |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
735 return accessor_->GetBackend(); |
212 | 736 } |
737 | |
738 Output& GetOutput() const | |
739 { | |
740 return *output_; | |
741 } | |
742 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
743 DatabaseManager& GetManager() const |
212 | 744 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
745 return accessor_->GetManager(); |
212 | 746 } |
747 }; | |
748 | |
749 | |
750 static OrthancPluginErrorCode ReadAnswersCount(OrthancPluginDatabaseTransaction* transaction, | |
751 uint32_t* target /* out */) | |
752 { | |
753 assert(target != NULL); | |
754 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
755 return that.GetOutput().ReadAnswersCount(*target); | |
756 } | |
757 | |
758 | |
759 static OrthancPluginErrorCode ReadAnswerAttachment(OrthancPluginDatabaseTransaction* transaction, | |
760 OrthancPluginAttachment* target /* out */, | |
761 uint32_t index) | |
762 { | |
763 assert(target != NULL); | |
764 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
765 return that.GetOutput().ReadAnswerAttachment(*target, index); | |
766 } | |
767 | |
768 | |
769 static OrthancPluginErrorCode ReadAnswerChange(OrthancPluginDatabaseTransaction* transaction, | |
770 OrthancPluginChange* target /* out */, | |
771 uint32_t index) | |
772 { | |
773 assert(target != NULL); | |
774 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
775 return that.GetOutput().ReadAnswerChange(*target, index); | |
776 } | |
777 | |
778 | |
779 static OrthancPluginErrorCode ReadAnswerDicomTag(OrthancPluginDatabaseTransaction* transaction, | |
780 uint16_t* group, | |
781 uint16_t* element, | |
782 const char** value, | |
783 uint32_t index) | |
784 { | |
785 assert(group != NULL); | |
786 assert(element != NULL); | |
787 assert(value != NULL); | |
788 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
789 return that.GetOutput().ReadAnswerDicomTag(*group, *element, *value, index); | |
790 } | |
791 | |
792 | |
793 static OrthancPluginErrorCode ReadAnswerExportedResource(OrthancPluginDatabaseTransaction* transaction, | |
794 OrthancPluginExportedResource* target /* out */, | |
795 uint32_t index) | |
796 { | |
797 assert(target != NULL); | |
798 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
799 return that.GetOutput().ReadAnswerExportedResource(*target, index); | |
800 } | |
801 | |
802 | |
803 static OrthancPluginErrorCode ReadAnswerInt32(OrthancPluginDatabaseTransaction* transaction, | |
804 int32_t* target, | |
805 uint32_t index) | |
806 { | |
807 assert(target != NULL); | |
808 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
809 return that.GetOutput().ReadAnswerInt32(*target, index); | |
810 } | |
811 | |
812 | |
813 static OrthancPluginErrorCode ReadAnswerInt64(OrthancPluginDatabaseTransaction* transaction, | |
814 int64_t* target, | |
815 uint32_t index) | |
816 { | |
817 assert(target != NULL); | |
818 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
819 return that.GetOutput().ReadAnswerInt64(*target, index); | |
820 } | |
821 | |
822 | |
823 static OrthancPluginErrorCode ReadAnswerMatchingResource(OrthancPluginDatabaseTransaction* transaction, | |
824 OrthancPluginMatchingResource* target, | |
825 uint32_t index) | |
826 { | |
827 assert(target != NULL); | |
828 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
829 return that.GetOutput().ReadAnswerMatchingResource(*target, index); | |
830 } | |
831 | |
832 | |
833 static OrthancPluginErrorCode ReadAnswerMetadata(OrthancPluginDatabaseTransaction* transaction, | |
834 int32_t* metadata, | |
835 const char** value, | |
836 uint32_t index) | |
837 { | |
838 assert(metadata != NULL); | |
839 assert(value != NULL); | |
840 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
841 return that.GetOutput().ReadAnswerMetadata(*metadata, *value, index); | |
842 } | |
843 | |
844 | |
845 static OrthancPluginErrorCode ReadAnswerString(OrthancPluginDatabaseTransaction* transaction, | |
846 const char** target, | |
847 uint32_t index) | |
848 { | |
849 assert(target != NULL); | |
850 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
851 return that.GetOutput().ReadAnswerString(*target, index); | |
852 } | |
853 | |
854 | |
855 static OrthancPluginErrorCode ReadEventsCount(OrthancPluginDatabaseTransaction* transaction, | |
856 uint32_t* target /* out */) | |
857 { | |
858 assert(target != NULL); | |
859 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
860 return that.GetOutput().ReadEventsCount(*target); | |
861 } | |
862 | |
863 | |
864 static OrthancPluginErrorCode ReadEvent(OrthancPluginDatabaseTransaction* transaction, | |
865 OrthancPluginDatabaseEvent* event /* out */, | |
866 uint32_t index) | |
867 { | |
868 assert(event != NULL); | |
869 const DatabaseBackendAdapterV3::Transaction& that = *reinterpret_cast<const DatabaseBackendAdapterV3::Transaction*>(transaction); | |
870 return that.GetOutput().ReadEvent(*event, index); | |
871 } | |
872 | |
873 | |
874 static OrthancPluginErrorCode Open(void* database) | |
875 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
876 DatabaseBackendAdapterV3::Adapter* adapter = reinterpret_cast<DatabaseBackendAdapterV3::Adapter*>(database); |
212 | 877 |
878 try | |
879 { | |
233 | 880 adapter->OpenConnections(); |
212 | 881 return OrthancPluginErrorCode_Success; |
882 } | |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
883 ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); |
212 | 884 } |
885 | |
886 | |
887 static OrthancPluginErrorCode Close(void* database) | |
888 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
889 DatabaseBackendAdapterV3::Adapter* adapter = reinterpret_cast<DatabaseBackendAdapterV3::Adapter*>(database); |
212 | 890 |
891 try | |
892 { | |
233 | 893 adapter->CloseConnections(); |
212 | 894 return OrthancPluginErrorCode_Success; |
895 } | |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
896 ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); |
212 | 897 } |
898 | |
899 | |
900 static OrthancPluginErrorCode DestructDatabase(void* database) | |
901 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
902 DatabaseBackendAdapterV3::Adapter* adapter = reinterpret_cast<DatabaseBackendAdapterV3::Adapter*>(database); |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
903 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
904 if (adapter == NULL) |
212 | 905 { |
906 return OrthancPluginErrorCode_InternalError; | |
907 } | |
908 else | |
909 { | |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
910 if (isBackendInUse_) |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
911 { |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
912 isBackendInUse_ = false; |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
913 } |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
914 else |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
915 { |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
916 OrthancPluginLogError(adapter->GetContext(), "More than one index backend was registered, internal error"); |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
917 } |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
918 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
919 delete adapter; |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
920 |
212 | 921 return OrthancPluginErrorCode_Success; |
922 } | |
923 } | |
924 | |
925 | |
926 static OrthancPluginErrorCode GetDatabaseVersion(void* database, | |
927 uint32_t* version) | |
928 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
929 DatabaseBackendAdapterV3::Adapter* adapter = reinterpret_cast<DatabaseBackendAdapterV3::Adapter*>(database); |
212 | 930 |
931 try | |
932 { | |
233 | 933 DatabaseBackendAdapterV3::Adapter::DatabaseAccessor accessor(*adapter); |
934 *version = accessor.GetBackend().GetDatabaseVersion(accessor.GetManager()); | |
212 | 935 return OrthancPluginErrorCode_Success; |
936 } | |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
937 ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); |
212 | 938 } |
939 | |
940 | |
941 static OrthancPluginErrorCode UpgradeDatabase(void* database, | |
942 OrthancPluginStorageArea* storageArea, | |
943 uint32_t targetVersion) | |
944 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
945 DatabaseBackendAdapterV3::Adapter* adapter = reinterpret_cast<DatabaseBackendAdapterV3::Adapter*>(database); |
212 | 946 |
947 try | |
948 { | |
233 | 949 DatabaseBackendAdapterV3::Adapter::DatabaseAccessor accessor(*adapter); |
950 accessor.GetBackend().UpgradeDatabase(accessor.GetManager(), targetVersion, storageArea); | |
212 | 951 return OrthancPluginErrorCode_Success; |
952 } | |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
953 ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); |
212 | 954 } |
955 | |
956 | |
957 static OrthancPluginErrorCode StartTransaction(void* database, | |
958 OrthancPluginDatabaseTransaction** target /* out */, | |
959 OrthancPluginDatabaseTransactionType type) | |
960 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
961 DatabaseBackendAdapterV3::Adapter* adapter = reinterpret_cast<DatabaseBackendAdapterV3::Adapter*>(database); |
212 | 962 |
963 try | |
964 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
965 std::unique_ptr<DatabaseBackendAdapterV3::Transaction> transaction(new DatabaseBackendAdapterV3::Transaction(*adapter)); |
212 | 966 |
967 switch (type) | |
968 { | |
969 case OrthancPluginDatabaseTransactionType_ReadOnly: | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
970 transaction->GetManager().StartTransaction(TransactionType_ReadOnly); |
212 | 971 break; |
972 | |
973 case OrthancPluginDatabaseTransactionType_ReadWrite: | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
974 transaction->GetManager().StartTransaction(TransactionType_ReadWrite); |
212 | 975 break; |
976 | |
977 default: | |
978 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
979 } | |
980 | |
981 *target = reinterpret_cast<OrthancPluginDatabaseTransaction*>(transaction.release()); | |
982 | |
983 return OrthancPluginErrorCode_Success; | |
984 } | |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
985 ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); |
212 | 986 } |
987 | |
988 | |
989 static OrthancPluginErrorCode DestructTransaction(OrthancPluginDatabaseTransaction* transaction) | |
990 { | |
991 if (transaction == NULL) | |
992 { | |
993 return OrthancPluginErrorCode_NullPointer; | |
994 } | |
995 else | |
996 { | |
997 delete reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
998 return OrthancPluginErrorCode_Success; | |
999 } | |
1000 } | |
1001 | |
1002 | |
1003 static OrthancPluginErrorCode Rollback(OrthancPluginDatabaseTransaction* transaction) | |
1004 { | |
1005 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1006 | |
1007 try | |
1008 { | |
1009 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1010 t->GetManager().RollbackTransaction(); |
212 | 1011 return OrthancPluginErrorCode_Success; |
1012 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1013 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1014 } |
1015 | |
1016 | |
1017 static OrthancPluginErrorCode Commit(OrthancPluginDatabaseTransaction* transaction, | |
1018 int64_t fileSizeDelta /* TODO - not used? */) | |
1019 { | |
1020 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1021 | |
1022 try | |
1023 { | |
1024 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1025 t->GetManager().CommitTransaction(); |
212 | 1026 return OrthancPluginErrorCode_Success; |
1027 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1028 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1029 } |
1030 | |
1031 | |
1032 static OrthancPluginErrorCode AddAttachment(OrthancPluginDatabaseTransaction* transaction, | |
1033 int64_t id, | |
1034 const OrthancPluginAttachment* attachment) | |
1035 { | |
1036 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1037 | |
1038 try | |
1039 { | |
1040 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1041 t->GetBackend().AddAttachment(t->GetManager(), id, *attachment); |
212 | 1042 return OrthancPluginErrorCode_Success; |
1043 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1044 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1045 } |
1046 | |
1047 | |
1048 static OrthancPluginErrorCode ClearChanges(OrthancPluginDatabaseTransaction* transaction) | |
1049 { | |
1050 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1051 | |
1052 try | |
1053 { | |
1054 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1055 t->GetBackend().ClearChanges(t->GetManager()); |
212 | 1056 return OrthancPluginErrorCode_Success; |
1057 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1058 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1059 } |
1060 | |
1061 | |
1062 static OrthancPluginErrorCode ClearExportedResources(OrthancPluginDatabaseTransaction* transaction) | |
1063 { | |
1064 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1065 | |
1066 try | |
1067 { | |
1068 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1069 t->GetBackend().ClearExportedResources(t->GetManager()); |
212 | 1070 return OrthancPluginErrorCode_Success; |
1071 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1072 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1073 } |
1074 | |
1075 | |
1076 static OrthancPluginErrorCode ClearMainDicomTags(OrthancPluginDatabaseTransaction* transaction, | |
1077 int64_t resourceId) | |
1078 { | |
1079 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1080 | |
1081 try | |
1082 { | |
1083 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1084 t->GetBackend().ClearMainDicomTags(t->GetManager(), resourceId); |
212 | 1085 return OrthancPluginErrorCode_Success; |
1086 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1087 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1088 } |
1089 | |
1090 | |
1091 static OrthancPluginErrorCode CreateInstance(OrthancPluginDatabaseTransaction* transaction, | |
1092 OrthancPluginCreateInstanceResult* target /* out */, | |
1093 const char* hashPatient, | |
1094 const char* hashStudy, | |
1095 const char* hashSeries, | |
1096 const char* hashInstance) | |
1097 { | |
1098 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1099 | |
1100 try | |
1101 { | |
1102 t->GetOutput().Clear(); | |
1103 | |
1104 if (t->GetBackend().HasCreateInstance()) | |
1105 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1106 t->GetBackend().CreateInstance(*target, t->GetManager(), hashPatient, hashStudy, hashSeries, hashInstance); |
212 | 1107 } |
1108 else | |
1109 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1110 t->GetBackend().CreateInstanceGeneric(*target, t->GetManager(), hashPatient, hashStudy, hashSeries, hashInstance); |
212 | 1111 } |
1112 | |
1113 return OrthancPluginErrorCode_Success; | |
1114 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1115 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1116 } |
1117 | |
1118 | |
1119 static OrthancPluginErrorCode DeleteAttachment(OrthancPluginDatabaseTransaction* transaction, | |
1120 int64_t id, | |
1121 int32_t contentType) | |
1122 { | |
1123 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1124 | |
1125 try | |
1126 { | |
1127 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1128 t->GetBackend().DeleteAttachment(t->GetOutput(), t->GetManager(), id, contentType); |
212 | 1129 return OrthancPluginErrorCode_Success; |
1130 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1131 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1132 } |
1133 | |
1134 | |
1135 static OrthancPluginErrorCode DeleteMetadata(OrthancPluginDatabaseTransaction* transaction, | |
1136 int64_t id, | |
1137 int32_t metadataType) | |
1138 { | |
1139 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1140 | |
1141 try | |
1142 { | |
1143 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1144 t->GetBackend().DeleteMetadata(t->GetManager(), id, metadataType); |
212 | 1145 return OrthancPluginErrorCode_Success; |
1146 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1147 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1148 } |
1149 | |
1150 | |
1151 static OrthancPluginErrorCode DeleteResource(OrthancPluginDatabaseTransaction* transaction, | |
1152 int64_t id) | |
1153 { | |
1154 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1155 | |
1156 try | |
1157 { | |
1158 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1159 t->GetBackend().DeleteResource(t->GetOutput(), t->GetManager(), id); |
212 | 1160 return OrthancPluginErrorCode_Success; |
1161 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1162 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1163 } |
1164 | |
1165 | |
1166 static OrthancPluginErrorCode GetAllMetadata(OrthancPluginDatabaseTransaction* transaction, | |
1167 int64_t id) | |
1168 { | |
1169 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1170 | |
1171 try | |
1172 { | |
1173 t->GetOutput().Clear(); | |
1174 | |
1175 std::map<int32_t, std::string> values; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1176 t->GetBackend().GetAllMetadata(values, t->GetManager(), id); |
212 | 1177 |
1178 for (std::map<int32_t, std::string>::const_iterator it = values.begin(); it != values.end(); ++it) | |
1179 { | |
1180 t->GetOutput().AnswerMetadata(it->first, it->second); | |
1181 } | |
1182 | |
1183 return OrthancPluginErrorCode_Success; | |
1184 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1185 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1186 } |
1187 | |
1188 | |
1189 static OrthancPluginErrorCode GetAllPublicIds(OrthancPluginDatabaseTransaction* transaction, | |
1190 OrthancPluginResourceType resourceType) | |
1191 { | |
1192 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1193 | |
1194 try | |
1195 { | |
1196 t->GetOutput().Clear(); | |
1197 | |
1198 std::list<std::string> values; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1199 t->GetBackend().GetAllPublicIds(values, t->GetManager(), resourceType); |
212 | 1200 t->GetOutput().AnswerStrings(values); |
1201 | |
1202 return OrthancPluginErrorCode_Success; | |
1203 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1204 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1205 } |
1206 | |
1207 | |
1208 static OrthancPluginErrorCode GetAllPublicIdsWithLimit(OrthancPluginDatabaseTransaction* transaction, | |
1209 OrthancPluginResourceType resourceType, | |
1210 uint64_t since, | |
1211 uint64_t limit) | |
1212 { | |
1213 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1214 | |
1215 try | |
1216 { | |
1217 t->GetOutput().Clear(); | |
1218 | |
1219 std::list<std::string> values; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1220 t->GetBackend().GetAllPublicIds(values, t->GetManager(), resourceType, since, limit); |
212 | 1221 t->GetOutput().AnswerStrings(values); |
1222 | |
1223 return OrthancPluginErrorCode_Success; | |
1224 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1225 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1226 } |
1227 | |
1228 | |
1229 static OrthancPluginErrorCode GetChanges(OrthancPluginDatabaseTransaction* transaction, | |
1230 uint8_t* targetDone /* out */, | |
1231 int64_t since, | |
1232 uint32_t maxResults) | |
1233 { | |
1234 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1235 | |
1236 try | |
1237 { | |
1238 t->GetOutput().Clear(); | |
1239 | |
1240 bool done; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1241 t->GetBackend().GetChanges(t->GetOutput(), done, t->GetManager(), since, maxResults); |
212 | 1242 *targetDone = (done ? 1 : 0); |
1243 | |
1244 return OrthancPluginErrorCode_Success; | |
1245 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1246 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1247 } |
1248 | |
1249 | |
1250 static OrthancPluginErrorCode GetChildrenInternalId(OrthancPluginDatabaseTransaction* transaction, | |
1251 int64_t id) | |
1252 { | |
1253 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1254 | |
1255 try | |
1256 { | |
1257 t->GetOutput().Clear(); | |
1258 | |
1259 std::list<int64_t> values; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1260 t->GetBackend().GetChildrenInternalId(values, t->GetManager(), id); |
212 | 1261 t->GetOutput().AnswerIntegers64(values); |
1262 | |
1263 return OrthancPluginErrorCode_Success; | |
1264 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1265 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1266 } |
1267 | |
1268 | |
1269 static OrthancPluginErrorCode GetChildrenMetadata(OrthancPluginDatabaseTransaction* transaction, | |
1270 int64_t resourceId, | |
1271 int32_t metadata) | |
1272 { | |
1273 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1274 | |
1275 try | |
1276 { | |
1277 t->GetOutput().Clear(); | |
1278 | |
1279 std::list<std::string> values; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1280 t->GetBackend().GetChildrenMetadata(values, t->GetManager(), resourceId, metadata); |
212 | 1281 t->GetOutput().AnswerStrings(values); |
1282 | |
1283 return OrthancPluginErrorCode_Success; | |
1284 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1285 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1286 } |
1287 | |
1288 | |
1289 static OrthancPluginErrorCode GetChildrenPublicId(OrthancPluginDatabaseTransaction* transaction, | |
1290 int64_t id) | |
1291 { | |
1292 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1293 | |
1294 try | |
1295 { | |
1296 t->GetOutput().Clear(); | |
1297 | |
1298 std::list<std::string> values; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1299 t->GetBackend().GetChildrenPublicId(values, t->GetManager(), id); |
212 | 1300 t->GetOutput().AnswerStrings(values); |
1301 | |
1302 return OrthancPluginErrorCode_Success; | |
1303 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1304 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1305 } |
1306 | |
1307 | |
1308 static OrthancPluginErrorCode GetExportedResources(OrthancPluginDatabaseTransaction* transaction, | |
1309 uint8_t* targetDone /* out */, | |
1310 int64_t since, | |
1311 uint32_t maxResults) | |
1312 { | |
1313 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1314 | |
1315 try | |
1316 { | |
1317 t->GetOutput().Clear(); | |
1318 | |
1319 bool done; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1320 t->GetBackend().GetExportedResources(t->GetOutput(), done, t->GetManager(), since, maxResults); |
212 | 1321 *targetDone = (done ? 1 : 0); |
1322 | |
1323 return OrthancPluginErrorCode_Success; | |
1324 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1325 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1326 } |
1327 | |
1328 | |
1329 static OrthancPluginErrorCode GetLastChange(OrthancPluginDatabaseTransaction* transaction) | |
1330 { | |
1331 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1332 | |
1333 try | |
1334 { | |
1335 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1336 t->GetBackend().GetLastChange(t->GetOutput(), t->GetManager()); |
212 | 1337 return OrthancPluginErrorCode_Success; |
1338 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1339 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1340 } |
1341 | |
1342 | |
1343 static OrthancPluginErrorCode GetLastChangeIndex(OrthancPluginDatabaseTransaction* transaction, | |
1344 int64_t* target) | |
1345 { | |
1346 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1347 | |
1348 try | |
1349 { | |
1350 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1351 *target = t->GetBackend().GetLastChangeIndex(t->GetManager()); |
212 | 1352 return OrthancPluginErrorCode_Success; |
1353 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1354 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1355 } |
1356 | |
1357 | |
1358 static OrthancPluginErrorCode GetLastExportedResource(OrthancPluginDatabaseTransaction* transaction) | |
1359 { | |
1360 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1361 | |
1362 try | |
1363 { | |
1364 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1365 t->GetBackend().GetLastExportedResource(t->GetOutput(), t->GetManager()); |
212 | 1366 return OrthancPluginErrorCode_Success; |
1367 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1368 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1369 } |
1370 | |
1371 | |
1372 static OrthancPluginErrorCode GetMainDicomTags(OrthancPluginDatabaseTransaction* transaction, | |
1373 int64_t id) | |
1374 { | |
1375 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1376 | |
1377 try | |
1378 { | |
1379 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1380 t->GetBackend().GetMainDicomTags(t->GetOutput(), t->GetManager(), id); |
212 | 1381 return OrthancPluginErrorCode_Success; |
1382 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1383 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1384 } |
1385 | |
1386 | |
1387 static OrthancPluginErrorCode GetPublicId(OrthancPluginDatabaseTransaction* transaction, | |
1388 int64_t id) | |
1389 { | |
1390 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1391 | |
1392 try | |
1393 { | |
1394 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1395 t->GetOutput().AnswerString(t->GetBackend().GetPublicId(t->GetManager(), id)); |
212 | 1396 return OrthancPluginErrorCode_Success; |
1397 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1398 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1399 } |
1400 | |
1401 | |
1402 static OrthancPluginErrorCode GetResourcesCount(OrthancPluginDatabaseTransaction* transaction, | |
1403 uint64_t* target /* out */, | |
1404 OrthancPluginResourceType resourceType) | |
1405 { | |
1406 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1407 | |
1408 try | |
1409 { | |
1410 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1411 *target = t->GetBackend().GetResourcesCount(t->GetManager(), resourceType); |
212 | 1412 return OrthancPluginErrorCode_Success; |
1413 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1414 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1415 } |
1416 | |
1417 | |
1418 static OrthancPluginErrorCode GetResourceType(OrthancPluginDatabaseTransaction* transaction, | |
1419 OrthancPluginResourceType* target /* out */, | |
1420 uint64_t resourceId) | |
1421 { | |
1422 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1423 | |
1424 try | |
1425 { | |
1426 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1427 *target = t->GetBackend().GetResourceType(t->GetManager(), resourceId); |
212 | 1428 return OrthancPluginErrorCode_Success; |
1429 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1430 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1431 } |
1432 | |
1433 | |
1434 static OrthancPluginErrorCode GetTotalCompressedSize(OrthancPluginDatabaseTransaction* transaction, | |
1435 uint64_t* target /* out */) | |
1436 { | |
1437 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1438 | |
1439 try | |
1440 { | |
1441 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1442 *target = t->GetBackend().GetTotalCompressedSize(t->GetManager()); |
212 | 1443 return OrthancPluginErrorCode_Success; |
1444 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1445 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1446 } |
1447 | |
1448 | |
1449 static OrthancPluginErrorCode GetTotalUncompressedSize(OrthancPluginDatabaseTransaction* transaction, | |
1450 uint64_t* target /* out */) | |
1451 { | |
1452 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1453 | |
1454 try | |
1455 { | |
1456 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1457 *target = t->GetBackend().GetTotalUncompressedSize(t->GetManager()); |
212 | 1458 return OrthancPluginErrorCode_Success; |
1459 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1460 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1461 } |
1462 | |
1463 | |
1464 static OrthancPluginErrorCode IsDiskSizeAbove(OrthancPluginDatabaseTransaction* transaction, | |
1465 uint8_t* target, | |
1466 uint64_t threshold) | |
1467 { | |
1468 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1469 | |
1470 try | |
1471 { | |
1472 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1473 bool above = (t->GetBackend().GetTotalCompressedSize(t->GetManager()) >= threshold); |
212 | 1474 *target = (above ? 1 : 0); |
1475 return OrthancPluginErrorCode_Success; | |
1476 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1477 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1478 } |
1479 | |
1480 | |
1481 static OrthancPluginErrorCode IsExistingResource(OrthancPluginDatabaseTransaction* transaction, | |
1482 uint8_t* target, | |
1483 int64_t resourceId) | |
1484 { | |
1485 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1486 | |
1487 try | |
1488 { | |
1489 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1490 bool exists = t->GetBackend().IsExistingResource(t->GetManager(), resourceId); |
212 | 1491 *target = (exists ? 1 : 0); |
1492 return OrthancPluginErrorCode_Success; | |
1493 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1494 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1495 } |
1496 | |
1497 | |
1498 static OrthancPluginErrorCode IsProtectedPatient(OrthancPluginDatabaseTransaction* transaction, | |
1499 uint8_t* target, | |
1500 int64_t resourceId) | |
1501 { | |
1502 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1503 | |
1504 try | |
1505 { | |
1506 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1507 bool isProtected = t->GetBackend().IsProtectedPatient(t->GetManager(), resourceId); |
212 | 1508 *target = (isProtected ? 1 : 0); |
1509 return OrthancPluginErrorCode_Success; | |
1510 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1511 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1512 } |
1513 | |
1514 | |
1515 static OrthancPluginErrorCode ListAvailableAttachments(OrthancPluginDatabaseTransaction* transaction, | |
1516 int64_t resourceId) | |
1517 { | |
1518 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1519 | |
1520 try | |
1521 { | |
1522 t->GetOutput().Clear(); | |
1523 | |
1524 std::list<int32_t> values; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1525 t->GetBackend().ListAvailableAttachments(values, t->GetManager(), resourceId); |
212 | 1526 t->GetOutput().AnswerIntegers32(values); |
1527 return OrthancPluginErrorCode_Success; | |
1528 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1529 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1530 } |
1531 | |
1532 | |
1533 static OrthancPluginErrorCode LogChange(OrthancPluginDatabaseTransaction* transaction, | |
1534 int32_t changeType, | |
1535 int64_t resourceId, | |
1536 OrthancPluginResourceType resourceType, | |
1537 const char* date) | |
1538 { | |
1539 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1540 | |
1541 try | |
1542 { | |
1543 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1544 t->GetBackend().LogChange(t->GetManager(), changeType, resourceId, resourceType, date); |
212 | 1545 return OrthancPluginErrorCode_Success; |
1546 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1547 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1548 } |
1549 | |
1550 | |
1551 static OrthancPluginErrorCode LogExportedResource(OrthancPluginDatabaseTransaction* transaction, | |
1552 OrthancPluginResourceType resourceType, | |
1553 const char* publicId, | |
1554 const char* modality, | |
1555 const char* date, | |
1556 const char* patientId, | |
1557 const char* studyInstanceUid, | |
1558 const char* seriesInstanceUid, | |
1559 const char* sopInstanceUid) | |
1560 { | |
1561 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1562 | |
1563 try | |
1564 { | |
1565 OrthancPluginExportedResource exported; | |
1566 exported.seq = 0; | |
1567 exported.resourceType = resourceType; | |
1568 exported.publicId = publicId; | |
1569 exported.modality = modality; | |
1570 exported.date = date; | |
1571 exported.patientId = patientId; | |
1572 exported.studyInstanceUid = studyInstanceUid; | |
1573 exported.seriesInstanceUid = seriesInstanceUid; | |
1574 exported.sopInstanceUid = sopInstanceUid; | |
1575 | |
1576 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1577 t->GetBackend().LogExportedResource(t->GetManager(), exported); |
212 | 1578 return OrthancPluginErrorCode_Success; |
1579 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1580 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1581 } |
1582 | |
1583 | |
1584 static OrthancPluginErrorCode LookupAttachment(OrthancPluginDatabaseTransaction* transaction, | |
1585 int64_t resourceId, | |
1586 int32_t contentType) | |
1587 { | |
1588 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1589 | |
1590 try | |
1591 { | |
1592 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1593 t->GetBackend().LookupAttachment(t->GetOutput(), t->GetManager(), resourceId, contentType); |
212 | 1594 return OrthancPluginErrorCode_Success; |
1595 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1596 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1597 } |
1598 | |
1599 | |
1600 static OrthancPluginErrorCode LookupGlobalProperty(OrthancPluginDatabaseTransaction* transaction, | |
221
73cc85f3d9c1
implementation of the "serverIdentifier" information for global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
1601 const char* serverIdentifier, |
212 | 1602 int32_t property) |
1603 { | |
1604 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1605 | |
1606 try | |
1607 { | |
1608 t->GetOutput().Clear(); | |
1609 | |
1610 std::string s; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1611 if (t->GetBackend().LookupGlobalProperty(s, t->GetManager(), serverIdentifier, property)) |
212 | 1612 { |
1613 t->GetOutput().AnswerString(s); | |
1614 } | |
1615 | |
1616 return OrthancPluginErrorCode_Success; | |
1617 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1618 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1619 } |
1620 | |
1621 | |
1622 static OrthancPluginErrorCode LookupMetadata(OrthancPluginDatabaseTransaction* transaction, | |
1623 int64_t id, | |
1624 int32_t metadata) | |
1625 { | |
1626 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1627 | |
1628 try | |
1629 { | |
1630 t->GetOutput().Clear(); | |
1631 | |
1632 std::string s; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1633 if (t->GetBackend().LookupMetadata(s, t->GetManager(), id, metadata)) |
212 | 1634 { |
1635 t->GetOutput().AnswerString(s); | |
1636 } | |
1637 | |
1638 return OrthancPluginErrorCode_Success; | |
1639 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1640 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1641 } |
1642 | |
1643 | |
1644 static OrthancPluginErrorCode LookupParent(OrthancPluginDatabaseTransaction* transaction, | |
1645 int64_t id) | |
1646 { | |
1647 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1648 | |
1649 try | |
1650 { | |
1651 t->GetOutput().Clear(); | |
1652 | |
1653 int64_t parentId; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1654 if (t->GetBackend().LookupParent(parentId, t->GetManager(), id)) |
212 | 1655 { |
1656 t->GetOutput().AnswerInteger64(parentId); | |
1657 } | |
1658 | |
1659 return OrthancPluginErrorCode_Success; | |
1660 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1661 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1662 } |
1663 | |
1664 | |
1665 static OrthancPluginErrorCode LookupResource(OrthancPluginDatabaseTransaction* transaction, | |
1666 uint8_t* isExisting /* out */, | |
1667 int64_t* id /* out */, | |
1668 OrthancPluginResourceType* type /* out */, | |
1669 const char* publicId) | |
1670 { | |
1671 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1672 | |
1673 try | |
1674 { | |
1675 t->GetOutput().Clear(); | |
1676 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1677 if (t->GetBackend().LookupResource(*id, *type, t->GetManager(), publicId)) |
212 | 1678 { |
1679 *isExisting = 1; | |
1680 } | |
1681 else | |
1682 { | |
1683 *isExisting = 0; | |
1684 } | |
1685 | |
1686 return OrthancPluginErrorCode_Success; | |
1687 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1688 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1689 } |
1690 | |
1691 | |
1692 static OrthancPluginErrorCode LookupResources(OrthancPluginDatabaseTransaction* transaction, | |
1693 uint32_t constraintsCount, | |
1694 const OrthancPluginDatabaseConstraint* constraints, | |
1695 OrthancPluginResourceType queryLevel, | |
1696 uint32_t limit, | |
1697 uint8_t requestSomeInstanceId) | |
1698 { | |
1699 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1700 | |
1701 try | |
1702 { | |
1703 t->GetOutput().Clear(); | |
1704 | |
1705 std::vector<Orthanc::DatabaseConstraint> lookup; | |
1706 lookup.reserve(constraintsCount); | |
1707 | |
1708 for (uint32_t i = 0; i < constraintsCount; i++) | |
1709 { | |
1710 lookup.push_back(Orthanc::DatabaseConstraint(constraints[i])); | |
1711 } | |
1712 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1713 t->GetBackend().LookupResources(t->GetOutput(), t->GetManager(), lookup, queryLevel, limit, (requestSomeInstanceId != 0)); |
212 | 1714 return OrthancPluginErrorCode_Success; |
1715 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1716 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1717 } |
1718 | |
1719 | |
1720 static OrthancPluginErrorCode LookupResourceAndParent(OrthancPluginDatabaseTransaction* transaction, | |
1721 uint8_t* isExisting /* out */, | |
1722 int64_t* id /* out */, | |
1723 OrthancPluginResourceType* type /* out */, | |
1724 const char* publicId) | |
1725 { | |
1726 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1727 | |
1728 try | |
1729 { | |
1730 t->GetOutput().Clear(); | |
1731 | |
1732 std::string parent; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1733 if (t->GetBackend().LookupResourceAndParent(*id, *type, parent, t->GetManager(), publicId)) |
212 | 1734 { |
1735 *isExisting = 1; | |
1736 | |
1737 if (!parent.empty()) | |
1738 { | |
1739 t->GetOutput().AnswerString(parent); | |
1740 } | |
1741 } | |
1742 else | |
1743 { | |
1744 *isExisting = 0; | |
1745 } | |
1746 | |
1747 return OrthancPluginErrorCode_Success; | |
1748 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1749 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1750 } |
1751 | |
1752 | |
1753 static OrthancPluginErrorCode SelectPatientToRecycle(OrthancPluginDatabaseTransaction* transaction) | |
1754 { | |
1755 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1756 | |
1757 try | |
1758 { | |
1759 t->GetOutput().Clear(); | |
1760 | |
1761 int64_t id; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1762 if (t->GetBackend().SelectPatientToRecycle(id, t->GetManager())) |
212 | 1763 { |
1764 t->GetOutput().AnswerInteger64(id); | |
1765 } | |
1766 | |
1767 return OrthancPluginErrorCode_Success; | |
1768 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1769 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1770 } |
1771 | |
1772 | |
1773 static OrthancPluginErrorCode SelectPatientToRecycle2(OrthancPluginDatabaseTransaction* transaction, | |
1774 int64_t patientIdToAvoid) | |
1775 { | |
1776 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1777 | |
1778 try | |
1779 { | |
1780 t->GetOutput().Clear(); | |
1781 | |
1782 int64_t id; | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1783 if (t->GetBackend().SelectPatientToRecycle(id, t->GetManager(), patientIdToAvoid)) |
212 | 1784 { |
1785 t->GetOutput().AnswerInteger64(id); | |
1786 } | |
1787 | |
1788 return OrthancPluginErrorCode_Success; | |
1789 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1790 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1791 } |
1792 | |
1793 | |
1794 static OrthancPluginErrorCode SetGlobalProperty(OrthancPluginDatabaseTransaction* transaction, | |
221
73cc85f3d9c1
implementation of the "serverIdentifier" information for global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
1795 const char* serverIdentifier, |
212 | 1796 int32_t property, |
1797 const char* value) | |
1798 { | |
1799 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1800 | |
1801 try | |
1802 { | |
1803 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1804 t->GetBackend().SetGlobalProperty(t->GetManager(), serverIdentifier, property, value); |
212 | 1805 return OrthancPluginErrorCode_Success; |
1806 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1807 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1808 } |
1809 | |
1810 | |
1811 static OrthancPluginErrorCode SetMetadata(OrthancPluginDatabaseTransaction* transaction, | |
1812 int64_t id, | |
1813 int32_t metadata, | |
1814 const char* value) | |
1815 { | |
1816 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1817 | |
1818 try | |
1819 { | |
1820 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1821 t->GetBackend().SetMetadata(t->GetManager(), id, metadata, value); |
212 | 1822 return OrthancPluginErrorCode_Success; |
1823 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1824 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1825 } |
1826 | |
1827 | |
1828 static OrthancPluginErrorCode SetProtectedPatient(OrthancPluginDatabaseTransaction* transaction, | |
1829 int64_t id, | |
1830 uint8_t isProtected) | |
1831 { | |
1832 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1833 | |
1834 try | |
1835 { | |
1836 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1837 t->GetBackend().SetProtectedPatient(t->GetManager(), id, (isProtected != 0)); |
212 | 1838 return OrthancPluginErrorCode_Success; |
1839 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1840 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1841 } |
1842 | |
1843 | |
1844 static OrthancPluginErrorCode SetResourcesContent(OrthancPluginDatabaseTransaction* transaction, | |
1845 uint32_t countIdentifierTags, | |
1846 const OrthancPluginResourcesContentTags* identifierTags, | |
1847 uint32_t countMainDicomTags, | |
1848 const OrthancPluginResourcesContentTags* mainDicomTags, | |
1849 uint32_t countMetadata, | |
1850 const OrthancPluginResourcesContentMetadata* metadata) | |
1851 { | |
1852 DatabaseBackendAdapterV3::Transaction* t = reinterpret_cast<DatabaseBackendAdapterV3::Transaction*>(transaction); | |
1853 | |
1854 try | |
1855 { | |
1856 t->GetOutput().Clear(); | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1857 t->GetBackend().SetResourcesContent(t->GetManager(), countIdentifierTags, identifierTags, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1858 countMainDicomTags, mainDicomTags, countMetadata, metadata); |
212 | 1859 return OrthancPluginErrorCode_Success; |
1860 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1861 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetBackend().GetContext()); |
212 | 1862 } |
1863 | |
1864 | |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1865 void DatabaseBackendAdapterV3::Register(IndexBackend* backend) |
212 | 1866 { |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1867 if (isBackendInUse_) |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1868 { |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1869 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1870 } |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1871 |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1872 if (backend == NULL) |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1873 { |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1874 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1875 } |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1876 |
212 | 1877 OrthancPluginDatabaseBackendV3 params; |
1878 memset(¶ms, 0, sizeof(params)); | |
1879 | |
1880 params.readAnswersCount = ReadAnswersCount; | |
1881 params.readAnswerAttachment = ReadAnswerAttachment; | |
1882 params.readAnswerChange = ReadAnswerChange; | |
1883 params.readAnswerDicomTag = ReadAnswerDicomTag; | |
1884 params.readAnswerExportedResource = ReadAnswerExportedResource; | |
1885 params.readAnswerInt32 = ReadAnswerInt32; | |
1886 params.readAnswerInt64 = ReadAnswerInt64; | |
1887 params.readAnswerMatchingResource = ReadAnswerMatchingResource; | |
1888 params.readAnswerMetadata = ReadAnswerMetadata; | |
1889 params.readAnswerString = ReadAnswerString; | |
1890 | |
1891 params.readEventsCount = ReadEventsCount; | |
1892 params.readEvent = ReadEvent; | |
1893 | |
1894 params.open = Open; | |
1895 params.close = Close; | |
1896 params.destructDatabase = DestructDatabase; | |
1897 params.getDatabaseVersion = GetDatabaseVersion; | |
1898 params.upgradeDatabase = UpgradeDatabase; | |
1899 params.startTransaction = StartTransaction; | |
1900 params.destructTransaction = DestructTransaction; | |
1901 params.rollback = Rollback; | |
1902 params.commit = Commit; | |
1903 | |
1904 params.addAttachment = AddAttachment; | |
1905 params.clearChanges = ClearChanges; | |
1906 params.clearExportedResources = ClearExportedResources; | |
1907 params.clearMainDicomTags = ClearMainDicomTags; | |
1908 params.createInstance = CreateInstance; | |
1909 params.deleteAttachment = DeleteAttachment; | |
1910 params.deleteMetadata = DeleteMetadata; | |
1911 params.deleteResource = DeleteResource; | |
1912 params.getAllMetadata = GetAllMetadata; | |
1913 params.getAllPublicIds = GetAllPublicIds; | |
1914 params.getAllPublicIdsWithLimit = GetAllPublicIdsWithLimit; | |
1915 params.getChanges = GetChanges; | |
1916 params.getChildrenInternalId = GetChildrenInternalId; | |
1917 params.getChildrenMetadata = GetChildrenMetadata; | |
1918 params.getChildrenPublicId = GetChildrenPublicId; | |
1919 params.getExportedResources = GetExportedResources; | |
1920 params.getLastChange = GetLastChange; | |
1921 params.getLastChangeIndex = GetLastChangeIndex; | |
1922 params.getLastExportedResource = GetLastExportedResource; | |
1923 params.getMainDicomTags = GetMainDicomTags; | |
1924 params.getPublicId = GetPublicId; | |
1925 params.getResourcesCount = GetResourcesCount; | |
1926 params.getResourceType = GetResourceType; | |
1927 params.getTotalCompressedSize = GetTotalCompressedSize; | |
1928 params.getTotalUncompressedSize = GetTotalUncompressedSize; | |
1929 params.isDiskSizeAbove = IsDiskSizeAbove; | |
1930 params.isExistingResource = IsExistingResource; | |
1931 params.isProtectedPatient = IsProtectedPatient; | |
1932 params.listAvailableAttachments = ListAvailableAttachments; | |
1933 params.logChange = LogChange; | |
1934 params.logExportedResource = LogExportedResource; | |
1935 params.lookupAttachment = LookupAttachment; | |
1936 params.lookupGlobalProperty = LookupGlobalProperty; | |
1937 params.lookupMetadata = LookupMetadata; | |
1938 params.lookupParent = LookupParent; | |
1939 params.lookupResource = LookupResource; | |
1940 params.lookupResources = LookupResources; | |
1941 params.lookupResourceAndParent = LookupResourceAndParent; | |
1942 params.selectPatientToRecycle = SelectPatientToRecycle; | |
1943 params.selectPatientToRecycle2 = SelectPatientToRecycle2; | |
1944 params.setGlobalProperty = SetGlobalProperty; | |
1945 params.setMetadata = SetMetadata; | |
1946 params.setProtectedPatient = SetProtectedPatient; | |
1947 params.setResourcesContent = SetResourcesContent; | |
1948 | |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1949 OrthancPluginContext* context = backend->GetContext(); |
212 | 1950 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
223
diff
changeset
|
1951 if (OrthancPluginRegisterDatabaseBackendV3(context, ¶ms, sizeof(params), new Adapter(backend)) != OrthancPluginErrorCode_Success) |
212 | 1952 { |
1953 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Unable to register the database backend"); | |
1954 } | |
1955 | |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1956 backend->SetOutputFactory(new Factory); |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1957 |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1958 isBackendInUse_ = true; |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1959 } |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1960 |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1961 |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1962 void DatabaseBackendAdapterV3::Finalize() |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
1963 { |
223
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1964 if (isBackendInUse_) |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1965 { |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1966 fprintf(stderr, "The Orthanc core has not destructed the index backend, internal error\n"); |
af049cd66661
removed singleton from DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1967 } |
212 | 1968 } |
1969 } | |
1970 | |
1971 # endif | |
1972 #endif |