Mercurial > hg > orthanc-databases
annotate Framework/Plugins/OrthancCppDatabasePlugin.h @ 202:2def2df94f94
reorganization
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 18 Mar 2021 17:00:38 +0100 |
parents | 42990b2dd51b |
children | 2089d4071408 |
rev | line source |
---|---|
0 | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
193
3236894320d6
upgrade to year 2021
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
5 * Copyright (C) 2017-2021 Osimis S.A., Belgium |
0 | 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 | |
23 /** | |
24 * NOTE: Until Orthanc 1.4.0, this file was part of the Orthanc source | |
25 * distribution. This file is now part of "orthanc-databases", in | |
26 * order to uncouple its evolution from the Orthanc core. | |
27 **/ | |
28 | |
29 #pragma once | |
30 | |
1
d17b2631bb67
starting StorageBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
31 #if HAS_ORTHANC_EXCEPTION != 1 |
d17b2631bb67
starting StorageBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
32 # error HAS_ORTHANC_EXCEPTION must be set to 1 |
d17b2631bb67
starting StorageBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
33 #endif |
d17b2631bb67
starting StorageBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
34 |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
35 #if ORTHANC_ENABLE_PLUGINS != 1 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
36 # error ORTHANC_ENABLE_PLUGINS must be set to 1 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
37 #endif |
0 | 38 |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
39 |
202 | 40 #include "IDatabaseBackend.h" |
152 | 41 |
42 #include <OrthancException.h> | |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
43 |
0 | 44 |
1
d17b2631bb67
starting StorageBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
45 |
200 | 46 #define ORTHANC_PLUGINS_DATABASE_CATCH \ |
47 catch (::Orthanc::OrthancException& e) \ | |
48 { \ | |
49 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); \ | |
50 } \ | |
51 catch (::std::runtime_error& e) \ | |
52 { \ | |
53 LogError(backend, e); \ | |
54 return OrthancPluginErrorCode_DatabasePlugin; \ | |
55 } \ | |
56 catch (...) \ | |
57 { \ | |
199 | 58 OrthancPluginLogError(backend->GetContext(), "Native exception"); \ |
200 | 59 return OrthancPluginErrorCode_DatabasePlugin; \ |
0 | 60 } |
61 | |
62 | |
63 #include <stdexcept> | |
64 #include <list> | |
65 #include <string> | |
66 | |
67 namespace OrthancPlugins | |
202 | 68 { |
200 | 69 class DatabaseBackendOutputV2 : public IDatabaseBackendOutput |
70 { | |
71 public: | |
72 enum AllowedAnswers | |
73 { | |
74 AllowedAnswers_All, | |
75 AllowedAnswers_None, | |
76 AllowedAnswers_Attachment, | |
77 AllowedAnswers_Change, | |
78 AllowedAnswers_DicomTag, | |
79 AllowedAnswers_ExportedResource, | |
80 AllowedAnswers_MatchingResource, | |
81 AllowedAnswers_String, | |
82 AllowedAnswers_Metadata | |
83 }; | |
84 | |
85 private: | |
86 OrthancPluginContext* context_; | |
87 OrthancPluginDatabaseContext* database_; | |
88 AllowedAnswers allowedAnswers_; | |
89 | |
90 public: | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
91 class Factory : public IFactory |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
92 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
93 private: |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
94 OrthancPluginContext* context_; |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
95 OrthancPluginDatabaseContext* database_; |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
96 |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
97 public: |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
98 Factory(OrthancPluginContext* context, |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
99 OrthancPluginDatabaseContext* database) : |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
100 context_(context), |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
101 database_(database) |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
102 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
103 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
104 |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
105 virtual IDatabaseBackendOutput* CreateOutput() ORTHANC_OVERRIDE |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
106 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
107 return new DatabaseBackendOutputV2(context_, database_); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
108 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
109 }; |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
110 |
200 | 111 DatabaseBackendOutputV2(OrthancPluginContext* context, |
112 OrthancPluginDatabaseContext* database) : | |
113 context_(context), | |
114 database_(database), | |
115 allowedAnswers_(AllowedAnswers_All /* for unit tests */) | |
116 { | |
117 } | |
118 | |
119 void SetAllowedAnswers(AllowedAnswers allowed) | |
120 { | |
121 allowedAnswers_ = allowed; | |
122 } | |
123 | |
124 OrthancPluginDatabaseContext* GetDatabase() const | |
125 { | |
126 return database_; | |
127 } | |
128 | |
129 virtual void SignalDeletedAttachment(const std::string& uuid, | |
130 int32_t contentType, | |
131 uint64_t uncompressedSize, | |
132 const std::string& uncompressedHash, | |
133 int32_t compressionType, | |
134 uint64_t compressedSize, | |
135 const std::string& compressedHash) ORTHANC_OVERRIDE | |
136 { | |
137 OrthancPluginAttachment attachment; | |
138 attachment.uuid = uuid.c_str(); | |
139 attachment.contentType = contentType; | |
140 attachment.uncompressedSize = uncompressedSize; | |
141 attachment.uncompressedHash = uncompressedHash.c_str(); | |
142 attachment.compressionType = compressionType; | |
143 attachment.compressedSize = compressedSize; | |
144 attachment.compressedHash = compressedHash.c_str(); | |
145 | |
146 OrthancPluginDatabaseSignalDeletedAttachment(context_, database_, &attachment); | |
147 } | |
148 | |
149 virtual void SignalDeletedResource(const std::string& publicId, | |
150 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE | |
151 { | |
152 OrthancPluginDatabaseSignalDeletedResource(context_, database_, publicId.c_str(), resourceType); | |
153 } | |
154 | |
155 virtual void SignalRemainingAncestor(const std::string& ancestorId, | |
156 OrthancPluginResourceType ancestorType) ORTHANC_OVERRIDE | |
157 { | |
158 OrthancPluginDatabaseSignalRemainingAncestor(context_, database_, ancestorId.c_str(), ancestorType); | |
159 } | |
160 | |
161 virtual void AnswerAttachment(const std::string& uuid, | |
162 int32_t contentType, | |
163 uint64_t uncompressedSize, | |
164 const std::string& uncompressedHash, | |
165 int32_t compressionType, | |
166 uint64_t compressedSize, | |
167 const std::string& compressedHash) ORTHANC_OVERRIDE | |
168 { | |
169 if (allowedAnswers_ != AllowedAnswers_All && | |
170 allowedAnswers_ != AllowedAnswers_Attachment) | |
171 { | |
172 throw std::runtime_error("Cannot answer with an attachment in the current state"); | |
173 } | |
174 | |
175 OrthancPluginAttachment attachment; | |
176 attachment.uuid = uuid.c_str(); | |
177 attachment.contentType = contentType; | |
178 attachment.uncompressedSize = uncompressedSize; | |
179 attachment.uncompressedHash = uncompressedHash.c_str(); | |
180 attachment.compressionType = compressionType; | |
181 attachment.compressedSize = compressedSize; | |
182 attachment.compressedHash = compressedHash.c_str(); | |
183 | |
184 OrthancPluginDatabaseAnswerAttachment(context_, database_, &attachment); | |
185 } | |
186 | |
187 virtual void AnswerChange(int64_t seq, | |
188 int32_t changeType, | |
189 OrthancPluginResourceType resourceType, | |
190 const std::string& publicId, | |
191 const std::string& date) ORTHANC_OVERRIDE | |
192 { | |
193 if (allowedAnswers_ != AllowedAnswers_All && | |
194 allowedAnswers_ != AllowedAnswers_Change) | |
195 { | |
196 throw std::runtime_error("Cannot answer with a change in the current state"); | |
197 } | |
198 | |
199 OrthancPluginChange change; | |
200 change.seq = seq; | |
201 change.changeType = changeType; | |
202 change.resourceType = resourceType; | |
203 change.publicId = publicId.c_str(); | |
204 change.date = date.c_str(); | |
205 | |
206 OrthancPluginDatabaseAnswerChange(context_, database_, &change); | |
207 } | |
208 | |
209 virtual void AnswerDicomTag(uint16_t group, | |
210 uint16_t element, | |
211 const std::string& value) ORTHANC_OVERRIDE | |
212 { | |
213 if (allowedAnswers_ != AllowedAnswers_All && | |
214 allowedAnswers_ != AllowedAnswers_DicomTag) | |
215 { | |
216 throw std::runtime_error("Cannot answer with a DICOM tag in the current state"); | |
217 } | |
218 | |
219 OrthancPluginDicomTag tag; | |
220 tag.group = group; | |
221 tag.element = element; | |
222 tag.value = value.c_str(); | |
223 | |
224 OrthancPluginDatabaseAnswerDicomTag(context_, database_, &tag); | |
225 } | |
226 | |
227 virtual void AnswerExportedResource(int64_t seq, | |
228 OrthancPluginResourceType resourceType, | |
229 const std::string& publicId, | |
230 const std::string& modality, | |
231 const std::string& date, | |
232 const std::string& patientId, | |
233 const std::string& studyInstanceUid, | |
234 const std::string& seriesInstanceUid, | |
235 const std::string& sopInstanceUid) ORTHANC_OVERRIDE | |
236 { | |
237 if (allowedAnswers_ != AllowedAnswers_All && | |
238 allowedAnswers_ != AllowedAnswers_ExportedResource) | |
239 { | |
240 throw std::runtime_error("Cannot answer with an exported resource in the current state"); | |
241 } | |
242 | |
243 OrthancPluginExportedResource exported; | |
244 exported.seq = seq; | |
245 exported.resourceType = resourceType; | |
246 exported.publicId = publicId.c_str(); | |
247 exported.modality = modality.c_str(); | |
248 exported.date = date.c_str(); | |
249 exported.patientId = patientId.c_str(); | |
250 exported.studyInstanceUid = studyInstanceUid.c_str(); | |
251 exported.seriesInstanceUid = seriesInstanceUid.c_str(); | |
252 exported.sopInstanceUid = sopInstanceUid.c_str(); | |
253 | |
254 OrthancPluginDatabaseAnswerExportedResource(context_, database_, &exported); | |
255 } | |
256 | |
257 | |
258 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 | |
259 virtual void AnswerMatchingResource(const std::string& resourceId) ORTHANC_OVERRIDE | |
260 { | |
261 if (allowedAnswers_ != AllowedAnswers_All && | |
262 allowedAnswers_ != AllowedAnswers_MatchingResource) | |
263 { | |
264 throw std::runtime_error("Cannot answer with an exported resource in the current state"); | |
265 } | |
266 | |
267 OrthancPluginMatchingResource match; | |
268 match.resourceId = resourceId.c_str(); | |
269 match.someInstanceId = NULL; | |
270 | |
271 OrthancPluginDatabaseAnswerMatchingResource(context_, database_, &match); | |
272 } | |
273 #endif | |
274 | |
275 | |
276 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 | |
277 virtual void AnswerMatchingResource(const std::string& resourceId, | |
278 const std::string& someInstanceId) ORTHANC_OVERRIDE | |
279 { | |
280 if (allowedAnswers_ != AllowedAnswers_All && | |
281 allowedAnswers_ != AllowedAnswers_MatchingResource) | |
282 { | |
283 throw std::runtime_error("Cannot answer with an exported resource in the current state"); | |
284 } | |
285 | |
286 OrthancPluginMatchingResource match; | |
287 match.resourceId = resourceId.c_str(); | |
288 match.someInstanceId = someInstanceId.c_str(); | |
289 | |
290 OrthancPluginDatabaseAnswerMatchingResource(context_, database_, &match); | |
291 } | |
292 #endif | |
293 }; | |
294 | |
295 | |
0 | 296 /** |
297 * @brief Bridge between C and C++ database engines. | |
298 * | |
299 * Class creating the bridge between the C low-level primitives for | |
300 * custom database engines, and the high-level IDatabaseBackend C++ | |
301 * interface. | |
302 * | |
303 * @ingroup Callbacks | |
304 **/ | |
200 | 305 class DatabaseBackendAdapterV2 |
0 | 306 { |
307 private: | |
308 // This class cannot be instantiated | |
200 | 309 DatabaseBackendAdapterV2() |
0 | 310 { |
311 } | |
312 | |
313 static void LogError(IDatabaseBackend* backend, | |
314 const std::runtime_error& e) | |
315 { | |
198 | 316 const std::string message = "Exception in database back-end: " + std::string(e.what()); |
199 | 317 OrthancPluginLogError(backend->GetContext(), message.c_str()); |
0 | 318 } |
319 | |
320 | |
321 static OrthancPluginErrorCode AddAttachment(void* payload, | |
322 int64_t id, | |
323 const OrthancPluginAttachment* attachment) | |
324 { | |
325 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
326 | |
327 try | |
328 { | |
329 backend->AddAttachment(id, *attachment); | |
330 return OrthancPluginErrorCode_Success; | |
331 } | |
200 | 332 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 333 } |
334 | |
335 | |
336 static OrthancPluginErrorCode AttachChild(void* payload, | |
337 int64_t parent, | |
338 int64_t child) | |
339 { | |
340 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
341 | |
342 try | |
343 { | |
344 backend->AttachChild(parent, child); | |
345 return OrthancPluginErrorCode_Success; | |
346 } | |
200 | 347 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 348 } |
349 | |
350 | |
351 static OrthancPluginErrorCode ClearChanges(void* payload) | |
352 { | |
353 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
354 | |
355 try | |
356 { | |
357 backend->ClearChanges(); | |
358 return OrthancPluginErrorCode_Success; | |
359 } | |
200 | 360 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 361 } |
362 | |
363 | |
364 static OrthancPluginErrorCode ClearExportedResources(void* payload) | |
365 { | |
366 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
367 | |
368 try | |
369 { | |
370 backend->ClearExportedResources(); | |
371 return OrthancPluginErrorCode_Success; | |
372 } | |
200 | 373 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 374 } |
375 | |
376 | |
377 static OrthancPluginErrorCode CreateResource(int64_t* id, | |
378 void* payload, | |
379 const char* publicId, | |
380 OrthancPluginResourceType resourceType) | |
381 { | |
382 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
383 | |
384 try | |
385 { | |
386 *id = backend->CreateResource(publicId, resourceType); | |
387 return OrthancPluginErrorCode_Success; | |
388 } | |
200 | 389 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 390 } |
391 | |
392 | |
393 static OrthancPluginErrorCode DeleteAttachment(void* payload, | |
394 int64_t id, | |
395 int32_t contentType) | |
396 { | |
397 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
398 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
399 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 400 |
401 try | |
402 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
403 backend->DeleteAttachment(*output, id, contentType); |
0 | 404 return OrthancPluginErrorCode_Success; |
405 } | |
200 | 406 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 407 } |
408 | |
409 | |
410 static OrthancPluginErrorCode DeleteMetadata(void* payload, | |
411 int64_t id, | |
412 int32_t metadataType) | |
413 { | |
414 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
415 | |
416 try | |
417 { | |
418 backend->DeleteMetadata(id, metadataType); | |
419 return OrthancPluginErrorCode_Success; | |
420 } | |
200 | 421 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 422 } |
423 | |
424 | |
425 static OrthancPluginErrorCode DeleteResource(void* payload, | |
426 int64_t id) | |
427 { | |
428 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
429 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
430 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 431 |
432 try | |
433 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
434 backend->DeleteResource(*output, id); |
0 | 435 return OrthancPluginErrorCode_Success; |
436 } | |
200 | 437 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 438 } |
439 | |
440 | |
441 static OrthancPluginErrorCode GetAllInternalIds(OrthancPluginDatabaseContext* context, | |
442 void* payload, | |
443 OrthancPluginResourceType resourceType) | |
444 { | |
445 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
446 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
447 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 448 |
449 try | |
450 { | |
451 std::list<int64_t> target; | |
452 backend->GetAllInternalIds(target, resourceType); | |
453 | |
454 for (std::list<int64_t>::const_iterator | |
455 it = target.begin(); it != target.end(); ++it) | |
456 { | |
199 | 457 OrthancPluginDatabaseAnswerInt64(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
458 output->GetDatabase(), *it); |
0 | 459 } |
460 | |
461 return OrthancPluginErrorCode_Success; | |
462 } | |
200 | 463 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 464 } |
465 | |
466 | |
467 static OrthancPluginErrorCode GetAllPublicIds(OrthancPluginDatabaseContext* context, | |
468 void* payload, | |
469 OrthancPluginResourceType resourceType) | |
470 { | |
471 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
472 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
473 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 474 |
475 try | |
476 { | |
477 std::list<std::string> ids; | |
478 backend->GetAllPublicIds(ids, resourceType); | |
479 | |
480 for (std::list<std::string>::const_iterator | |
481 it = ids.begin(); it != ids.end(); ++it) | |
482 { | |
199 | 483 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
484 output->GetDatabase(), |
0 | 485 it->c_str()); |
486 } | |
487 | |
488 return OrthancPluginErrorCode_Success; | |
489 } | |
200 | 490 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 491 } |
492 | |
493 | |
494 static OrthancPluginErrorCode GetAllPublicIdsWithLimit(OrthancPluginDatabaseContext* context, | |
495 void* payload, | |
496 OrthancPluginResourceType resourceType, | |
497 uint64_t since, | |
498 uint64_t limit) | |
499 { | |
500 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
501 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
502 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 503 |
504 try | |
505 { | |
506 std::list<std::string> ids; | |
507 backend->GetAllPublicIds(ids, resourceType, since, limit); | |
508 | |
509 for (std::list<std::string>::const_iterator | |
510 it = ids.begin(); it != ids.end(); ++it) | |
511 { | |
199 | 512 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
513 output->GetDatabase(), |
0 | 514 it->c_str()); |
515 } | |
516 | |
517 return OrthancPluginErrorCode_Success; | |
518 } | |
200 | 519 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 520 } |
521 | |
522 | |
523 static OrthancPluginErrorCode GetChanges(OrthancPluginDatabaseContext* context, | |
524 void* payload, | |
525 int64_t since, | |
526 uint32_t maxResult) | |
527 { | |
528 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
529 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
530 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_Change); |
0 | 531 |
532 try | |
533 { | |
534 bool done; | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
535 backend->GetChanges(*output, done, since, maxResult); |
0 | 536 |
537 if (done) | |
538 { | |
199 | 539 OrthancPluginDatabaseAnswerChangesDone(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
540 output->GetDatabase()); |
0 | 541 } |
542 | |
543 return OrthancPluginErrorCode_Success; | |
544 } | |
200 | 545 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 546 } |
547 | |
548 | |
549 static OrthancPluginErrorCode GetChildrenInternalId(OrthancPluginDatabaseContext* context, | |
550 void* payload, | |
551 int64_t id) | |
552 { | |
553 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
554 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
555 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 556 |
557 try | |
558 { | |
559 std::list<int64_t> target; | |
560 backend->GetChildrenInternalId(target, id); | |
561 | |
562 for (std::list<int64_t>::const_iterator | |
563 it = target.begin(); it != target.end(); ++it) | |
564 { | |
199 | 565 OrthancPluginDatabaseAnswerInt64(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
566 output->GetDatabase(), *it); |
0 | 567 } |
568 | |
569 return OrthancPluginErrorCode_Success; | |
570 } | |
200 | 571 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 572 } |
573 | |
574 | |
575 static OrthancPluginErrorCode GetChildrenPublicId(OrthancPluginDatabaseContext* context, | |
576 void* payload, | |
577 int64_t id) | |
578 { | |
579 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
580 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
581 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 582 |
583 try | |
584 { | |
585 std::list<std::string> ids; | |
586 backend->GetChildrenPublicId(ids, id); | |
587 | |
588 for (std::list<std::string>::const_iterator | |
589 it = ids.begin(); it != ids.end(); ++it) | |
590 { | |
199 | 591 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
592 output->GetDatabase(), |
0 | 593 it->c_str()); |
594 } | |
595 | |
596 return OrthancPluginErrorCode_Success; | |
597 } | |
200 | 598 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 599 } |
600 | |
601 | |
602 static OrthancPluginErrorCode GetExportedResources(OrthancPluginDatabaseContext* context, | |
603 void* payload, | |
604 int64_t since, | |
605 uint32_t maxResult) | |
606 { | |
607 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
608 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
609 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_ExportedResource); |
0 | 610 |
611 try | |
612 { | |
613 bool done; | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
614 backend->GetExportedResources(*output, done, since, maxResult); |
0 | 615 |
616 if (done) | |
617 { | |
199 | 618 OrthancPluginDatabaseAnswerExportedResourcesDone(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
619 output->GetDatabase()); |
0 | 620 } |
621 return OrthancPluginErrorCode_Success; | |
622 } | |
200 | 623 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 624 } |
625 | |
626 | |
627 static OrthancPluginErrorCode GetLastChange(OrthancPluginDatabaseContext* context, | |
628 void* payload) | |
629 { | |
630 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
631 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
632 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_Change); |
0 | 633 |
634 try | |
635 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
636 backend->GetLastChange(*output); |
0 | 637 return OrthancPluginErrorCode_Success; |
638 } | |
200 | 639 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 640 } |
641 | |
642 | |
643 static OrthancPluginErrorCode GetLastExportedResource(OrthancPluginDatabaseContext* context, | |
644 void* payload) | |
645 { | |
646 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
647 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
648 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_ExportedResource); |
0 | 649 |
650 try | |
651 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
652 backend->GetLastExportedResource(*output); |
0 | 653 return OrthancPluginErrorCode_Success; |
654 } | |
200 | 655 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 656 } |
657 | |
658 | |
659 static OrthancPluginErrorCode GetMainDicomTags(OrthancPluginDatabaseContext* context, | |
660 void* payload, | |
661 int64_t id) | |
662 { | |
663 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
664 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
665 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_DicomTag); |
0 | 666 |
667 try | |
668 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
669 backend->GetMainDicomTags(*output, id); |
0 | 670 return OrthancPluginErrorCode_Success; |
671 } | |
200 | 672 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 673 } |
674 | |
675 | |
676 static OrthancPluginErrorCode GetPublicId(OrthancPluginDatabaseContext* context, | |
677 void* payload, | |
678 int64_t id) | |
679 { | |
680 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
681 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
682 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 683 |
684 try | |
685 { | |
686 std::string s = backend->GetPublicId(id); | |
199 | 687 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
688 output->GetDatabase(), |
0 | 689 s.c_str()); |
690 | |
691 return OrthancPluginErrorCode_Success; | |
692 } | |
200 | 693 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 694 } |
695 | |
696 | |
697 static OrthancPluginErrorCode GetResourceCount(uint64_t* target, | |
698 void* payload, | |
699 OrthancPluginResourceType resourceType) | |
700 { | |
701 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
702 | |
703 try | |
704 { | |
705 *target = backend->GetResourceCount(resourceType); | |
706 return OrthancPluginErrorCode_Success; | |
707 } | |
200 | 708 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 709 } |
710 | |
711 | |
712 static OrthancPluginErrorCode GetResourceType(OrthancPluginResourceType* resourceType, | |
713 void* payload, | |
714 int64_t id) | |
715 { | |
716 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
717 | |
718 try | |
719 { | |
720 *resourceType = backend->GetResourceType(id); | |
721 return OrthancPluginErrorCode_Success; | |
722 } | |
200 | 723 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 724 } |
725 | |
726 | |
727 static OrthancPluginErrorCode GetTotalCompressedSize(uint64_t* target, | |
728 void* payload) | |
729 { | |
730 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
731 | |
732 try | |
733 { | |
734 *target = backend->GetTotalCompressedSize(); | |
735 return OrthancPluginErrorCode_Success; | |
736 } | |
200 | 737 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 738 } |
739 | |
740 | |
741 static OrthancPluginErrorCode GetTotalUncompressedSize(uint64_t* target, | |
742 void* payload) | |
743 { | |
744 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
745 | |
746 try | |
747 { | |
748 *target = backend->GetTotalUncompressedSize(); | |
749 return OrthancPluginErrorCode_Success; | |
750 } | |
200 | 751 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 752 } |
753 | |
754 | |
755 static OrthancPluginErrorCode IsExistingResource(int32_t* existing, | |
756 void* payload, | |
757 int64_t id) | |
758 { | |
759 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
760 | |
761 try | |
762 { | |
763 *existing = backend->IsExistingResource(id); | |
764 return OrthancPluginErrorCode_Success; | |
765 } | |
200 | 766 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 767 } |
768 | |
769 | |
770 static OrthancPluginErrorCode IsProtectedPatient(int32_t* isProtected, | |
771 void* payload, | |
772 int64_t id) | |
773 { | |
774 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
775 | |
776 try | |
777 { | |
778 *isProtected = backend->IsProtectedPatient(id); | |
779 return OrthancPluginErrorCode_Success; | |
780 } | |
200 | 781 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 782 } |
783 | |
784 | |
785 static OrthancPluginErrorCode ListAvailableMetadata(OrthancPluginDatabaseContext* context, | |
786 void* payload, | |
787 int64_t id) | |
788 { | |
789 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
790 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
791 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 792 |
793 try | |
794 { | |
795 std::list<int32_t> target; | |
796 backend->ListAvailableMetadata(target, id); | |
797 | |
798 for (std::list<int32_t>::const_iterator | |
799 it = target.begin(); it != target.end(); ++it) | |
800 { | |
199 | 801 OrthancPluginDatabaseAnswerInt32(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
802 output->GetDatabase(), |
0 | 803 *it); |
804 } | |
805 | |
806 return OrthancPluginErrorCode_Success; | |
807 } | |
200 | 808 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 809 } |
810 | |
811 | |
812 static OrthancPluginErrorCode ListAvailableAttachments(OrthancPluginDatabaseContext* context, | |
813 void* payload, | |
814 int64_t id) | |
815 { | |
816 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
817 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
818 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 819 |
820 try | |
821 { | |
822 std::list<int32_t> target; | |
823 backend->ListAvailableAttachments(target, id); | |
824 | |
825 for (std::list<int32_t>::const_iterator | |
826 it = target.begin(); it != target.end(); ++it) | |
827 { | |
199 | 828 OrthancPluginDatabaseAnswerInt32(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
829 output->GetDatabase(), |
0 | 830 *it); |
831 } | |
832 | |
833 return OrthancPluginErrorCode_Success; | |
834 } | |
200 | 835 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 836 } |
837 | |
838 | |
839 static OrthancPluginErrorCode LogChange(void* payload, | |
840 const OrthancPluginChange* change) | |
841 { | |
842 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
843 | |
844 try | |
845 { | |
846 backend->LogChange(*change); | |
847 return OrthancPluginErrorCode_Success; | |
848 } | |
200 | 849 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 850 } |
851 | |
852 | |
853 static OrthancPluginErrorCode LogExportedResource(void* payload, | |
854 const OrthancPluginExportedResource* exported) | |
855 { | |
856 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
857 | |
858 try | |
859 { | |
860 backend->LogExportedResource(*exported); | |
861 return OrthancPluginErrorCode_Success; | |
862 } | |
200 | 863 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 864 } |
865 | |
866 | |
867 static OrthancPluginErrorCode LookupAttachment(OrthancPluginDatabaseContext* context, | |
868 void* payload, | |
869 int64_t id, | |
870 int32_t contentType) | |
871 { | |
872 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
873 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
874 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_Attachment); |
0 | 875 |
876 try | |
877 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
878 backend->LookupAttachment(*output, id, contentType); |
0 | 879 return OrthancPluginErrorCode_Success; |
880 } | |
200 | 881 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 882 } |
883 | |
884 | |
885 static OrthancPluginErrorCode LookupGlobalProperty(OrthancPluginDatabaseContext* context, | |
886 void* payload, | |
887 int32_t property) | |
888 { | |
889 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
890 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
891 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 892 |
893 try | |
894 { | |
895 std::string s; | |
896 if (backend->LookupGlobalProperty(s, property)) | |
897 { | |
199 | 898 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
899 output->GetDatabase(), |
0 | 900 s.c_str()); |
901 } | |
902 | |
903 return OrthancPluginErrorCode_Success; | |
904 } | |
200 | 905 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 906 } |
907 | |
908 | |
909 static OrthancPluginErrorCode LookupIdentifier3(OrthancPluginDatabaseContext* context, | |
910 void* payload, | |
911 OrthancPluginResourceType resourceType, | |
912 const OrthancPluginDicomTag* tag, | |
913 OrthancPluginIdentifierConstraint constraint) | |
914 { | |
915 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
916 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
917 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 918 |
919 try | |
920 { | |
921 std::list<int64_t> target; | |
922 backend->LookupIdentifier(target, resourceType, tag->group, tag->element, constraint, tag->value); | |
923 | |
924 for (std::list<int64_t>::const_iterator | |
925 it = target.begin(); it != target.end(); ++it) | |
926 { | |
199 | 927 OrthancPluginDatabaseAnswerInt64(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
928 output->GetDatabase(), *it); |
0 | 929 } |
930 | |
931 return OrthancPluginErrorCode_Success; | |
932 } | |
200 | 933 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 934 } |
935 | |
936 | |
937 static OrthancPluginErrorCode LookupIdentifierRange(OrthancPluginDatabaseContext* context, | |
938 void* payload, | |
939 OrthancPluginResourceType resourceType, | |
940 uint16_t group, | |
941 uint16_t element, | |
942 const char* start, | |
943 const char* end) | |
944 { | |
945 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
946 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
947 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 948 |
949 try | |
950 { | |
951 std::list<int64_t> target; | |
952 backend->LookupIdentifierRange(target, resourceType, group, element, start, end); | |
953 | |
954 for (std::list<int64_t>::const_iterator | |
955 it = target.begin(); it != target.end(); ++it) | |
956 { | |
199 | 957 OrthancPluginDatabaseAnswerInt64(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
958 output->GetDatabase(), *it); |
0 | 959 } |
960 | |
961 return OrthancPluginErrorCode_Success; | |
962 } | |
200 | 963 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 964 } |
965 | |
966 | |
967 static OrthancPluginErrorCode LookupMetadata(OrthancPluginDatabaseContext* context, | |
968 void* payload, | |
969 int64_t id, | |
970 int32_t metadata) | |
971 { | |
972 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
973 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
974 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 975 |
976 try | |
977 { | |
978 std::string s; | |
979 if (backend->LookupMetadata(s, id, metadata)) | |
980 { | |
199 | 981 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
982 output->GetDatabase(), s.c_str()); |
0 | 983 } |
984 | |
985 return OrthancPluginErrorCode_Success; | |
986 } | |
200 | 987 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 988 } |
989 | |
990 | |
991 static OrthancPluginErrorCode LookupParent(OrthancPluginDatabaseContext* context, | |
992 void* payload, | |
993 int64_t id) | |
994 { | |
995 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
996 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
997 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 998 |
999 try | |
1000 { | |
1001 int64_t parent; | |
1002 if (backend->LookupParent(parent, id)) | |
1003 { | |
199 | 1004 OrthancPluginDatabaseAnswerInt64(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1005 output->GetDatabase(), parent); |
0 | 1006 } |
1007 | |
1008 return OrthancPluginErrorCode_Success; | |
1009 } | |
200 | 1010 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1011 } |
1012 | |
1013 | |
1014 static OrthancPluginErrorCode LookupResource(OrthancPluginDatabaseContext* context, | |
1015 void* payload, | |
1016 const char* publicId) | |
1017 { | |
1018 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1019 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1020 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 1021 |
1022 try | |
1023 { | |
1024 int64_t id; | |
1025 OrthancPluginResourceType type; | |
1026 if (backend->LookupResource(id, type, publicId)) | |
1027 { | |
199 | 1028 OrthancPluginDatabaseAnswerResource(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1029 output->GetDatabase(), |
0 | 1030 id, type); |
1031 } | |
1032 | |
1033 return OrthancPluginErrorCode_Success; | |
1034 } | |
200 | 1035 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1036 } |
1037 | |
1038 | |
1039 static OrthancPluginErrorCode SelectPatientToRecycle(OrthancPluginDatabaseContext* context, | |
1040 void* payload) | |
1041 { | |
1042 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1043 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1044 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 1045 |
1046 try | |
1047 { | |
1048 int64_t id; | |
1049 if (backend->SelectPatientToRecycle(id)) | |
1050 { | |
199 | 1051 OrthancPluginDatabaseAnswerInt64(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1052 output->GetDatabase(), id); |
0 | 1053 } |
1054 | |
1055 return OrthancPluginErrorCode_Success; | |
1056 } | |
200 | 1057 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1058 } |
1059 | |
1060 | |
1061 static OrthancPluginErrorCode SelectPatientToRecycle2(OrthancPluginDatabaseContext* context, | |
1062 void* payload, | |
1063 int64_t patientIdToAvoid) | |
1064 { | |
1065 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1066 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1067 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
0 | 1068 |
1069 try | |
1070 { | |
1071 int64_t id; | |
1072 if (backend->SelectPatientToRecycle(id, patientIdToAvoid)) | |
1073 { | |
199 | 1074 OrthancPluginDatabaseAnswerInt64(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1075 output->GetDatabase(), id); |
0 | 1076 } |
1077 | |
1078 return OrthancPluginErrorCode_Success; | |
1079 } | |
200 | 1080 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1081 } |
1082 | |
1083 | |
1084 static OrthancPluginErrorCode SetGlobalProperty(void* payload, | |
1085 int32_t property, | |
1086 const char* value) | |
1087 { | |
1088 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1089 | |
1090 try | |
1091 { | |
1092 backend->SetGlobalProperty(property, value); | |
1093 return OrthancPluginErrorCode_Success; | |
1094 } | |
200 | 1095 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1096 } |
1097 | |
1098 | |
1099 static OrthancPluginErrorCode SetMainDicomTag(void* payload, | |
1100 int64_t id, | |
1101 const OrthancPluginDicomTag* tag) | |
1102 { | |
1103 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1104 | |
1105 try | |
1106 { | |
1107 backend->SetMainDicomTag(id, tag->group, tag->element, tag->value); | |
1108 return OrthancPluginErrorCode_Success; | |
1109 } | |
200 | 1110 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1111 } |
1112 | |
1113 | |
1114 static OrthancPluginErrorCode SetIdentifierTag(void* payload, | |
1115 int64_t id, | |
1116 const OrthancPluginDicomTag* tag) | |
1117 { | |
1118 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1119 | |
1120 try | |
1121 { | |
1122 backend->SetIdentifierTag(id, tag->group, tag->element, tag->value); | |
1123 return OrthancPluginErrorCode_Success; | |
1124 } | |
200 | 1125 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1126 } |
1127 | |
1128 | |
1129 static OrthancPluginErrorCode SetMetadata(void* payload, | |
1130 int64_t id, | |
1131 int32_t metadata, | |
1132 const char* value) | |
1133 { | |
1134 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1135 | |
1136 try | |
1137 { | |
1138 backend->SetMetadata(id, metadata, value); | |
1139 return OrthancPluginErrorCode_Success; | |
1140 } | |
200 | 1141 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1142 } |
1143 | |
1144 | |
1145 static OrthancPluginErrorCode SetProtectedPatient(void* payload, | |
1146 int64_t id, | |
1147 int32_t isProtected) | |
1148 { | |
1149 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1150 | |
1151 try | |
1152 { | |
1153 backend->SetProtectedPatient(id, (isProtected != 0)); | |
1154 return OrthancPluginErrorCode_Success; | |
1155 } | |
200 | 1156 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1157 } |
1158 | |
1159 | |
1160 static OrthancPluginErrorCode StartTransaction(void* payload) | |
1161 { | |
1162 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1163 | |
1164 try | |
1165 { | |
1166 backend->StartTransaction(); | |
1167 return OrthancPluginErrorCode_Success; | |
1168 } | |
200 | 1169 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1170 } |
1171 | |
1172 | |
1173 static OrthancPluginErrorCode RollbackTransaction(void* payload) | |
1174 { | |
1175 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1176 | |
1177 try | |
1178 { | |
1179 backend->RollbackTransaction(); | |
1180 return OrthancPluginErrorCode_Success; | |
1181 } | |
200 | 1182 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1183 } |
1184 | |
1185 | |
1186 static OrthancPluginErrorCode CommitTransaction(void* payload) | |
1187 { | |
1188 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1189 | |
1190 try | |
1191 { | |
1192 backend->CommitTransaction(); | |
1193 return OrthancPluginErrorCode_Success; | |
1194 } | |
200 | 1195 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1196 } |
1197 | |
1198 | |
1199 static OrthancPluginErrorCode Open(void* payload) | |
1200 { | |
1201 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1202 | |
1203 try | |
1204 { | |
1205 backend->Open(); | |
1206 return OrthancPluginErrorCode_Success; | |
1207 } | |
200 | 1208 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1209 } |
1210 | |
1211 | |
1212 static OrthancPluginErrorCode Close(void* payload) | |
1213 { | |
1214 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1215 | |
1216 try | |
1217 { | |
1218 backend->Close(); | |
1219 return OrthancPluginErrorCode_Success; | |
1220 } | |
200 | 1221 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1222 } |
1223 | |
1224 | |
1225 static OrthancPluginErrorCode GetDatabaseVersion(uint32_t* version, | |
1226 void* payload) | |
1227 { | |
1228 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1229 | |
1230 try | |
1231 { | |
1232 *version = backend->GetDatabaseVersion(); | |
1233 return OrthancPluginErrorCode_Success; | |
1234 } | |
200 | 1235 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1236 } |
1237 | |
1238 | |
1239 static OrthancPluginErrorCode UpgradeDatabase(void* payload, | |
1240 uint32_t targetVersion, | |
1241 OrthancPluginStorageArea* storageArea) | |
1242 { | |
1243 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1244 | |
1245 try | |
1246 { | |
1247 backend->UpgradeDatabase(targetVersion, storageArea); | |
1248 return OrthancPluginErrorCode_Success; | |
1249 } | |
200 | 1250 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1251 } |
1252 | |
1253 | |
1254 static OrthancPluginErrorCode ClearMainDicomTags(void* payload, | |
1255 int64_t internalId) | |
1256 { | |
1257 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); | |
1258 | |
1259 try | |
1260 { | |
1261 backend->ClearMainDicomTags(internalId); | |
1262 return OrthancPluginErrorCode_Success; | |
1263 } | |
200 | 1264 ORTHANC_PLUGINS_DATABASE_CATCH; |
0 | 1265 } |
1266 | |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1267 |
78 | 1268 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1269 /* Use GetOutput().AnswerResource() */ |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1270 static OrthancPluginErrorCode LookupResources( |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1271 OrthancPluginDatabaseContext* context, |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1272 void* payload, |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1273 uint32_t constraintsCount, |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1274 const OrthancPluginDatabaseConstraint* constraints, |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1275 OrthancPluginResourceType queryLevel, |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1276 uint32_t limit, |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1277 uint8_t requestSomeInstance) |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1278 { |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1279 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1280 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1281 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_MatchingResource); |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1282 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1283 try |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1284 { |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1285 std::vector<Orthanc::DatabaseConstraint> lookup; |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1286 lookup.reserve(constraintsCount); |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1287 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1288 for (uint32_t i = 0; i < constraintsCount; i++) |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1289 { |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1290 lookup.push_back(Orthanc::DatabaseConstraint(constraints[i])); |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1291 } |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1292 |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1293 backend->LookupResources(*output, lookup, queryLevel, limit, (requestSomeInstance != 0)); |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1294 return OrthancPluginErrorCode_Success; |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1295 } |
200 | 1296 ORTHANC_PLUGINS_DATABASE_CATCH; |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1297 } |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1298 #endif |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1299 |
71
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1300 |
78 | 1301 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
200 | 1302 static OrthancPluginErrorCode CreateInstance(OrthancPluginCreateInstanceResult* target, |
71
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1303 void* payload, |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1304 const char* hashPatient, |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1305 const char* hashStudy, |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1306 const char* hashSeries, |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1307 const char* hashInstance) |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1308 { |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1309 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1310 |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1311 try |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1312 { |
200 | 1313 backend->CreateInstance(*target, hashPatient, hashStudy, hashSeries, hashInstance); |
71
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1314 return OrthancPluginErrorCode_Success; |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1315 } |
200 | 1316 ORTHANC_PLUGINS_DATABASE_CATCH; |
71
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1317 } |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1318 #endif |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1319 |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1320 |
78 | 1321 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1322 static OrthancPluginErrorCode SetResourcesContent( |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1323 void* payload, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1324 uint32_t countIdentifierTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1325 const OrthancPluginResourcesContentTags* identifierTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1326 uint32_t countMainDicomTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1327 const OrthancPluginResourcesContentTags* mainDicomTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1328 uint32_t countMetadata, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1329 const OrthancPluginResourcesContentMetadata* metadata) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1330 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1331 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1332 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1333 try |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1334 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1335 backend->SetResourcesContent(countIdentifierTags, identifierTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1336 countMainDicomTags, mainDicomTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1337 countMetadata, metadata); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1338 return OrthancPluginErrorCode_Success; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1339 } |
200 | 1340 ORTHANC_PLUGINS_DATABASE_CATCH; |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1341 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1342 #endif |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1343 |
0 | 1344 |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1345 // New primitive since Orthanc 1.5.2 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1346 static OrthancPluginErrorCode GetChildrenMetadata(OrthancPluginDatabaseContext* context, |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1347 void* payload, |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1348 int64_t resourceId, |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1349 int32_t metadata) |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1350 { |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1351 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1352 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1353 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_None); |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1354 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1355 try |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1356 { |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1357 std::list<std::string> values; |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1358 backend->GetChildrenMetadata(values, resourceId, metadata); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1359 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1360 for (std::list<std::string>::const_iterator |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1361 it = values.begin(); it != values.end(); ++it) |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1362 { |
199 | 1363 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1364 output->GetDatabase(), |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1365 it->c_str()); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1366 } |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1367 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1368 return OrthancPluginErrorCode_Success; |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1369 } |
200 | 1370 ORTHANC_PLUGINS_DATABASE_CATCH; |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1371 } |
85
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1372 |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1373 |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1374 // New primitive since Orthanc 1.5.2 |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1375 static OrthancPluginErrorCode GetLastChangeIndex(int64_t* result, |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1376 void* payload) |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1377 { |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1378 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1379 |
85
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1380 try |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1381 { |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1382 *result = backend->GetLastChangeIndex(); |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1383 return OrthancPluginErrorCode_Success; |
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1384 } |
200 | 1385 ORTHANC_PLUGINS_DATABASE_CATCH; |
85
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1386 } |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1387 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1388 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1389 // New primitive since Orthanc 1.5.2 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1390 static OrthancPluginErrorCode TagMostRecentPatient(void* payload, |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1391 int64_t patientId) |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1392 { |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1393 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1394 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1395 try |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1396 { |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1397 backend->TagMostRecentPatient(patientId); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1398 return OrthancPluginErrorCode_Success; |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1399 } |
200 | 1400 ORTHANC_PLUGINS_DATABASE_CATCH; |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1401 } |
85
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1402 |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1403 |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1404 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1405 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1406 // New primitive since Orthanc 1.5.4 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1407 static OrthancPluginErrorCode GetAllMetadata(OrthancPluginDatabaseContext* context, |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1408 void* payload, |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1409 int64_t resourceId) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1410 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1411 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1412 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1413 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_Metadata); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1414 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1415 try |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1416 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1417 std::map<int32_t, std::string> result; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1418 backend->GetAllMetadata(result, resourceId); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1419 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1420 for (std::map<int32_t, std::string>::const_iterator |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1421 it = result.begin(); it != result.end(); ++it) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1422 { |
199 | 1423 OrthancPluginDatabaseAnswerMetadata(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1424 output->GetDatabase(), |
200 | 1425 resourceId, it->first, it->second.c_str()); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1426 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1427 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1428 return OrthancPluginErrorCode_Success; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1429 } |
200 | 1430 ORTHANC_PLUGINS_DATABASE_CATCH; |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1431 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1432 # endif |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1433 #endif |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1434 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1435 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1436 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1437 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1438 // New primitive since Orthanc 1.5.4 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1439 static OrthancPluginErrorCode LookupResourceAndParent(OrthancPluginDatabaseContext* context, |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1440 uint8_t* isExisting, |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1441 int64_t* id, |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1442 OrthancPluginResourceType* type, |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1443 void* payload, |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1444 const char* publicId) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1445 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1446 IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload); |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1447 std::unique_ptr<DatabaseBackendOutputV2> output(dynamic_cast<DatabaseBackendOutputV2*>(backend->CreateOutput())); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1448 output->SetAllowedAnswers(DatabaseBackendOutputV2::AllowedAnswers_String); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1449 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1450 try |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1451 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1452 std::string parent; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1453 if (backend->LookupResourceAndParent(*id, *type, parent, publicId)) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1454 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1455 *isExisting = 1; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1456 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1457 if (!parent.empty()) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1458 { |
199 | 1459 OrthancPluginDatabaseAnswerString(backend->GetContext(), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1460 output->GetDatabase(), |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1461 parent.c_str()); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1462 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1463 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1464 else |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1465 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1466 *isExisting = 0; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1467 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1468 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1469 return OrthancPluginErrorCode_Success; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1470 } |
200 | 1471 ORTHANC_PLUGINS_DATABASE_CATCH; |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1472 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1473 # endif |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1474 #endif |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1475 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1476 |
0 | 1477 public: |
1478 /** | |
1479 * Register a custom database back-end written in C++. | |
1480 * | |
1481 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize(). | |
1482 * @param backend Your custom database engine. | |
1483 **/ | |
1484 | |
1485 static void Register(OrthancPluginContext* context, | |
1486 IDatabaseBackend& backend) | |
1487 { | |
1488 OrthancPluginDatabaseBackend params; | |
1489 memset(¶ms, 0, sizeof(params)); | |
1490 | |
1491 OrthancPluginDatabaseExtensions extensions; | |
1492 memset(&extensions, 0, sizeof(extensions)); | |
1493 | |
1494 params.addAttachment = AddAttachment; | |
1495 params.attachChild = AttachChild; | |
1496 params.clearChanges = ClearChanges; | |
1497 params.clearExportedResources = ClearExportedResources; | |
1498 params.createResource = CreateResource; | |
1499 params.deleteAttachment = DeleteAttachment; | |
1500 params.deleteMetadata = DeleteMetadata; | |
1501 params.deleteResource = DeleteResource; | |
1502 params.getAllPublicIds = GetAllPublicIds; | |
1503 params.getChanges = GetChanges; | |
1504 params.getChildrenInternalId = GetChildrenInternalId; | |
1505 params.getChildrenPublicId = GetChildrenPublicId; | |
1506 params.getExportedResources = GetExportedResources; | |
1507 params.getLastChange = GetLastChange; | |
1508 params.getLastExportedResource = GetLastExportedResource; | |
1509 params.getMainDicomTags = GetMainDicomTags; | |
1510 params.getPublicId = GetPublicId; | |
1511 params.getResourceCount = GetResourceCount; | |
1512 params.getResourceType = GetResourceType; | |
1513 params.getTotalCompressedSize = GetTotalCompressedSize; | |
1514 params.getTotalUncompressedSize = GetTotalUncompressedSize; | |
1515 params.isExistingResource = IsExistingResource; | |
1516 params.isProtectedPatient = IsProtectedPatient; | |
1517 params.listAvailableMetadata = ListAvailableMetadata; | |
1518 params.listAvailableAttachments = ListAvailableAttachments; | |
1519 params.logChange = LogChange; | |
1520 params.logExportedResource = LogExportedResource; | |
1521 params.lookupAttachment = LookupAttachment; | |
1522 params.lookupGlobalProperty = LookupGlobalProperty; | |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1523 params.lookupIdentifier = NULL; // Unused starting with Orthanc 0.9.5 (db v6) |
0 | 1524 params.lookupIdentifier2 = NULL; // Unused starting with Orthanc 0.9.5 (db v6) |
1525 params.lookupMetadata = LookupMetadata; | |
1526 params.lookupParent = LookupParent; | |
1527 params.lookupResource = LookupResource; | |
1528 params.selectPatientToRecycle = SelectPatientToRecycle; | |
1529 params.selectPatientToRecycle2 = SelectPatientToRecycle2; | |
1530 params.setGlobalProperty = SetGlobalProperty; | |
1531 params.setMainDicomTag = SetMainDicomTag; | |
1532 params.setIdentifierTag = SetIdentifierTag; | |
1533 params.setMetadata = SetMetadata; | |
1534 params.setProtectedPatient = SetProtectedPatient; | |
1535 params.startTransaction = StartTransaction; | |
1536 params.rollbackTransaction = RollbackTransaction; | |
1537 params.commitTransaction = CommitTransaction; | |
1538 params.open = Open; | |
1539 params.close = Close; | |
1540 | |
1541 extensions.getAllPublicIdsWithLimit = GetAllPublicIdsWithLimit; | |
1542 extensions.getDatabaseVersion = GetDatabaseVersion; | |
1543 extensions.upgradeDatabase = UpgradeDatabase; | |
1544 extensions.clearMainDicomTags = ClearMainDicomTags; | |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1545 extensions.getAllInternalIds = GetAllInternalIds; // New in Orthanc 0.9.5 (db v6) |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1546 extensions.lookupIdentifier3 = LookupIdentifier3; // New in Orthanc 0.9.5 (db v6) |
0 | 1547 |
1548 bool performanceWarning = true; | |
1549 | |
1550 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 | |
1551 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 4, 0) | |
1552 extensions.lookupIdentifierRange = LookupIdentifierRange; // New in Orthanc 1.4.0 | |
1553 # endif | |
1554 #endif | |
1555 | |
78 | 1556 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1557 // Optimizations brought by Orthanc 1.5.2 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1558 extensions.lookupResources = LookupResources; // Fast lookup |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1559 extensions.setResourcesContent = SetResourcesContent; // Fast setting tags/metadata |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
1560 extensions.getChildrenMetadata = GetChildrenMetadata; |
85
1012fe77241c
new extension implemented for PostgreSQL and SQLite: GetLastChangeIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
1561 extensions.getLastChangeIndex = GetLastChangeIndex; |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
1562 extensions.tagMostRecentPatient = TagMostRecentPatient; |
71
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1563 |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1564 if (backend.HasCreateInstance()) |
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1565 { |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
1566 extensions.createInstance = CreateInstance; // Fast creation of resources |
71
d40c5fecd160
new extension implemented for PostgreSQL: CreateInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
70
diff
changeset
|
1567 } |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1568 #endif |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
1569 |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1570 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1571 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1572 // Optimizations brought by Orthanc 1.5.4 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1573 extensions.lookupResourceAndParent = LookupResourceAndParent; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1574 extensions.getAllMetadata = GetAllMetadata; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1575 performanceWarning = false; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1576 # endif |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1577 #endif |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
1578 |
127
3424a54ca2ee
fix performance warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
1579 if (performanceWarning) |
0 | 1580 { |
24
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1581 char info[1024]; |
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1582 sprintf(info, |
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1583 "Performance warning: The database index plugin was compiled " |
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1584 "against an old version of the Orthanc SDK (%d.%d.%d): " |
129
534759b0cf14
use of macros to report performance warnings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
1585 "Consider upgrading to version %d.%d.%d of the Orthanc SDK", |
24
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1586 ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER, |
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1587 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER, |
129
534759b0cf14
use of macros to report performance warnings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
1588 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER, |
534759b0cf14
use of macros to report performance warnings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
1589 ORTHANC_OPTIMAL_VERSION_MAJOR, |
534759b0cf14
use of macros to report performance warnings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
1590 ORTHANC_OPTIMAL_VERSION_MINOR, |
534759b0cf14
use of macros to report performance warnings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
1591 ORTHANC_OPTIMAL_VERSION_REVISION); |
24
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1592 |
17f849b2af34
sharing plugin initialization code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
16
diff
changeset
|
1593 OrthancPluginLogWarning(context, info); |
0 | 1594 } |
1595 | |
1
d17b2631bb67
starting StorageBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
1596 OrthancPluginDatabaseContext* database = |
d17b2631bb67
starting StorageBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
1597 OrthancPluginRegisterDatabaseBackendV2(context, ¶ms, &extensions, &backend); |
0 | 1598 if (!context) |
1599 { | |
1600 throw std::runtime_error("Unable to register the database backend"); | |
1601 } | |
1602 | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
1603 backend.SetOutputFactory(new DatabaseBackendOutputV2::Factory(context, database)); |
0 | 1604 } |
1605 }; | |
1606 } |