annotate OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp @ 5215:8b6da4fdf9fe db-protobuf

cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 03 Apr 2023 14:17:39 +0200
parents a9d00b17a48e
children 450ac804d3af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 * Copyright (C) 2021-2023 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 *
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * This program is free software: you can redistribute it and/or
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * modify it under the terms of the GNU General Public License as
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * published by the Free Software Foundation, either version 3 of the
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * License, or (at your option) any later version.
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 *
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful, but
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * General Public License for more details.
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 *
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 **/
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 #include "../../Sources/PrecompiledHeadersServer.h"
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "OrthancPluginDatabaseV4.h"
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 #if ORTHANC_ENABLE_PLUGINS != 1
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 # error The plugin support is disabled
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 #endif
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include "../../../OrthancFramework/Sources/Logging.h"
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 #include "../../../OrthancFramework/Sources/OrthancException.h"
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
32 #include "../../Sources/Database/ResourcesContent.h"
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
33 #include "../../Sources/Database/VoidDatabaseListener.h"
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 #include "PluginsEnumerations.h"
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
36 #include "OrthancDatabasePlugin.pb.h" // Auto-generated file
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 #include <cassert>
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 namespace Orthanc
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42 {
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
43 static void CheckSuccess(PluginsErrorDictionary& errorDictionary,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
44 OrthancPluginErrorCode code)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
45 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
46 if (code != OrthancPluginErrorCode_Success)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
47 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
48 errorDictionary.LogError(code, true);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
49 throw OrthancException(static_cast<ErrorCode>(code));
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
50 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
51 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
52
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
53
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
54 static ResourceType Convert(DatabasePluginMessages::ResourceType type)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
55 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
56 switch (type)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
57 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
58 case DatabasePluginMessages::RESOURCE_PATIENT:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
59 return ResourceType_Patient;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
60
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
61 case DatabasePluginMessages::RESOURCE_STUDY:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
62 return ResourceType_Study;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
63
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
64 case DatabasePluginMessages::RESOURCE_SERIES:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
65 return ResourceType_Series;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
66
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
67 case DatabasePluginMessages::RESOURCE_INSTANCE:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
68 return ResourceType_Instance;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
69
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
70 default:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
71 throw OrthancException(ErrorCode_ParameterOutOfRange);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
72 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
73 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
74
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
75
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
76 static DatabasePluginMessages::ResourceType Convert(ResourceType type)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
77 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
78 switch (type)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
79 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
80 case ResourceType_Patient:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
81 return DatabasePluginMessages::RESOURCE_PATIENT;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
82
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
83 case ResourceType_Study:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
84 return DatabasePluginMessages::RESOURCE_STUDY;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
85
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
86 case ResourceType_Series:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
87 return DatabasePluginMessages::RESOURCE_SERIES;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
88
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
89 case ResourceType_Instance:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
90 return DatabasePluginMessages::RESOURCE_INSTANCE;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
91
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
92 default:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
93 throw OrthancException(ErrorCode_ParameterOutOfRange);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
94 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
95 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
96
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
97
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
98 static FileInfo Convert(const DatabasePluginMessages::FileInfo& source)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
99 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
100 return FileInfo(source.uuid(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
101 static_cast<FileContentType>(source.content_type()),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
102 source.uncompressed_size(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
103 source.uncompressed_hash(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
104 static_cast<CompressionType>(source.compression_type()),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
105 source.compressed_size(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
106 source.compressed_hash());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
107 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
108
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
109
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
110 static ServerIndexChange Convert(const DatabasePluginMessages::ServerIndexChange& source)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
111 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
112 return ServerIndexChange(source.seq(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
113 static_cast<ChangeType>(source.change_type()),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
114 Convert(source.resource_type()),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
115 source.public_id(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
116 source.date());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
117 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
118
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
119
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
120 static ExportedResource Convert(const DatabasePluginMessages::ExportedResource& source)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
121 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
122 return ExportedResource(source.seq(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
123 Convert(source.resource_type()),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
124 source.public_id(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
125 source.modality(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
126 source.date(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
127 source.patient_id(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
128 source.study_instance_uid(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
129 source.series_instance_uid(),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
130 source.sop_instance_uid());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
131 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
132
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
133
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
134 static void Execute(DatabasePluginMessages::Response& response,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
135 const OrthancPluginDatabaseV4& database,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
136 const DatabasePluginMessages::Request& request)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
137 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
138 std::string requestSerialized;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
139 request.SerializeToString(&requestSerialized);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
140
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
141 OrthancPluginMemoryBuffer64 responseSerialized;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
142 CheckSuccess(database.GetErrorDictionary(), database.GetDefinition().operations(
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
143 &responseSerialized, database.GetDefinition().backend,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
144 requestSerialized.empty() ? NULL : requestSerialized.c_str(),
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
145 requestSerialized.size()));
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
146
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
147 bool success = response.ParseFromArray(responseSerialized.data, responseSerialized.size);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
148
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
149 if (responseSerialized.size > 0)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
150 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
151 free(responseSerialized.data);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
152 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
153
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
154 if (!success)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
155 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
156 throw OrthancException(ErrorCode_DatabasePlugin, "Cannot unserialize protobuf originating from the database plugin");
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
157 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
158 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
159
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
160
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
161 static void ExecuteDatabase(DatabasePluginMessages::DatabaseResponse& response,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
162 const OrthancPluginDatabaseV4& database,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
163 DatabasePluginMessages::DatabaseOperation operation,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
164 const DatabasePluginMessages::DatabaseRequest& request)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
165 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
166 DatabasePluginMessages::Request fullRequest;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
167 fullRequest.set_type(DatabasePluginMessages::REQUEST_DATABASE);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
168 fullRequest.mutable_database_request()->CopyFrom(request);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
169 fullRequest.mutable_database_request()->set_operation(operation);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
170
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
171 DatabasePluginMessages::Response fullResponse;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
172 Execute(fullResponse, database, fullRequest);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
173
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
174 response.CopyFrom(fullResponse.database_response());
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
175 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
176
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
177
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 class OrthancPluginDatabaseV4::Transaction : public IDatabaseWrapper::ITransaction
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 private:
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
181 OrthancPluginDatabaseV4& database_;
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 IDatabaseListener& listener_;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 void* transaction_;
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
184
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
185 void ExecuteTransaction(DatabasePluginMessages::TransactionResponse& response,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
186 DatabasePluginMessages::TransactionOperation operation,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
187 const DatabasePluginMessages::TransactionRequest& request)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
188 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
189 DatabasePluginMessages::Request fullRequest;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
190 fullRequest.set_type(DatabasePluginMessages::REQUEST_TRANSACTION);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
191 fullRequest.mutable_transaction_request()->CopyFrom(request);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
192 fullRequest.mutable_transaction_request()->set_transaction(reinterpret_cast<intptr_t>(transaction_));
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
193 fullRequest.mutable_transaction_request()->set_operation(operation);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
195 DatabasePluginMessages::Response fullResponse;
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
196 Execute(fullResponse, database_, fullRequest);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
197
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
198 response.CopyFrom(fullResponse.transaction_response());
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
200
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
201
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
202 void ExecuteTransaction(DatabasePluginMessages::TransactionResponse& response,
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
203 DatabasePluginMessages::TransactionOperation operation)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
204 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
205 DatabasePluginMessages::TransactionRequest request; // Ignored
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
206 ExecuteTransaction(response, operation, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
207 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
208
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
209
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
210 void ExecuteTransaction(DatabasePluginMessages::TransactionOperation operation,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
211 const DatabasePluginMessages::TransactionRequest& request)
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
212 {
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
213 DatabasePluginMessages::TransactionResponse response; // Ignored
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
214 ExecuteTransaction(response, operation, request);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
215 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
216
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
217
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
218 void ExecuteTransaction(DatabasePluginMessages::TransactionOperation operation)
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 {
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
220 DatabasePluginMessages::TransactionResponse response; // Ignored
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
221 DatabasePluginMessages::TransactionRequest request; // Ignored
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
222 ExecuteTransaction(response, operation, request);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
223 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
224
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
225
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
226 public:
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
227 Transaction(OrthancPluginDatabaseV4& database,
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
228 IDatabaseListener& listener,
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
229 TransactionType type) :
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
230 database_(database),
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
231 listener_(listener),
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
232 transaction_(NULL)
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
233 {
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
234 DatabasePluginMessages::DatabaseRequest request;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
235
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
236 switch (type)
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
237 {
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
238 case TransactionType_ReadOnly:
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
239 request.mutable_start_transaction()->set_type(DatabasePluginMessages::TRANSACTION_READ_ONLY);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
240 break;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
241
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
242 case TransactionType_ReadWrite:
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
243 request.mutable_start_transaction()->set_type(DatabasePluginMessages::TRANSACTION_READ_WRITE);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
244 break;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
245
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
246 default:
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
247 throw OrthancException(ErrorCode_ParameterOutOfRange);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
248 }
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
249
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
250 DatabasePluginMessages::DatabaseResponse response;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
251 ExecuteDatabase(response, database, DatabasePluginMessages::OPERATION_START_TRANSACTION, request);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
252
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
253 transaction_ = reinterpret_cast<void*>(response.start_transaction().transaction());
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
254
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
255 if (transaction_ == NULL)
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
256 {
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
257 throw OrthancException(ErrorCode_NullPointer);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
258 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
259 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
260
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
261
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
262 virtual ~Transaction()
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
263 {
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
264 try
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
265 {
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
266 DatabasePluginMessages::DatabaseRequest request;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
267 request.mutable_finalize_transaction()->set_transaction(reinterpret_cast<intptr_t>(transaction_));
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
268
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
269 DatabasePluginMessages::DatabaseResponse response;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
270 ExecuteDatabase(response, database_, DatabasePluginMessages::OPERATION_FINALIZE_TRANSACTION, request);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
271 }
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
272 catch (OrthancException& e)
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
273 {
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
274 // Destructors must not throw exceptions
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
275 LOG(ERROR) << "Cannot finalize the database engine: " << e.What();
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
276 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277 }
5215
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
278
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
279
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
280 void* GetTransactionObject()
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
281 {
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
282 return transaction_;
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
283 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286 virtual void Rollback() ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
287 {
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
288 ExecuteTransaction(DatabasePluginMessages::OPERATION_ROLLBACK);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
291
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
292 virtual void Commit(int64_t fileSizeDelta) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
294 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
295 request.mutable_commit()->set_file_size_delta(fileSizeDelta);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
296
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
297 ExecuteTransaction(DatabasePluginMessages::OPERATION_COMMIT, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
299
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
300
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301 virtual void AddAttachment(int64_t id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
302 const FileInfo& attachment,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303 int64_t revision) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
304 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
305 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
306 request.mutable_add_attachment()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
307 request.mutable_add_attachment()->mutable_attachment()->set_uuid(attachment.GetUuid());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
308 request.mutable_add_attachment()->mutable_attachment()->set_content_type(attachment.GetContentType());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
309 request.mutable_add_attachment()->mutable_attachment()->set_uncompressed_size(attachment.GetUncompressedSize());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
310 request.mutable_add_attachment()->mutable_attachment()->set_uncompressed_hash(attachment.GetUncompressedMD5());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
311 request.mutable_add_attachment()->mutable_attachment()->set_compression_type(attachment.GetCompressionType());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
312 request.mutable_add_attachment()->mutable_attachment()->set_compressed_size(attachment.GetCompressedSize());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
313 request.mutable_add_attachment()->mutable_attachment()->set_compressed_hash(attachment.GetCompressedMD5());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
314 request.mutable_add_attachment()->set_revision(revision);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
315
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
316 ExecuteTransaction(DatabasePluginMessages::OPERATION_ADD_ATTACHMENT, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
319
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320 virtual void ClearChanges() ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321 {
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
322 ExecuteTransaction(DatabasePluginMessages::OPERATION_CLEAR_CHANGES);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326 virtual void ClearExportedResources() ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327 {
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
328 ExecuteTransaction(DatabasePluginMessages::OPERATION_CLEAR_EXPORTED_RESOURCES);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
331
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332 virtual void DeleteAttachment(int64_t id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
333 FileContentType attachment) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
334 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
335 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
336 request.mutable_delete_attachment()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
337 request.mutable_delete_attachment()->set_type(attachment);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
338
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
339 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
340 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_DELETE_ATTACHMENT, request);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
341
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
342 listener_.SignalAttachmentDeleted(Convert(response.delete_attachment().deleted_attachment()));
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
343 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
345
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
346 virtual void DeleteMetadata(int64_t id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
347 MetadataType type) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
349 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
350 request.mutable_delete_metadata()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
351 request.mutable_delete_metadata()->set_type(type);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
352
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
353 ExecuteTransaction(DatabasePluginMessages::OPERATION_DELETE_METADATA, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
354 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
355
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
356
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357 virtual void DeleteResource(int64_t id) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
358 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
359 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
360 request.mutable_delete_resource()->set_id(id);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
361
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
362 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
363 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_DELETE_RESOURCE, request);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
364
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
365 for (int i = 0; i < response.delete_resource().deleted_attachments().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
366 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
367 listener_.SignalAttachmentDeleted(Convert(response.delete_resource().deleted_attachments(i)));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
368 }
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
369
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
370 for (int i = 0; i < response.delete_resource().deleted_resources().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
371 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
372 listener_.SignalResourceDeleted(Convert(response.delete_resource().deleted_resources(i).level()),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
373 response.delete_resource().deleted_resources(i).public_id());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
374 }
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
375
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
376 if (response.delete_resource().is_remaining_ancestor())
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
377 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
378 listener_.SignalRemainingAncestor(Convert(response.delete_resource().remaining_ancestor().level()),
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
379 response.delete_resource().remaining_ancestor().public_id());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
380 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
381 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
382
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
383
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
384 virtual void GetAllMetadata(std::map<MetadataType, std::string>& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
385 int64_t id) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
386 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
387 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
388 request.mutable_get_all_metadata()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
389
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
390 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
391 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_METADATA, request);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
392
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
393 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
394 for (int i = 0; i < response.get_all_metadata().metadata().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
395 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
396 MetadataType key = static_cast<MetadataType>(response.get_all_metadata().metadata(i).type());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
397
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
398 if (target.find(key) == target.end())
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
399 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
400 target[key] = response.get_all_metadata().metadata(i).value();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
401 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
402 else
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
403 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
404 throw OrthancException(ErrorCode_DatabasePlugin);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
405 }
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
406 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
407 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
408
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
409
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 virtual void GetAllPublicIds(std::list<std::string>& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
411 ResourceType resourceType) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
413 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
414 request.mutable_get_all_public_ids()->set_resource_type(Convert(resourceType));
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
415
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
416 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
417 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS, request);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
418
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
419 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
420 for (int i = 0; i < response.get_all_public_ids().ids().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
421 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
422 target.push_back(response.get_all_public_ids().ids(i));
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
423 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
424 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
425
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
426
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
427 virtual void GetAllPublicIds(std::list<std::string>& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
428 ResourceType resourceType,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5211
diff changeset
429 int64_t since,
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5211
diff changeset
430 uint32_t limit) ORTHANC_OVERRIDE
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
431 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
432 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
433 request.mutable_get_all_public_ids_with_limits()->set_resource_type(Convert(resourceType));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
434 request.mutable_get_all_public_ids_with_limits()->set_since(since);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
435 request.mutable_get_all_public_ids_with_limits()->set_limit(limit);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
436
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
437 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
438 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS_WITH_LIMITS, request);
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
439
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
440 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
441 for (int i = 0; i < response.get_all_public_ids_with_limits().ids().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
442 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
443 target.push_back(response.get_all_public_ids_with_limits().ids(i));
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
444 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
445 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
446
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
447
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
448 virtual void GetChanges(std::list<ServerIndexChange>& target /*out*/,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
449 bool& done /*out*/,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
450 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5211
diff changeset
451 uint32_t limit) ORTHANC_OVERRIDE
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
452 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
453 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
454 request.mutable_get_changes()->set_since(since);
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5211
diff changeset
455 request.mutable_get_changes()->set_limit(limit);
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
456
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
457 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
458 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_CHANGES, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
459
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
460 done = response.get_changes().done();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
461
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
462 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
463 for (int i = 0; i < response.get_changes().changes().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
464 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
465 target.push_back(Convert(response.get_changes().changes(i)));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
466 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
467 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
468
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
469
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
470 virtual void GetChildrenInternalId(std::list<int64_t>& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
471 int64_t id) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
472 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
473 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
474 request.mutable_get_children_internal_id()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
475
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
476 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
477 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
478
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
479 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
480 for (int i = 0; i < response.get_children_internal_id().ids().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
481 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
482 target.push_back(response.get_children_internal_id().ids(i));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
483 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
484 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
485
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
486
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
487 virtual void GetChildrenPublicId(std::list<std::string>& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488 int64_t id) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
489 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
490 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
491 request.mutable_get_children_public_id()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
492
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
493 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
494 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
495
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
496 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
497 for (int i = 0; i < response.get_children_public_id().ids().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
498 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
499 target.push_back(response.get_children_public_id().ids(i));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
500 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
501 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
502
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
503
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
504 virtual void GetExportedResources(std::list<ExportedResource>& target /*out*/,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
505 bool& done /*out*/,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
506 int64_t since,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5211
diff changeset
507 uint32_t limit) ORTHANC_OVERRIDE
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
508 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
509 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
510 request.mutable_get_exported_resources()->set_since(since);
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5211
diff changeset
511 request.mutable_get_exported_resources()->set_limit(limit);
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
512
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
513 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
514 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_EXPORTED_RESOURCES, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
515
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
516 done = response.get_exported_resources().done();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
517
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
518 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
519 for (int i = 0; i < response.get_exported_resources().resources().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
520 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
521 target.push_back(Convert(response.get_exported_resources().resources(i)));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
522 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
523 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
524
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
525
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
526 virtual void GetLastChange(std::list<ServerIndexChange>& target /*out*/) ORTHANC_OVERRIDE
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
527 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
528 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
529 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_LAST_CHANGE);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
530
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
531 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
532 if (response.get_last_change().found())
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
533 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
534 target.push_back(Convert(response.get_last_change().change()));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
535 }
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
536 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
537
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
538
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
539 virtual void GetLastExportedResource(std::list<ExportedResource>& target /*out*/) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
540 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
541 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
542 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_LAST_EXPORTED_RESOURCE);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
543
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
544 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
545 if (response.get_last_exported_resource().found())
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
546 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
547 target.push_back(Convert(response.get_last_exported_resource().resource()));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
548 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
549 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
550
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
551
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
552 virtual void GetMainDicomTags(DicomMap& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
553 int64_t id) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
554 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
555 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
556 request.mutable_get_main_dicom_tags()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
557
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
558 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
559 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_MAIN_DICOM_TAGS, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
560
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
561 target.Clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
562
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
563 for (int i = 0; i < response.get_main_dicom_tags().tags().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
564 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
565 const DatabasePluginMessages::GetMainDicomTags_Response_Tag& tag = response.get_main_dicom_tags().tags(i);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
566 if (tag.group() > 0xffffu ||
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
567 tag.element() > 0xffffu)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
568 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
569 throw OrthancException(ErrorCode_ParameterOutOfRange);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
570 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
571 else
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
572 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
573 target.SetValue(tag.group(), tag.element(), tag.value(), false);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
574 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
575 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
576 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
577
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
578
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
579 virtual std::string GetPublicId(int64_t resourceId) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
580 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
581 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
582 request.mutable_get_public_id()->set_id(resourceId);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
583
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
584 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
585 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_PUBLIC_ID, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
586 return response.get_public_id().id();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
587 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
588
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
589
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
590 virtual uint64_t GetResourcesCount(ResourceType resourceType) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
591 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
592 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
593 request.mutable_get_resources_count()->set_type(Convert(resourceType));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
594
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
595 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
596 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_RESOURCES_COUNT, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
597 return response.get_resources_count().count();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
598 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
599
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
600
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
601 virtual ResourceType GetResourceType(int64_t resourceId) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
602 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
603 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
604 request.mutable_get_resource_type()->set_id(resourceId);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
605
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
606 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
607 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
608 return Convert(response.get_resource_type().type());
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
609 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
610
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
611
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
612 virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
613 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
614 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
615 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
616 return response.get_total_compressed_size().size();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
617 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
618
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
619
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
620 virtual uint64_t GetTotalUncompressedSize() ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
621 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
622 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
623 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_TOTAL_UNCOMPRESSED_SIZE);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
624 return response.get_total_uncompressed_size().size();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
625 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
626
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
627
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
628 virtual bool IsProtectedPatient(int64_t internalId) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
629 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
630 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
631 request.mutable_is_protected_patient()->set_patient_id(internalId);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
632
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
633 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
634 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_IS_PROTECTED_PATIENT, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
635 return response.is_protected_patient().protected_patient();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
636 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
637
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
638
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
639 virtual void ListAvailableAttachments(std::set<FileContentType>& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
640 int64_t id) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
641 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
642 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
643 request.mutable_list_available_attachments()->set_id(id);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
644
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
645 DatabasePluginMessages::TransactionResponse response;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
646 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS, request);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
647
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
648 target.clear();
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
649 for (int i = 0; i < response.list_available_attachments().attachments().size(); i++)
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
650 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
651 FileContentType attachment = static_cast<FileContentType>(response.list_available_attachments().attachments(i));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
652
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
653 if (target.find(attachment) == target.end())
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
654 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
655 target.insert(attachment);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
656 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
657 else
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
658 {
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
659 throw OrthancException(ErrorCode_DatabasePlugin);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
660 }
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
661 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
662 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
663
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
664
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
665 virtual void LogChange(int64_t internalId,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
666 const ServerIndexChange& change) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
667 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
668 // TODO => Simplify "IDatabaseWrapper"
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
669
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
670 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
671 request.mutable_log_change()->set_change_type(change.GetChangeType());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
672 request.mutable_log_change()->set_resource_id(internalId);
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
673 request.mutable_log_change()->set_resource_type(Convert(change.GetResourceType()));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
674 request.mutable_log_change()->set_date(change.GetDate());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
675
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
676 ExecuteTransaction(DatabasePluginMessages::OPERATION_LOG_CHANGE, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
677 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
678
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
679
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
680 virtual void LogExportedResource(const ExportedResource& resource) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
681 {
5210
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
682 // TODO: "seq" is ignored, could be simplified in "ExportedResource"
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
683
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
684 DatabasePluginMessages::TransactionRequest request;
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
685 request.mutable_log_exported_resource()->set_resource_type(Convert(resource.GetResourceType()));
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
686 request.mutable_log_exported_resource()->set_public_id(resource.GetPublicId());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
687 request.mutable_log_exported_resource()->set_modality(resource.GetModality());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
688 request.mutable_log_exported_resource()->set_date(resource.GetDate());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
689 request.mutable_log_exported_resource()->set_patient_id(resource.GetPatientId());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
690 request.mutable_log_exported_resource()->set_study_instance_uid(resource.GetStudyInstanceUid());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
691 request.mutable_log_exported_resource()->set_series_instance_uid(resource.GetSeriesInstanceUid());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
692 request.mutable_log_exported_resource()->set_sop_instance_uid(resource.GetSopInstanceUid());
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
693
6a7a244c777d cont OrthancPluginDatabaseV4::Transaction
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5209
diff changeset
694 ExecuteTransaction(DatabasePluginMessages::OPERATION_LOG_EXPORTED_RESOURCE, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
695 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
696
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
697
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
698 virtual bool LookupAttachment(FileInfo& attachment,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
699 int64_t& revision,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
700 int64_t id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
701 FileContentType contentType) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
702 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
703 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
704 request.mutable_lookup_attachment()->set_id(id);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
705 request.mutable_lookup_attachment()->set_content_type(contentType);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
706
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
707 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
708 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LOOKUP_ATTACHMENT, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
709
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
710 if (response.lookup_attachment().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
711 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
712 attachment = Convert(response.lookup_attachment().attachment());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
713 revision = response.lookup_attachment().revision();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
714 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
715 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
716 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
717 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
718 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
719 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
720 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
721
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
722
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
723 virtual bool LookupGlobalProperty(std::string& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
724 GlobalProperty property,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
725 bool shared) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
726 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
727 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
728 request.mutable_lookup_global_property()->set_server_id(shared ? "" : database_.GetServerIdentifier());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
729 request.mutable_lookup_global_property()->set_property(property);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
730
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
731 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
732 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LOOKUP_GLOBAL_PROPERTY, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
733
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
734 if (response.lookup_global_property().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
735 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
736 target = response.lookup_global_property().value();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
737 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
738 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
739 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
740 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
741 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
742 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
743 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
744
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
745
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
746 virtual bool LookupMetadata(std::string& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
747 int64_t& revision,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
748 int64_t id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
749 MetadataType type) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
750 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
751 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
752 request.mutable_lookup_metadata()->set_id(id);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
753 request.mutable_lookup_metadata()->set_metadata_type(type);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
754
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
755 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
756 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LOOKUP_METADATA, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
757
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
758 if (response.lookup_metadata().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
759 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
760 target = response.lookup_metadata().value();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
761 revision = response.lookup_metadata().revision();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
762 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
763 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
764 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
765 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
766 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
767 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
768 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
769
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
770
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
771 virtual bool LookupParent(int64_t& parentId,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
772 int64_t resourceId) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
773 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
774 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
775 request.mutable_lookup_parent()->set_id(resourceId);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
776
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
777 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
778 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LOOKUP_PARENT, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
779
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
780 if (response.lookup_parent().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
781 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
782 parentId = response.lookup_parent().parent();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
783 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
784 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
785 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
786 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
787 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
788 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
789 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
790
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
791
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
792 virtual bool LookupResource(int64_t& id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
793 ResourceType& type,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
794 const std::string& publicId) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
795 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
796 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
797 request.mutable_lookup_resource()->set_public_id(publicId);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
798
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
799 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
800 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LOOKUP_RESOURCE, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
801
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
802 if (response.lookup_resource().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
803 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
804 id = response.lookup_resource().internal_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
805 type = Convert(response.lookup_resource().type());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
806 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
807 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
808 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
809 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
810 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
811 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
812 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
813
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
814
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
815 virtual bool SelectPatientToRecycle(int64_t& internalId) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
816 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
817 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
818 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
819
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
820 if (response.select_patient_to_recycle().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
821 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
822 internalId = response.select_patient_to_recycle().patient_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
823 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
824 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
825 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
826 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
827 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
828 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
829 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
830
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
831
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
832 virtual bool SelectPatientToRecycle(int64_t& internalId,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
833 int64_t patientIdToAvoid) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
834 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
835 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
836 request.mutable_select_patient_to_recycle_with_avoid()->set_patient_id_to_avoid(patientIdToAvoid);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
837
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
838 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
839 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_SELECT_PATIENT_TO_RECYCLE_WITH_AVOID, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
840
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
841 if (response.select_patient_to_recycle_with_avoid().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
842 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
843 internalId = response.select_patient_to_recycle_with_avoid().patient_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
844 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
845 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
846 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
847 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
848 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
849 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
850 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
851
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
852
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
853 virtual void SetGlobalProperty(GlobalProperty property,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
854 bool shared,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
855 const std::string& value) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
856 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
857 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
858 request.mutable_set_global_property()->set_server_id(shared ? "" : database_.GetServerIdentifier());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
859 request.mutable_set_global_property()->set_property(property);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
860 request.mutable_set_global_property()->set_value(value);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
861
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
862 ExecuteTransaction(DatabasePluginMessages::OPERATION_SET_GLOBAL_PROPERTY, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
863 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
864
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
865
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
866 virtual void ClearMainDicomTags(int64_t id) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
867 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
868 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
869 request.mutable_clear_main_dicom_tags()->set_id(id);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
870
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
871 ExecuteTransaction(DatabasePluginMessages::OPERATION_CLEAR_MAIN_DICOM_TAGS, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
872 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
873
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
874
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
875 virtual void SetMetadata(int64_t id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
876 MetadataType type,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
877 const std::string& value,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
878 int64_t revision) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
879 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
880 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
881 request.mutable_set_metadata()->set_id(id);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
882 request.mutable_set_metadata()->set_metadata_type(type);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
883 request.mutable_set_metadata()->set_value(value);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
884 request.mutable_set_metadata()->set_revision(revision);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
885
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
886 ExecuteTransaction(DatabasePluginMessages::OPERATION_SET_METADATA, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
887 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
888
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
889
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
890 virtual void SetProtectedPatient(int64_t internalId,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
891 bool isProtected) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
892 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
893 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
894 request.mutable_set_protected_patient()->set_patient_id(internalId);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
895 request.mutable_set_protected_patient()->set_protected_patient(isProtected);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
896
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
897 ExecuteTransaction(DatabasePluginMessages::OPERATION_SET_PROTECTED_PATIENT, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
898 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
899
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
900
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
901 virtual bool IsDiskSizeAbove(uint64_t threshold) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
902 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
903 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
904 request.mutable_is_disk_size_above()->set_threshold(threshold);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
905
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
906 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
907 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_IS_DISK_SIZE_ABOVE, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
908
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
909 return response.is_disk_size_above().result();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
910 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
911
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
912
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
913 virtual void ApplyLookupResources(std::list<std::string>& resourcesId,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
914 std::list<std::string>* instancesId, // Can be NULL if not needed
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
915 const std::vector<DatabaseConstraint>& lookup,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
916 ResourceType queryLevel,
5213
055428d92772 clarifying types of since/limit in IDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5211
diff changeset
917 uint32_t limit) ORTHANC_OVERRIDE
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
918 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
919 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
920 request.mutable_lookup_resources()->set_query_level(Convert(queryLevel));
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
921 request.mutable_lookup_resources()->set_limit(limit);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
922 request.mutable_lookup_resources()->set_retrieve_instances_ids(instancesId != NULL);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
923
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
924 request.mutable_lookup_resources()->mutable_lookup()->Reserve(lookup.size());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
925
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
926 for (size_t i = 0; i < lookup.size(); i++)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
927 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
928 DatabasePluginMessages::DatabaseConstraint* constraint = request.mutable_lookup_resources()->add_lookup();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
929 constraint->set_level(Convert(lookup[i].GetLevel()));
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
930 constraint->set_tag_group(lookup[i].GetTag().GetGroup());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
931 constraint->set_tag_element(lookup[i].GetTag().GetElement());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
932 constraint->set_is_identifier_tag(lookup[i].IsIdentifier());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
933 constraint->set_is_case_sensitive(lookup[i].IsCaseSensitive());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
934 constraint->set_is_mandatory(lookup[i].IsMandatory());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
935
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
936 constraint->mutable_values()->Reserve(lookup[i].GetValuesCount());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
937 for (size_t j = 0; j < lookup[i].GetValuesCount(); j++)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
938 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
939 constraint->add_values(lookup[i].GetValue(j));
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
940 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
941
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
942 switch (lookup[i].GetConstraintType())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
943 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
944 case ConstraintType_Equal:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
945 constraint->set_type(DatabasePluginMessages::CONSTRAINT_EQUAL);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
946 break;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
947
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
948 case ConstraintType_SmallerOrEqual:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
949 constraint->set_type(DatabasePluginMessages::CONSTRAINT_SMALLER_OR_EQUAL);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
950 break;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
951
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
952 case ConstraintType_GreaterOrEqual:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
953 constraint->set_type(DatabasePluginMessages::CONSTRAINT_GREATER_OR_EQUAL);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
954 break;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
955
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
956 case ConstraintType_Wildcard:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
957 constraint->set_type(DatabasePluginMessages::CONSTRAINT_WILDCARD);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
958 break;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
959
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
960 case ConstraintType_List:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
961 constraint->set_type(DatabasePluginMessages::CONSTRAINT_LIST);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
962 break;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
963
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
964 default:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
965 throw OrthancException(ErrorCode_ParameterOutOfRange);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
966 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
967 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
968
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
969 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
970 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LOOKUP_RESOURCES, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
971
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
972 for (int i = 0; i < response.lookup_resources().resources_ids().size(); i++)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
973 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
974 resourcesId.push_back(response.lookup_resources().resources_ids(i));
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
975 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
976
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
977 if (instancesId != NULL)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
978 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
979 if (response.lookup_resources().resources_ids().size() != response.lookup_resources().instances_ids().size())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
980 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
981 throw OrthancException(ErrorCode_DatabasePlugin);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
982 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
983 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
984 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
985 for (int i = 0; i < response.lookup_resources().instances_ids().size(); i++)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
986 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
987 instancesId->push_back(response.lookup_resources().instances_ids(i));
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
988 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
989 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
990 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
991 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
992
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
993
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
994 virtual bool CreateInstance(CreateInstanceResult& result, /* out */
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
995 int64_t& instanceId, /* out */
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
996 const std::string& patient,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
997 const std::string& study,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
998 const std::string& series,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
999 const std::string& instance) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1000 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1001 // TODO: "CreateInstanceResult" => constructor and getters
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1002
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1003 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1004 request.mutable_create_instance()->set_patient(patient);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1005 request.mutable_create_instance()->set_study(study);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1006 request.mutable_create_instance()->set_series(series);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1007 request.mutable_create_instance()->set_instance(instance);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1008
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1009 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1010 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_CREATE_INSTANCE, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1011
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1012 instanceId = response.create_instance().instance_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1013
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1014 if (response.create_instance().is_new_instance())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1015 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1016 result.isNewPatient_ = response.create_instance().is_new_patient();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1017 result.isNewStudy_ = response.create_instance().is_new_study();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1018 result.isNewSeries_ = response.create_instance().is_new_series();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1019 result.patientId_ = response.create_instance().patient_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1020 result.studyId_ = response.create_instance().study_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1021 result.seriesId_ = response.create_instance().series_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1022 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1023 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1024 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1025 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1026 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1027 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1028 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1029
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1030
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1031 virtual void SetResourcesContent(const ResourcesContent& content) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1032 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1033 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1034
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1035 request.mutable_set_resources_content()->mutable_tags()->Reserve(content.GetListTags().size());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1036 for (ResourcesContent::ListTags::const_iterator it = content.GetListTags().begin(); it != content.GetListTags().end(); ++it)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1037 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1038 DatabasePluginMessages::SetResourcesContent_Request_Tag* tag = request.mutable_set_resources_content()->add_tags();
5215
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1039 tag->set_resource_id(it->GetResourceId());
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1040 tag->set_is_identifier(it->IsIdentifier());
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1041 tag->set_group(it->GetTag().GetGroup());
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1042 tag->set_element(it->GetTag().GetElement());
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1043 tag->set_value(it->GetValue());
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1044 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1045
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1046 request.mutable_set_resources_content()->mutable_metadata()->Reserve(content.GetListMetadata().size());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1047 for (ResourcesContent::ListMetadata::const_iterator it = content.GetListMetadata().begin(); it != content.GetListMetadata().end(); ++it)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1048 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1049 DatabasePluginMessages::SetResourcesContent_Request_Metadata* metadata = request.mutable_set_resources_content()->add_metadata();
5215
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1050 metadata->set_resource_id(it->GetResourceId());
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1051 metadata->set_metadata(it->GetType());
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1052 metadata->set_value(it->GetValue());
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1053 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1054
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1055 ExecuteTransaction(DatabasePluginMessages::OPERATION_SET_RESOURCES_CONTENT, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1056 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1057
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1058
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1059 virtual void GetChildrenMetadata(std::list<std::string>& target,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1060 int64_t resourceId,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1061 MetadataType metadata) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1062 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1063 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1064 request.mutable_get_children_metadata()->set_id(resourceId);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1065 request.mutable_get_children_metadata()->set_metadata(metadata);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1066
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1067 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1068 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_CHILDREN_METADATA, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1069
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1070 for (int i = 0; i < response.get_children_metadata().values().size(); i++)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1071 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1072 target.push_back(response.get_children_metadata().values(i));
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1073 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1074 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1075
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1076
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1077 virtual int64_t GetLastChangeIndex() ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1078 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1079 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1080 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_GET_LAST_CHANGE_INDEX);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1081 return response.get_last_change_index().result();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1082 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1083
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1084
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1085 virtual bool LookupResourceAndParent(int64_t& id,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1086 ResourceType& type,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1087 std::string& parentPublicId,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1088 const std::string& publicId) ORTHANC_OVERRIDE
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1089 {
5211
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1090 DatabasePluginMessages::TransactionRequest request;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1091 request.mutable_lookup_resource_and_parent()->set_public_id(publicId);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1092
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1093 DatabasePluginMessages::TransactionResponse response;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1094 ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LOOKUP_RESOURCE_AND_PARENT, request);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1095
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1096 if (response.lookup_resource_and_parent().found())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1097 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1098 id = response.lookup_resource_and_parent().id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1099 type = Convert(response.lookup_resource_and_parent().type());
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1100
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1101 switch (type)
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1102 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1103 case ResourceType_Patient:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1104 if (!response.lookup_resource_and_parent().parent_public_id().empty())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1105 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1106 throw OrthancException(ErrorCode_DatabasePlugin);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1107 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1108 break;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1109
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1110 case ResourceType_Study:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1111 case ResourceType_Series:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1112 case ResourceType_Instance:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1113 if (response.lookup_resource_and_parent().parent_public_id().empty())
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1114 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1115 throw OrthancException(ErrorCode_DatabasePlugin);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1116 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1117 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1118 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1119 parentPublicId = response.lookup_resource_and_parent().parent_public_id();
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1120 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1121 break;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1122
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1123 default:
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1124 throw OrthancException(ErrorCode_ParameterOutOfRange);
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1125 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1126
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1127 return true;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1128 }
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1129 else
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1130 {
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1131 return false;
27e6ec2811e3 completed first implementation of OrthancPluginDatabaseV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5210
diff changeset
1132 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1133 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1134 };
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1135
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1136
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1137 OrthancPluginDatabaseV4::OrthancPluginDatabaseV4(SharedLibrary& library,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1138 PluginsErrorDictionary& errorDictionary,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1139 const _OrthancPluginRegisterDatabaseBackendV4& database,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1140 const std::string& serverIdentifier) :
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1141 library_(library),
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1142 errorDictionary_(errorDictionary),
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1143 definition_(database),
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1144 serverIdentifier_(serverIdentifier),
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1145 open_(false),
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1146 databaseVersion_(0),
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1147 hasFlushToDisk_(false),
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1148 hasRevisionsSupport_(false)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1149 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1150 CLOG(INFO, PLUGINS) << "Identifier of this Orthanc server for the global properties "
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1151 << "of the custom database: \"" << serverIdentifier << "\"";
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1152
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1153 if (definition_.backend == NULL ||
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1154 definition_.operations == NULL ||
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1155 definition_.finalize == NULL)
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1156 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1157 throw OrthancException(ErrorCode_NullPointer);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1158 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1159 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1160
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1161
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1162 OrthancPluginDatabaseV4::~OrthancPluginDatabaseV4()
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1163 {
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1164 definition_.finalize(definition_.backend);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1165 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1166
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1167
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1168 void OrthancPluginDatabaseV4::Open()
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1169 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1170 if (open_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1171 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1172 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1173 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1174
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1175 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1176 DatabasePluginMessages::DatabaseRequest request;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1177 DatabasePluginMessages::DatabaseResponse response;
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1178 ExecuteDatabase(response, *this, DatabasePluginMessages::OPERATION_OPEN, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1179 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1180
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1181 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1182 DatabasePluginMessages::DatabaseRequest request;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1183 DatabasePluginMessages::DatabaseResponse response;
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1184 ExecuteDatabase(response, *this, DatabasePluginMessages::OPERATION_GET_SYSTEM_INFORMATION, request);
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1185 databaseVersion_ = response.get_system_information().database_version();
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1186 hasFlushToDisk_ = response.get_system_information().supports_flush_to_disk();
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1187 hasRevisionsSupport_ = response.get_system_information().supports_revisions();
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1188 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1189
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1190 open_ = true;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1191 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1192
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1193
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1194 void OrthancPluginDatabaseV4::Close()
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1195 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1196 if (!open_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1197 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1198 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1199 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1200 else
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1201 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1202 DatabasePluginMessages::DatabaseRequest request;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1203 DatabasePluginMessages::DatabaseResponse response;
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1204 ExecuteDatabase(response, *this, DatabasePluginMessages::OPERATION_CLOSE, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1205 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1206 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1208
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1209 bool OrthancPluginDatabaseV4::HasFlushToDisk() const
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1210 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1211 if (!open_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1212 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1213 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1214 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1215 else
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1216 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1217 return hasFlushToDisk_;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1218 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1219 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1220
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1221
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1222 void OrthancPluginDatabaseV4::FlushToDisk()
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1223 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1224 if (!open_ ||
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1225 !hasFlushToDisk_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1226 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1227 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1228 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1229 else
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1230 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1231 DatabasePluginMessages::DatabaseRequest request;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1232 DatabasePluginMessages::DatabaseResponse response;
5209
154d37a56500 started implementation of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5207
diff changeset
1233 ExecuteDatabase(response, *this, DatabasePluginMessages::OPERATION_FLUSH_TO_DISK, request);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1234 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1235 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1236
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1237
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1238 IDatabaseWrapper::ITransaction* OrthancPluginDatabaseV4::StartTransaction(TransactionType type,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1239 IDatabaseListener& listener)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1240 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1241 if (!open_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1242 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1243 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1244 }
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1245 else
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1246 {
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1247 return new Transaction(*this, listener, type);
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1248 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1249 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1250
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1251
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1252 unsigned int OrthancPluginDatabaseV4::GetDatabaseVersion()
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1253 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1254 if (!open_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1255 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1256 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1257 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1258 else
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1259 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1260 return databaseVersion_;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1261 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1262 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1263
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1264
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1265 void OrthancPluginDatabaseV4::Upgrade(unsigned int targetVersion,
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1266 IStorageArea& storageArea)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1267 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1268 if (!open_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1269 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1270 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1271 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1272 else
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1273 {
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1274 VoidDatabaseListener listener;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1275 Transaction transaction(*this, listener, TransactionType_ReadWrite);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1276
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1277 try
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1278 {
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1279 DatabasePluginMessages::DatabaseRequest request;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1280 request.mutable_upgrade()->set_target_version(targetVersion);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1281 request.mutable_upgrade()->set_storage_area(reinterpret_cast<intptr_t>(&storageArea));
5215
8b6da4fdf9fe cleaning ResourcesContent::TagValue and ResourcesContent::Metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5214
diff changeset
1282 request.mutable_upgrade()->set_transaction(reinterpret_cast<intptr_t>(transaction.GetTransactionObject()));
5214
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1283
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1284 DatabasePluginMessages::DatabaseResponse response;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1285
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1286 ExecuteDatabase(response, *this, DatabasePluginMessages::OPERATION_UPGRADE, request);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1287 transaction.Commit(0);
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1288 }
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1289 catch (OrthancException& e)
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1290 {
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1291 transaction.Rollback();
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1292 throw;
a9d00b17a48e implemented OrthancPluginDatabaseV4::Upgrade()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5213
diff changeset
1293 }
5207
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1294 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1295 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1296
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1297
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1298 bool OrthancPluginDatabaseV4::HasRevisionsSupport() const
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1299 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1300 if (!open_)
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1301 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1302 throw OrthancException(ErrorCode_BadSequenceOfCalls);
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1303 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1304 else
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1305 {
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1306 return hasRevisionsSupport_;
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1307 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1308 }
e7529e6241d2 first successful protobuf communication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1309 }