comparison Framework/Plugins/IndexBackend.h @ 201:42990b2dd51b

create IDatabaseBackendOutput only if needed
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 18 Mar 2021 16:51:51 +0100
parents 3236894320d6
children 2def2df94f94
comparison
equal deleted inserted replaced
200:30b210616f4f 201:42990b2dd51b
29 { 29 {
30 class IndexBackend : public OrthancPlugins::IDatabaseBackend 30 class IndexBackend : public OrthancPlugins::IDatabaseBackend
31 { 31 {
32 private: 32 private:
33 class LookupFormatter; 33 class LookupFormatter;
34 34
35 DatabaseManager manager_; 35 OrthancPluginContext* context_;
36 36 DatabaseManager manager_;
37
38 std::unique_ptr<OrthancPlugins::IDatabaseBackendOutput::IFactory> outputFactory_;
39
37 protected: 40 protected:
38 DatabaseManager& GetManager() 41 DatabaseManager& GetManager()
39 { 42 {
40 return manager_; 43 return manager_;
41 } 44 }
60 63
61 void ClearDeletedFiles(); 64 void ClearDeletedFiles();
62 65
63 void ClearDeletedResources(); 66 void ClearDeletedResources();
64 67
65 void SignalDeletedFiles(); 68 void SignalDeletedFiles(OrthancPlugins::IDatabaseBackendOutput& output);
66 69
67 void SignalDeletedResources(); 70 void SignalDeletedResources(OrthancPlugins::IDatabaseBackendOutput& output);
68 71
69 private: 72 private:
70 void ReadChangesInternal(bool& done, 73 void ReadChangesInternal(OrthancPlugins::IDatabaseBackendOutput& output,
74 bool& done,
71 DatabaseManager::CachedStatement& statement, 75 DatabaseManager::CachedStatement& statement,
72 const Dictionary& args, 76 const Dictionary& args,
73 uint32_t maxResults); 77 uint32_t maxResults);
74 78
75 void ReadExportedResourcesInternal(bool& done, 79 void ReadExportedResourcesInternal(OrthancPlugins::IDatabaseBackendOutput& output,
80 bool& done,
76 DatabaseManager::CachedStatement& statement, 81 DatabaseManager::CachedStatement& statement,
77 const Dictionary& args, 82 const Dictionary& args,
78 uint32_t maxResults); 83 uint32_t maxResults);
79 84
80 public: 85 public:
81 IndexBackend(IDatabaseFactory* factory); 86 IndexBackend(OrthancPluginContext* context,
82 87 IDatabaseFactory* factory);
83 virtual void Open() 88
89 virtual OrthancPluginContext* GetContext() ORTHANC_OVERRIDE
90 {
91 return context_;
92 }
93
94 virtual void SetOutputFactory(OrthancPlugins::IDatabaseBackendOutput::IFactory* factory) ORTHANC_OVERRIDE;
95
96 virtual OrthancPlugins::IDatabaseBackendOutput* CreateOutput() ORTHANC_OVERRIDE;
97
98 virtual void Open() ORTHANC_OVERRIDE
84 { 99 {
85 manager_.Open(); 100 manager_.Open();
86 } 101 }
87 102
88 virtual void Close() 103 virtual void Close() ORTHANC_OVERRIDE
89 { 104 {
90 manager_.Close(); 105 manager_.Close();
91 } 106 }
92 107
93 virtual void AddAttachment(int64_t id, 108 virtual void AddAttachment(int64_t id,
94 const OrthancPluginAttachment& attachment); 109 const OrthancPluginAttachment& attachment) ORTHANC_OVERRIDE;
95 110
96 virtual void AttachChild(int64_t parent, 111 virtual void AttachChild(int64_t parent,
97 int64_t child); 112 int64_t child) ORTHANC_OVERRIDE;
98 113
99 virtual void ClearChanges(); 114 virtual void ClearChanges() ORTHANC_OVERRIDE;
100 115
101 virtual void ClearExportedResources(); 116 virtual void ClearExportedResources() ORTHANC_OVERRIDE;
102 117
103 virtual void DeleteAttachment(int64_t id, 118 virtual void DeleteAttachment(OrthancPlugins::IDatabaseBackendOutput& output,
104 int32_t attachment); 119 int64_t id,
120 int32_t attachment) ORTHANC_OVERRIDE;
105 121
106 virtual void DeleteMetadata(int64_t id, 122 virtual void DeleteMetadata(int64_t id,
107 int32_t metadataType); 123 int32_t metadataType) ORTHANC_OVERRIDE;
108 124
109 virtual void DeleteResource(int64_t id); 125 virtual void DeleteResource(OrthancPlugins::IDatabaseBackendOutput& output,
126 int64_t id) ORTHANC_OVERRIDE;
110 127
111 virtual void GetAllInternalIds(std::list<int64_t>& target, 128 virtual void GetAllInternalIds(std::list<int64_t>& target,
112 OrthancPluginResourceType resourceType); 129 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE;
113 130
114 virtual void GetAllPublicIds(std::list<std::string>& target, 131 virtual void GetAllPublicIds(std::list<std::string>& target,
115 OrthancPluginResourceType resourceType); 132 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE;
116 133
117 virtual void GetAllPublicIds(std::list<std::string>& target, 134 virtual void GetAllPublicIds(std::list<std::string>& target,
118 OrthancPluginResourceType resourceType, 135 OrthancPluginResourceType resourceType,
119 uint64_t since, 136 uint64_t since,
120 uint64_t limit); 137 uint64_t limit) ORTHANC_OVERRIDE;
121 138
122 virtual void GetChanges(bool& done /*out*/, 139 virtual void GetChanges(OrthancPlugins::IDatabaseBackendOutput& output,
140 bool& done /*out*/,
123 int64_t since, 141 int64_t since,
124 uint32_t maxResults); 142 uint32_t maxResults) ORTHANC_OVERRIDE;
125 143
126 virtual void GetChildrenInternalId(std::list<int64_t>& target /*out*/, 144 virtual void GetChildrenInternalId(std::list<int64_t>& target /*out*/,
127 int64_t id); 145 int64_t id) ORTHANC_OVERRIDE;
128 146
129 virtual void GetChildrenPublicId(std::list<std::string>& target /*out*/, 147 virtual void GetChildrenPublicId(std::list<std::string>& target /*out*/,
130 int64_t id); 148 int64_t id) ORTHANC_OVERRIDE;
131 149
132 virtual void GetExportedResources(bool& done /*out*/, 150 virtual void GetExportedResources(OrthancPlugins::IDatabaseBackendOutput& output,
151 bool& done /*out*/,
133 int64_t since, 152 int64_t since,
134 uint32_t maxResults); 153 uint32_t maxResults) ORTHANC_OVERRIDE;
135 154
136 virtual void GetLastChange(); 155 virtual void GetLastChange(OrthancPlugins::IDatabaseBackendOutput& output) ORTHANC_OVERRIDE;
137 156
138 virtual void GetLastExportedResource(); 157 virtual void GetLastExportedResource(OrthancPlugins::IDatabaseBackendOutput& output) ORTHANC_OVERRIDE;
139 158
140 virtual void GetMainDicomTags(int64_t id); 159 virtual void GetMainDicomTags(OrthancPlugins::IDatabaseBackendOutput& output,
141 160 int64_t id) ORTHANC_OVERRIDE;
142 virtual std::string GetPublicId(int64_t resourceId); 161
143 162 virtual std::string GetPublicId(int64_t resourceId) ORTHANC_OVERRIDE;
144 virtual uint64_t GetResourceCount(OrthancPluginResourceType resourceType); 163
145 164 virtual uint64_t GetResourceCount(OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE;
146 virtual OrthancPluginResourceType GetResourceType(int64_t resourceId); 165
147 166 virtual OrthancPluginResourceType GetResourceType(int64_t resourceId) ORTHANC_OVERRIDE;
148 virtual uint64_t GetTotalCompressedSize(); 167
149 168 virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE;
150 virtual uint64_t GetTotalUncompressedSize(); 169
151 170 virtual uint64_t GetTotalUncompressedSize() ORTHANC_OVERRIDE;
152 virtual bool IsExistingResource(int64_t internalId); 171
153 172 virtual bool IsExistingResource(int64_t internalId) ORTHANC_OVERRIDE;
154 virtual bool IsProtectedPatient(int64_t internalId); 173
174 virtual bool IsProtectedPatient(int64_t internalId) ORTHANC_OVERRIDE;
155 175
156 virtual void ListAvailableMetadata(std::list<int32_t>& target /*out*/, 176 virtual void ListAvailableMetadata(std::list<int32_t>& target /*out*/,
157 int64_t id); 177 int64_t id) ORTHANC_OVERRIDE;
158 178
159 virtual void ListAvailableAttachments(std::list<int32_t>& target /*out*/, 179 virtual void ListAvailableAttachments(std::list<int32_t>& target /*out*/,
160 int64_t id); 180 int64_t id) ORTHANC_OVERRIDE;
161 181
162 virtual void LogChange(const OrthancPluginChange& change); 182 virtual void LogChange(const OrthancPluginChange& change) ORTHANC_OVERRIDE;
163 183
164 virtual void LogExportedResource(const OrthancPluginExportedResource& resource); 184 virtual void LogExportedResource(const OrthancPluginExportedResource& resource) ORTHANC_OVERRIDE;
165 185
166 virtual bool LookupAttachment(int64_t id, 186 virtual bool LookupAttachment(OrthancPlugins::IDatabaseBackendOutput& output,
167 int32_t contentType); 187 int64_t id,
188 int32_t contentType) ORTHANC_OVERRIDE;
168 189
169 virtual bool LookupGlobalProperty(std::string& target /*out*/, 190 virtual bool LookupGlobalProperty(std::string& target /*out*/,
170 int32_t property); 191 int32_t property) ORTHANC_OVERRIDE;
171 192
172 virtual void LookupIdentifier(std::list<int64_t>& target /*out*/, 193 virtual void LookupIdentifier(std::list<int64_t>& target /*out*/,
173 OrthancPluginResourceType resourceType, 194 OrthancPluginResourceType resourceType,
174 uint16_t group, 195 uint16_t group,
175 uint16_t element, 196 uint16_t element,
176 OrthancPluginIdentifierConstraint constraint, 197 OrthancPluginIdentifierConstraint constraint,
177 const char* value); 198 const char* value) ORTHANC_OVERRIDE;
178 199
179 virtual void LookupIdentifierRange(std::list<int64_t>& target /*out*/, 200 virtual void LookupIdentifierRange(std::list<int64_t>& target /*out*/,
180 OrthancPluginResourceType resourceType, 201 OrthancPluginResourceType resourceType,
181 uint16_t group, 202 uint16_t group,
182 uint16_t element, 203 uint16_t element,
183 const char* start, 204 const char* start,
184 const char* end); 205 const char* end) ORTHANC_OVERRIDE;
185 206
186 virtual bool LookupMetadata(std::string& target /*out*/, 207 virtual bool LookupMetadata(std::string& target /*out*/,
187 int64_t id, 208 int64_t id,
188 int32_t metadataType); 209 int32_t metadataType) ORTHANC_OVERRIDE;
189 210
190 virtual bool LookupParent(int64_t& parentId /*out*/, 211 virtual bool LookupParent(int64_t& parentId /*out*/,
191 int64_t resourceId); 212 int64_t resourceId) ORTHANC_OVERRIDE;
192 213
193 virtual bool LookupResource(int64_t& id /*out*/, 214 virtual bool LookupResource(int64_t& id /*out*/,
194 OrthancPluginResourceType& type /*out*/, 215 OrthancPluginResourceType& type /*out*/,
195 const char* publicId); 216 const char* publicId) ORTHANC_OVERRIDE;
196 217
197 virtual bool SelectPatientToRecycle(int64_t& internalId /*out*/); 218 virtual bool SelectPatientToRecycle(int64_t& internalId /*out*/) ORTHANC_OVERRIDE;
198 219
199 virtual bool SelectPatientToRecycle(int64_t& internalId /*out*/, 220 virtual bool SelectPatientToRecycle(int64_t& internalId /*out*/,
200 int64_t patientIdToAvoid); 221 int64_t patientIdToAvoid) ORTHANC_OVERRIDE;
201 222
202 virtual void SetGlobalProperty(int32_t property, 223 virtual void SetGlobalProperty(int32_t property,
203 const char* value); 224 const char* value) ORTHANC_OVERRIDE;
204 225
205 virtual void SetMainDicomTag(int64_t id, 226 virtual void SetMainDicomTag(int64_t id,
206 uint16_t group, 227 uint16_t group,
207 uint16_t element, 228 uint16_t element,
208 const char* value); 229 const char* value) ORTHANC_OVERRIDE;
209 230
210 virtual void SetIdentifierTag(int64_t id, 231 virtual void SetIdentifierTag(int64_t id,
211 uint16_t group, 232 uint16_t group,
212 uint16_t element, 233 uint16_t element,
213 const char* value); 234 const char* value) ORTHANC_OVERRIDE;
214 235
215 virtual void SetMetadata(int64_t id, 236 virtual void SetMetadata(int64_t id,
216 int32_t metadataType, 237 int32_t metadataType,
217 const char* value); 238 const char* value) ORTHANC_OVERRIDE;
218 239
219 virtual void SetProtectedPatient(int64_t internalId, 240 virtual void SetProtectedPatient(int64_t internalId,
220 bool isProtected); 241 bool isProtected) ORTHANC_OVERRIDE;
221 242
222 virtual void StartTransaction() 243 virtual void StartTransaction() ORTHANC_OVERRIDE
223 { 244 {
224 manager_.StartTransaction(); 245 manager_.StartTransaction();
225 } 246 }
226 247
227 248
228 virtual void RollbackTransaction() 249 virtual void RollbackTransaction() ORTHANC_OVERRIDE
229 { 250 {
230 manager_.RollbackTransaction(); 251 manager_.RollbackTransaction();
231 } 252 }
232 253
233 254
234 virtual void CommitTransaction() 255 virtual void CommitTransaction() ORTHANC_OVERRIDE
235 { 256 {
236 manager_.CommitTransaction(); 257 manager_.CommitTransaction();
237 } 258 }
238 259
239 260
240 virtual uint32_t GetDatabaseVersion(); 261 virtual uint32_t GetDatabaseVersion() ORTHANC_OVERRIDE;
241 262
242 virtual void UpgradeDatabase(uint32_t targetVersion, 263 virtual void UpgradeDatabase(uint32_t targetVersion,
243 OrthancPluginStorageArea* storageArea); 264 OrthancPluginStorageArea* storageArea) ORTHANC_OVERRIDE;
244 265
245 virtual void ClearMainDicomTags(int64_t internalId); 266 virtual void ClearMainDicomTags(int64_t internalId) ORTHANC_OVERRIDE;
246 267
247 // For unit testing only! 268 // For unit testing only!
248 virtual uint64_t GetResourcesCount(); 269 virtual uint64_t GetResourcesCount();
249 270
250 // For unit testing only! 271 // For unit testing only!
258 virtual void GetChildren(std::list<std::string>& childrenPublicIds, 279 virtual void GetChildren(std::list<std::string>& childrenPublicIds,
259 int64_t id); 280 int64_t id);
260 281
261 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 282 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
262 // New primitive since Orthanc 1.5.2 283 // New primitive since Orthanc 1.5.2
263 virtual void LookupResources(const std::vector<Orthanc::DatabaseConstraint>& lookup, 284 virtual void LookupResources(OrthancPlugins::IDatabaseBackendOutput& output,
285 const std::vector<Orthanc::DatabaseConstraint>& lookup,
264 OrthancPluginResourceType queryLevel, 286 OrthancPluginResourceType queryLevel,
265 uint32_t limit, 287 uint32_t limit,
266 bool requestSomeInstance); 288 bool requestSomeInstance) ORTHANC_OVERRIDE;
267 #endif 289 #endif
268 290
269 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 291 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
270 // New primitive since Orthanc 1.5.2 292 // New primitive since Orthanc 1.5.2
271 virtual void SetResourcesContent( 293 virtual void SetResourcesContent(
272 uint32_t countIdentifierTags, 294 uint32_t countIdentifierTags,
273 const OrthancPluginResourcesContentTags* identifierTags, 295 const OrthancPluginResourcesContentTags* identifierTags,
274 uint32_t countMainDicomTags, 296 uint32_t countMainDicomTags,
275 const OrthancPluginResourcesContentTags* mainDicomTags, 297 const OrthancPluginResourcesContentTags* mainDicomTags,
276 uint32_t countMetadata, 298 uint32_t countMetadata,
277 const OrthancPluginResourcesContentMetadata* metadata); 299 const OrthancPluginResourcesContentMetadata* metadata) ORTHANC_OVERRIDE;
278 #endif 300 #endif
279 301
280 // New primitive since Orthanc 1.5.2 302 // New primitive since Orthanc 1.5.2
281 virtual void GetChildrenMetadata(std::list<std::string>& target, 303 virtual void GetChildrenMetadata(std::list<std::string>& target,
282 int64_t resourceId, 304 int64_t resourceId,
283 int32_t metadata); 305 int32_t metadata) ORTHANC_OVERRIDE;
284 306
285 virtual void TagMostRecentPatient(int64_t patient); 307 virtual void TagMostRecentPatient(int64_t patient) ORTHANC_OVERRIDE;
286 308
287 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1 309 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1
288 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) 310 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4)
289 // New primitive since Orthanc 1.5.4 311 // New primitive since Orthanc 1.5.4
290 virtual bool LookupResourceAndParent(int64_t& id, 312 virtual bool LookupResourceAndParent(int64_t& id,
291 OrthancPluginResourceType& type, 313 OrthancPluginResourceType& type,
292 std::string& parentPublicId, 314 std::string& parentPublicId,
293 const char* publicId); 315 const char* publicId) ORTHANC_OVERRIDE;
294 # endif 316 # endif
295 #endif 317 #endif
296 318
297 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1 319 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1
298 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) 320 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4)
299 // New primitive since Orthanc 1.5.4 321 // New primitive since Orthanc 1.5.4
300 virtual void GetAllMetadata(std::map<int32_t, std::string>& result, 322 virtual void GetAllMetadata(std::map<int32_t, std::string>& result,
301 int64_t id); 323 int64_t id) ORTHANC_OVERRIDE;
302 # endif 324 # endif
303 #endif 325 #endif
304 }; 326 };
305 } 327 }