annotate Framework/Plugins/DatabaseBackendAdapterV4.cpp @ 536:4ecf50a4521c find-refactoring

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