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