annotate Framework/Plugins/DatabaseBackendAdapterV4.cpp @ 378:9db9e0275ec0 db-protobuf

refactoring IndexBackend::LogExportedResource()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 29 Mar 2023 08:19:40 +0200
parents 02fe4606f5e4
children 33b2aaffdd6c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 *
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * This program is free software: you can redistribute it and/or
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * modify it under the terms of the GNU Affero General Public License
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * as published by the Free Software Foundation, either version 3 of
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * the License, or (at your option) any later version.
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 *
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful, but
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * Affero General Public License for more details.
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 *
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * You should have received a copy of the GNU Affero General Public License
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 **/
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 #include "DatabaseBackendAdapterV4.h"
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 0)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
28 #include "IndexConnectionsPool.h"
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
29
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include <OrthancDatabasePlugin.pb.h> // Include protobuf messages
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 #include <Logging.h>
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 #include <OrthancException.h>
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 #include <stdexcept>
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 #include <list>
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 #include <string>
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 #include <cassert>
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
41 #define ORTHANC_PLUGINS_DATABASE_CATCH(context) \
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 namespace OrthancDatabases
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 static bool isBackendInUse_ = false; // Only for sanity checks
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
48
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
49 static Orthanc::DatabasePluginMessages::ResourceType Convert(OrthancPluginResourceType resourceType)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
50 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
51 switch (resourceType)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
52 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
53 case OrthancPluginResourceType_Patient:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
54 return Orthanc::DatabasePluginMessages::RESOURCE_PATIENT;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
55
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
56 case OrthancPluginResourceType_Study:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
57 return Orthanc::DatabasePluginMessages::RESOURCE_STUDY;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
58
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
59 case OrthancPluginResourceType_Series:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
60 return Orthanc::DatabasePluginMessages::RESOURCE_SERIES;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
61
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
62 case OrthancPluginResourceType_Instance:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
63 return Orthanc::DatabasePluginMessages::RESOURCE_INSTANCE;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
64
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
65 default:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
66 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
67 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
68 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
69
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
70
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
71 static OrthancPluginResourceType Convert(Orthanc::DatabasePluginMessages::ResourceType resourceType)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
72 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
73 switch (resourceType)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
74 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
75 case Orthanc::DatabasePluginMessages::RESOURCE_PATIENT:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
76 return OrthancPluginResourceType_Patient;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
77
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
78 case Orthanc::DatabasePluginMessages::RESOURCE_STUDY:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
79 return OrthancPluginResourceType_Study;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
80
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
81 case Orthanc::DatabasePluginMessages::RESOURCE_SERIES:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
82 return OrthancPluginResourceType_Series;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
83
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
84 case Orthanc::DatabasePluginMessages::RESOURCE_INSTANCE:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
85 return OrthancPluginResourceType_Instance;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
86
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
87 default:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
88 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
89 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
90 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
91
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
92
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
93 class Output : public IDatabaseBackendOutput
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
94 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
95 private:
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
96 Orthanc::DatabasePluginMessages::DeleteAttachment::Response* deleteAttachment_;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
97 Orthanc::DatabasePluginMessages::DeleteResource::Response* deleteResource_;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
98 Orthanc::DatabasePluginMessages::GetChanges::Response* getChanges_;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
99 Orthanc::DatabasePluginMessages::GetExportedResources::Response* getExportedResources_;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
100 Orthanc::DatabasePluginMessages::GetLastChange::Response* getLastChange_;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
101 Orthanc::DatabasePluginMessages::GetLastExportedResource::Response* getLastExportedResource_;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
102 Orthanc::DatabasePluginMessages::GetMainDicomTags::Response* getMainDicomTags_;
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
103
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
104 void Clear()
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
105 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
106 deleteAttachment_ = NULL;
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
107 deleteResource_ = NULL;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
108 getChanges_ = NULL;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
109 getExportedResources_ = NULL;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
110 getLastChange_ = NULL;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
111 getLastExportedResource_ = NULL;
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
112 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
113
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
114 public:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
115 Output(Orthanc::DatabasePluginMessages::DeleteAttachment::Response& deleteAttachment)
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
116 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
117 Clear();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
118 deleteAttachment_ = &deleteAttachment;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
119 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
120
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
121 Output(Orthanc::DatabasePluginMessages::DeleteResource::Response& deleteResource)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
122 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
123 Clear();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
124 deleteResource_ = &deleteResource;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
125 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
126
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
127 Output(Orthanc::DatabasePluginMessages::GetChanges::Response& getChanges)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
128 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
129 Clear();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
130 getChanges_ = &getChanges;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
131 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
132
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
133 Output(Orthanc::DatabasePluginMessages::GetExportedResources::Response& getExportedResources)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
134 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
135 Clear();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
136 getExportedResources_ = &getExportedResources;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
137 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
138
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
139 Output(Orthanc::DatabasePluginMessages::GetLastChange::Response& getLastChange)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
140 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
141 Clear();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
142 getLastChange_ = &getLastChange;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
143 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
144
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
145 Output(Orthanc::DatabasePluginMessages::GetLastExportedResource::Response& getLastExportedResource)
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
146 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
147 Clear();
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
148 getLastExportedResource_ = &getLastExportedResource;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
149 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
150
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
151 Output(Orthanc::DatabasePluginMessages::GetMainDicomTags::Response& getMainDicomTags)
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
152 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
153 Clear();
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
154 getMainDicomTags_ = &getMainDicomTags;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
155 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
156
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
157 virtual void SignalDeletedAttachment(const std::string& uuid,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
158 int32_t contentType,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
159 uint64_t uncompressedSize,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
160 const std::string& uncompressedHash,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
161 int32_t compressionType,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
162 uint64_t compressedSize,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
163 const std::string& compressedHash) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
164 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
165 Orthanc::DatabasePluginMessages::FileInfo* attachment;
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
166
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
167 if (deleteAttachment_ != NULL)
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
168 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
169 if (deleteAttachment_->has_deleted_attachment())
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
170 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
171 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
172 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
173
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
174 attachment = deleteAttachment_->mutable_deleted_attachment();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
175 }
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
176 else if (deleteResource_ != NULL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
177 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
178 attachment = deleteResource_->add_deleted_attachments();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
179 }
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
180 else
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
181 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
182 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
183 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
184
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
185 attachment->set_uuid(uuid);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
186 attachment->set_content_type(contentType);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
187 attachment->set_uncompressed_size(uncompressedSize);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
188 attachment->set_uncompressed_hash(uncompressedHash);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
189 attachment->set_compression_type(compressionType);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
190 attachment->set_compressed_size(compressedSize);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
191 attachment->set_compressed_hash(compressedHash);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
192 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
193
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
194 virtual void SignalDeletedResource(const std::string& publicId,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
195 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
196 {
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
197 if (deleteResource_ != NULL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
198 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
199 Orthanc::DatabasePluginMessages::DeleteResource_Response_Resource* resource = deleteResource_->add_deleted_resources();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
200 resource->set_level(Convert(resourceType));
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
201 resource->set_public_id(publicId);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
202 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
203 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
204 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
205 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
206 }
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
207 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
208
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
209 virtual void SignalRemainingAncestor(const std::string& ancestorId,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
210 OrthancPluginResourceType ancestorType) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
211 {
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
212 if (deleteResource_ != NULL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
213 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
214 if (deleteResource_->is_remaining_ancestor())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
215 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
216 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
217 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
218 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
219 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
220 deleteResource_->set_is_remaining_ancestor(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
221 deleteResource_->mutable_remaining_ancestor()->set_level(Convert(ancestorType));
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
222 deleteResource_->mutable_remaining_ancestor()->set_public_id(ancestorId);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
223 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
224 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
225 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
226 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
227 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
228 }
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
229 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
230
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
231 virtual void AnswerAttachment(const std::string& uuid,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
232 int32_t contentType,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
233 uint64_t uncompressedSize,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
234 const std::string& uncompressedHash,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
235 int32_t compressionType,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
236 uint64_t compressedSize,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
237 const std::string& compressedHash) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
238 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
239 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
240 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
241
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
242 virtual void AnswerChange(int64_t seq,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
243 int32_t changeType,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
244 OrthancPluginResourceType resourceType,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
245 const std::string& publicId,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
246 const std::string& date) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
247 {
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
248 Orthanc::DatabasePluginMessages::ServerIndexChange* change;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
249
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
250 if (getChanges_ != NULL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
251 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
252 change = getChanges_->add_changes();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
253 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
254 else if (getLastChange_ != NULL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
255 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
256 if (getLastChange_->exists())
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
257 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
258 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
259 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
260
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
261 getLastChange_->set_exists(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
262 change = getLastChange_->mutable_change();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
263 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
264 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
265 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
266 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
267 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
268
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
269 change->set_seq(seq);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
270 change->set_change_type(changeType);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
271 change->set_resource_type(Convert(resourceType));
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
272 change->set_public_id(publicId);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
273 change->set_date(date);
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
274 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
275
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
276 virtual void AnswerDicomTag(uint16_t group,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
277 uint16_t element,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
278 const std::string& value) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
279 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
280 if (getMainDicomTags_ != NULL)
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
281 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
282 Orthanc::DatabasePluginMessages::GetMainDicomTags_Response_Tag* tag = getMainDicomTags_->add_tags();
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
283 tag->set_key((static_cast<uint32_t>(group) << 16) + static_cast<uint32_t>(element));
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
284 tag->set_value(value);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
285 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
286 else
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
287 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
288 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
289 }
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
290 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
291
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
292 virtual void AnswerExportedResource(int64_t seq,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
293 OrthancPluginResourceType resourceType,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
294 const std::string& publicId,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
295 const std::string& modality,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
296 const std::string& date,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
297 const std::string& patientId,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
298 const std::string& studyInstanceUid,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
299 const std::string& seriesInstanceUid,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
300 const std::string& sopInstanceUid) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
301 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
302 Orthanc::DatabasePluginMessages::ExportedResource* resource;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
303
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
304 if (getExportedResources_ != NULL)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
305 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
306 resource = getExportedResources_->add_resources();
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
307 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
308 else if (getLastExportedResource_ != NULL)
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
309 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
310 if (getLastExportedResource_->exists())
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
311 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
312 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
313 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
314
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
315 getLastExportedResource_->set_exists(true);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
316 resource = getLastExportedResource_->mutable_resource();
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
317 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
318 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
319 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
320 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
321 }
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
322
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
323 resource->set_seq(seq);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
324 resource->set_resource_type(Convert(resourceType));
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
325 resource->set_public_id(publicId);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
326 resource->set_modality(modality);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
327 resource->set_date(date);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
328 resource->set_patient_id(patientId);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
329 resource->set_study_instance_uid(studyInstanceUid);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
330 resource->set_series_instance_uid(seriesInstanceUid);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
331 resource->set_sop_instance_uid(sopInstanceUid);
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
332 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
333
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
334 virtual void AnswerMatchingResource(const std::string& resourceId) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
335 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
336 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
337 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
338
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
339 virtual void AnswerMatchingResource(const std::string& resourceId,
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
340 const std::string& someInstanceId) ORTHANC_OVERRIDE
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
341 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
342 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
343 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
344 };
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
345
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
346
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
347 static void ProcessDatabaseOperation(Orthanc::DatabasePluginMessages::DatabaseResponse& response,
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348 const Orthanc::DatabasePluginMessages::DatabaseRequest& request,
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
349 IndexConnectionsPool& pool)
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
350 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
351 switch (request.operation())
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
352 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
353 case Orthanc::DatabasePluginMessages::OPERATION_GET_SYSTEM_INFORMATION:
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
354 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
355 IndexConnectionsPool::Accessor accessor(pool);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
356 response.mutable_get_system_information()->set_database_version(accessor.GetBackend().GetDatabaseVersion(accessor.GetManager()));
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
357 response.mutable_get_system_information()->set_supports_flush_to_disk(false);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
358 response.mutable_get_system_information()->set_supports_revisions(accessor.GetBackend().HasRevisionsSupport());
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
359 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
360 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
361
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
362 case Orthanc::DatabasePluginMessages::OPERATION_OPEN:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
363 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
364 pool.OpenConnections();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
365 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
366 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
367
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
368 case Orthanc::DatabasePluginMessages::OPERATION_CLOSE:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
369 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
370 pool.CloseConnections();
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
371 break;
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
372 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
373
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
374 case Orthanc::DatabasePluginMessages::OPERATION_FLUSH_TO_DISK:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
375 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
376 // Raise an exception since "set_supports_flush_to_disk(false)"
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
377 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
378 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
379
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
380 case Orthanc::DatabasePluginMessages::OPERATION_START_TRANSACTION:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
381 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
382 std::unique_ptr<IndexConnectionsPool::Accessor> transaction(new IndexConnectionsPool::Accessor(pool));
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
383
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
384 switch (request.start_transaction().type())
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
385 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
386 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_ONLY:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
387 transaction->GetManager().StartTransaction(TransactionType_ReadOnly);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
388 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
389
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
390 case Orthanc::DatabasePluginMessages::TRANSACTION_READ_WRITE:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
391 transaction->GetManager().StartTransaction(TransactionType_ReadWrite);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
392 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
393
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
394 default:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
395 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
396 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
397
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
398 response.mutable_start_transaction()->set_transaction(reinterpret_cast<intptr_t>(transaction.release()));
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
399 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
400 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
401
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
402 case Orthanc::DatabasePluginMessages::OPERATION_UPGRADE:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
403 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
404 IndexConnectionsPool::Accessor accessor(pool);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
405 OrthancPluginStorageArea* storageArea = reinterpret_cast<OrthancPluginStorageArea*>(request.upgrade().storage_area());
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
406 accessor.GetBackend().UpgradeDatabase(accessor.GetManager(), request.upgrade().target_version(), storageArea);
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
407 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
408 }
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
409
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 default:
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
411 LOG(ERROR) << "Not implemented database operation from protobuf: " << request.operation();
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
413 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
414 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
415
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
416
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
417 static void ProcessTransactionOperation(Orthanc::DatabasePluginMessages::TransactionResponse& response,
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
418 const Orthanc::DatabasePluginMessages::TransactionRequest& request,
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
419 IndexBackend& backend,
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
420 DatabaseManager& manager)
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
421 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
422 switch (request.operation())
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
423 {
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
424 case Orthanc::DatabasePluginMessages::OPERATION_ROLLBACK:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
425 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
426 manager.RollbackTransaction();
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
427 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
428 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
429
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
430 case Orthanc::DatabasePluginMessages::OPERATION_COMMIT:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
431 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
432 manager.CommitTransaction();
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
433 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
434 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
435
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
436 case Orthanc::DatabasePluginMessages::OPERATION_ADD_ATTACHMENT:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
437 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
438 OrthancPluginAttachment attachment;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
439 attachment.uuid = request.add_attachment().attachment().uuid().c_str();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
440 attachment.contentType = request.add_attachment().attachment().content_type();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
441 attachment.uncompressedSize = request.add_attachment().attachment().uncompressed_size();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
442 attachment.uncompressedHash = request.add_attachment().attachment().uncompressed_hash().c_str();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
443 attachment.compressionType = request.add_attachment().attachment().compression_type();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
444 attachment.compressedSize = request.add_attachment().attachment().compressed_size();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
445 attachment.compressedHash = request.add_attachment().attachment().compressed_hash().c_str();
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
446
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
447 backend.AddAttachment(manager, request.add_attachment().id(), attachment, request.add_attachment().revision());
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
448 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
449 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
450
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
451 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_CHANGES:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
452 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
453 backend.ClearChanges(manager);
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
454 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
455 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
456
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
457 case Orthanc::DatabasePluginMessages::OPERATION_CLEAR_EXPORTED_RESOURCES:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
458 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
459 backend.ClearExportedResources(manager);
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
460 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
461 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
462
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
463 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_ATTACHMENT:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
464 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
465 Output output(*response.mutable_delete_attachment());
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
466 backend.DeleteAttachment(output, manager, request.delete_attachment().id(), request.delete_attachment().type());
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
467 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
468 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
469
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
470 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_METADATA:
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
471 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
472 backend.DeleteMetadata(manager, request.delete_metadata().id(), request.delete_metadata().type());
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
473 break;
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
474 }
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
475
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
476 case Orthanc::DatabasePluginMessages::OPERATION_DELETE_RESOURCE:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
477 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
478 response.mutable_delete_resource()->set_is_remaining_ancestor(false);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
479
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
480 Output output(*response.mutable_delete_resource());
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
481 backend.DeleteResource(output, manager, request.delete_resource().id());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
482 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
483 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
484
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
485 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_METADATA:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
486 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
487 typedef std::map<int32_t, std::string> Values;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
488
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
489 Values values;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
490 backend.GetAllMetadata(values, manager, request.get_all_metadata().id());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
491
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
492 for (Values::const_iterator it = values.begin(); it != values.end(); ++it)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
493 {
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
494 Orthanc::DatabasePluginMessages::GetAllMetadata_Response_Metadata* metadata =
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
495 response.mutable_get_all_metadata()->add_metadata();
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
496 metadata->set_type(it->first);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
497 metadata->set_value(it->second);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
498 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
499
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
500 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
501 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
502
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
503 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
504 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
505 std::list<std::string> values;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
506 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids().resource_type()));
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
507
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
508 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
509 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
510 response.mutable_get_all_public_ids()->add_ids(*it);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
511 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
512
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
513 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
514 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
515
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
516 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS_WITH_LIMITS:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
517 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
518 std::list<std::string> values;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
519 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids_with_limits().resource_type()),
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
520 request.get_all_public_ids_with_limits().since(),
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
521 request.get_all_public_ids_with_limits().limit());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
522
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
523 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
524 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
525 response.mutable_get_all_public_ids_with_limits()->add_ids(*it);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
526 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
527
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
528 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
529 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
530
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
531 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHANGES:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
532 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
533 Output output(*response.mutable_get_changes());
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
534
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
535 bool done;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
536 backend.GetChanges(output, done, manager, request.get_changes().since(), request.get_changes().limit());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
537
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
538 response.mutable_get_changes()->set_done(done);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
539 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
540 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
541
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
542 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
543 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
544 std::list<int64_t> values;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
545 backend.GetChildrenInternalId(values, manager, request.get_children_internal_id().id());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
546
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
547 for (std::list<int64_t>::const_iterator it = values.begin(); it != values.end(); ++it)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
548 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
549 response.mutable_get_children_internal_id()->add_ids(*it);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
550 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
551
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
552 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
553 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
554
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
555 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
556 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
557 std::list<std::string> values;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
558 backend.GetChildrenPublicId(values, manager, request.get_children_public_id().id());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
559
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
560 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
561 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
562 response.mutable_get_children_public_id()->add_ids(*it);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
563 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
564
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
565 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
566 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
567
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
568 case Orthanc::DatabasePluginMessages::OPERATION_GET_EXPORTED_RESOURCES:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
569 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
570 Output output(*response.mutable_get_exported_resources());
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
571
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
572 bool done;
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
573 backend.GetExportedResources(output, done, manager, request.get_exported_resources().since(),
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
574 request.get_exported_resources().limit());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
575
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
576 response.mutable_get_exported_resources()->set_done(done);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
577 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
578 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
579
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
580 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_CHANGE:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
581 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
582 response.mutable_get_last_change()->set_exists(false);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
583
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
584 Output output(*response.mutable_get_last_change());
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
585 backend.GetLastChange(output, manager);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
586 break;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
587 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
588
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
589 case Orthanc::DatabasePluginMessages::OPERATION_GET_LAST_EXPORTED_RESOURCE:
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
590 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
591 response.mutable_get_last_exported_resource()->set_exists(false);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
592
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
593 Output output(*response.mutable_get_last_exported_resource());
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
594 backend.GetLastExportedResource(output, manager);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
595 break;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
596 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
597
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
598 case Orthanc::DatabasePluginMessages::OPERATION_GET_MAIN_DICOM_TAGS:
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
599 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
600 Output output(*response.mutable_get_main_dicom_tags());
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
601 backend.GetMainDicomTags(output, manager, request.get_main_dicom_tags().id());
376
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
602 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
603 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 375
diff changeset
604
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
605 case Orthanc::DatabasePluginMessages::OPERATION_GET_PUBLIC_ID:
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
606 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
607 const std::string id = backend.GetPublicId(manager, request.get_public_id().id());
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
608 response.mutable_get_public_id()->set_id(id);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
609 break;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
610 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
611
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
612 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCES_COUNT:
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
613 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
614 OrthancPluginResourceType type = Convert(request.get_resources_count().type());
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
615 uint64_t count = backend.GetResourcesCount(manager, type);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
616 response.mutable_get_resources_count()->set_count(count);
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
617 break;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
618 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
619
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
620 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE:
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
621 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
622 OrthancPluginResourceType type = backend.GetResourceType(manager, request.get_public_id().id());
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
623 response.mutable_get_resource_type()->set_type(Convert(type));
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
624 break;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
625 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
626
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
627 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE:
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
628 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
629 response.mutable_get_total_compressed_size()->set_size(backend.GetTotalCompressedSize(manager));
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
630 break;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
631 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
632
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
633 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_UNCOMPRESSED_SIZE:
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
634 {
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
635 response.mutable_get_total_uncompressed_size()->set_size(backend.GetTotalUncompressedSize(manager));
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
636 break;
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
637 }
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
638
378
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
639 case Orthanc::DatabasePluginMessages::OPERATION_IS_PROTECTED_PATIENT:
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
640 {
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
641 bool isProtected = backend.IsProtectedPatient(manager, request.is_protected_patient().patient_id());
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
642 response.mutable_is_protected_patient()->set_protected_patient(isProtected);
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
643 break;
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
644 }
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
645
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
646 case Orthanc::DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS:
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
647 {
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
648 std::list<int32_t> values;
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
649 backend.ListAvailableAttachments(values, manager, request.list_available_attachments().id());
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
650
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
651 for (std::list<int32_t>::const_iterator it = values.begin(); it != values.end(); ++it)
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
652 {
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
653 response.mutable_list_available_attachments()->add_attachments(*it);
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
654 }
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
655
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
656 break;
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
657 }
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
658
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
659 case Orthanc::DatabasePluginMessages::OPERATION_LOG_CHANGE:
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
660 {
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
661 backend.LogChange(manager, request.log_change().change_type(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
662 request.log_change().resource_id(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
663 Convert(request.log_change().resource_type()),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
664 request.log_change().date().c_str());
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
665 break;
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
666 }
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
667
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
668 case Orthanc::DatabasePluginMessages::OPERATION_LOG_EXPORTED_RESOURCE:
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
669 {
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
670 backend.LogExportedResource(manager,
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
671 Convert(request.log_exported_resource().resource_type()),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
672 request.log_exported_resource().public_id().c_str(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
673 request.log_exported_resource().modality().c_str(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
674 request.log_exported_resource().date().c_str(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
675 request.log_exported_resource().patient_id().c_str(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
676 request.log_exported_resource().study_instance_uid().c_str(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
677 request.log_exported_resource().series_instance_uid().c_str(),
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
678 request.log_exported_resource().sop_instance_uid().c_str());
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
679 break;
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
680 }
9db9e0275ec0 refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
681
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
682 default:
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
683 LOG(ERROR) << "Not implemented transaction operation from protobuf: " << request.operation();
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
684 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
685 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
686 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
687
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
688
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
689 static OrthancPluginErrorCode CallBackend(OrthancPluginMemoryBuffer64* serializedResponse,
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
690 void* rawPool,
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
691 const void* requestData,
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
692 uint64_t requestSize)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
693 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
694 Orthanc::DatabasePluginMessages::Request request;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
695 if (!request.ParseFromArray(requestData, requestSize))
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
696 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
697 LOG(ERROR) << "Cannot parse message from the Orthanc core using protobuf";
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
698 return OrthancPluginErrorCode_InternalError;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
699 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
700
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
701 if (rawPool == NULL)
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
702 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
703 LOG(ERROR) << "Received a NULL pointer from the database";
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
704 return OrthancPluginErrorCode_InternalError;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
705 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
706
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
707 IndexConnectionsPool& pool = *reinterpret_cast<IndexConnectionsPool*>(rawPool);
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
708
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
709 try
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
710 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
711 Orthanc::DatabasePluginMessages::Response response;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
712
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
713 switch (request.type())
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
714 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
715 case Orthanc::DatabasePluginMessages::REQUEST_DATABASE:
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
716 ProcessDatabaseOperation(*response.mutable_database_response(), request.database_request(), pool);
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
717 break;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
718
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
719 case Orthanc::DatabasePluginMessages::REQUEST_TRANSACTION:
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
720 {
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
721 IndexConnectionsPool::Accessor& transaction = *reinterpret_cast<IndexConnectionsPool::Accessor*>(request.transaction_request().transaction());
377
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
722 ProcessTransactionOperation(*response.mutable_transaction_response(), request.transaction_request(),
02fe4606f5e4 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
723 transaction.GetBackend(), transaction.GetManager());
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
724 break;
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
725 }
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
726
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
727 default:
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
728 LOG(ERROR) << "Not implemented request type from protobuf: " << request.type();
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
729 break;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
730 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
731
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
732 std::string s;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
733 if (!response.SerializeToString(&s))
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
734 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
735 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Cannot serialize to protobuf");
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
736 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
737
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
738 if (OrthancPluginCreateMemoryBuffer64(pool.GetContext(), serializedResponse, s.size()) != OrthancPluginErrorCode_Success)
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
739 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
740 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotEnoughMemory, "Cannot allocate a memory buffer");
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
741 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
742
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
743 if (!s.empty())
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
744 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
745 assert(serializedResponse->size == s.size());
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
746 memcpy(serializedResponse->data, s.c_str(), s.size());
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
747 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
748
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
749 return OrthancPluginErrorCode_Success;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
750 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
751 catch (::Orthanc::OrthancException& e)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
752 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
753 LOG(ERROR) << "Exception in database back-end: " << e.What();
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
754 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
755 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
756 catch (::std::runtime_error& e)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
757 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
758 LOG(ERROR) << "Exception in database back-end: " << e.what();
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
759 return OrthancPluginErrorCode_DatabasePlugin;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
760 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
761 catch (...)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
762 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
763 LOG(ERROR) << "Native exception";
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
764 return OrthancPluginErrorCode_DatabasePlugin;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
765 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
766 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
767
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
768 static void FinalizeBackend(void* rawPool)
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
769 {
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
770 if (rawPool != NULL)
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
771 {
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
772 IndexConnectionsPool* pool = reinterpret_cast<IndexConnectionsPool*>(rawPool);
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
773
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
774 if (isBackendInUse_)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
775 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
776 isBackendInUse_ = false;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
777 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
778 else
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
779 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
780 LOG(ERROR) << "More than one index backend was registered, internal error";
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
781 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
782
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
783 delete pool;
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
784 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
785 else
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
786 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
787 LOG(ERROR) << "Received a null pointer from the Orthanc core, internal error";
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
788 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
789 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
790
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
791
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
792 void DatabaseBackendAdapterV4::Register(IndexBackend* backend,
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
793 size_t countConnections,
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
794 unsigned int maxDatabaseRetries)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
795 {
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
796 std::unique_ptr<IndexConnectionsPool> pool(new IndexConnectionsPool(backend, countConnections));
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
797
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
798 if (isBackendInUse_)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
799 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
800 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
801 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
802
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
803 OrthancPluginContext* context = backend->GetContext();
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
804
375
824d70ce85ff implemented database operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 373
diff changeset
805 if (OrthancPluginRegisterDatabaseBackendV4(context, pool.release(), maxDatabaseRetries,
373
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
806 CallBackend, FinalizeBackend) != OrthancPluginErrorCode_Success)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
807 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
808 delete backend;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
809 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Unable to register the database backend");
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
810 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
811
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
812 isBackendInUse_ = true;
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
813 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
814
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
815
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
816 void DatabaseBackendAdapterV4::Finalize()
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
817 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
818 if (isBackendInUse_)
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
819 {
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
820 LOG(ERROR) << "The Orthanc core has not destructed the index backend, internal error";
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
821 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
822 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
823 }
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
824
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
825 # endif
be7de633695c started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
826 #endif