Mercurial > hg > orthanc
comparison Plugins/Engine/OrthancPlugins.cpp @ 1177:5b2d8c280ac2 db-changes
Plugins can monitor changes through callbacks
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 24 Sep 2014 17:37:44 +0200 |
parents | 1ea4094d077c |
children | c71d25e6a63c |
comparison
equal
deleted
inserted
replaced
1176:f24e04838054 | 1177:5b2d8c280ac2 |
---|---|
82 struct OrthancPlugins::PImpl | 82 struct OrthancPlugins::PImpl |
83 { | 83 { |
84 typedef std::pair<boost::regex*, OrthancPluginRestCallback> RestCallback; | 84 typedef std::pair<boost::regex*, OrthancPluginRestCallback> RestCallback; |
85 typedef std::list<RestCallback> RestCallbacks; | 85 typedef std::list<RestCallback> RestCallbacks; |
86 typedef std::list<OrthancPluginOnStoredInstanceCallback> OnStoredCallbacks; | 86 typedef std::list<OrthancPluginOnStoredInstanceCallback> OnStoredCallbacks; |
87 typedef std::list<OrthancPluginOnChangeCallback> OnChangeCallbacks; | |
87 | 88 |
88 ServerContext& context_; | 89 ServerContext& context_; |
89 RestCallbacks restCallbacks_; | 90 RestCallbacks restCallbacks_; |
90 OrthancRestApi* restApi_; | 91 OrthancRestApi* restApi_; |
91 OnStoredCallbacks onStoredCallbacks_; | 92 OnStoredCallbacks onStoredCallbacks_; |
93 OnChangeCallbacks onChangeCallbacks_; | |
92 bool hasStorageArea_; | 94 bool hasStorageArea_; |
93 _OrthancPluginRegisterStorageArea storageArea_; | 95 _OrthancPluginRegisterStorageArea storageArea_; |
94 | 96 |
95 PImpl(ServerContext& context) : | 97 PImpl(ServerContext& context) : |
96 context_(context), | 98 context_(context), |
118 { | 120 { |
119 memcpy(result, &str[0], str.size() + 1); | 121 memcpy(result, &str[0], str.size() + 1); |
120 } | 122 } |
121 | 123 |
122 return result; | 124 return result; |
125 } | |
126 | |
127 | |
128 static OrthancPluginResourceType Convert(ResourceType type) | |
129 { | |
130 switch (type) | |
131 { | |
132 case ResourceType_Patient: | |
133 return OrthancPluginResourceType_Patient; | |
134 | |
135 case ResourceType_Study: | |
136 return OrthancPluginResourceType_Study; | |
137 | |
138 case ResourceType_Series: | |
139 return OrthancPluginResourceType_Series; | |
140 | |
141 case ResourceType_Instance: | |
142 return OrthancPluginResourceType_Instance; | |
143 | |
144 default: | |
145 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
146 } | |
147 } | |
148 | |
149 | |
150 static OrthancPluginChangeType Convert(ChangeType type) | |
151 { | |
152 switch (type) | |
153 { | |
154 case ChangeType_AnonymizedPatient: | |
155 return OrthancPluginChangeType_AnonymizedPatient; | |
156 | |
157 case ChangeType_AnonymizedSeries: | |
158 return OrthancPluginChangeType_AnonymizedSeries; | |
159 | |
160 case ChangeType_AnonymizedStudy: | |
161 return OrthancPluginChangeType_AnonymizedStudy; | |
162 | |
163 case ChangeType_CompletedSeries: | |
164 return OrthancPluginChangeType_CompletedSeries; | |
165 | |
166 case ChangeType_Deleted: | |
167 return OrthancPluginChangeType_Deleted; | |
168 | |
169 case ChangeType_ModifiedPatient: | |
170 return OrthancPluginChangeType_ModifiedPatient; | |
171 | |
172 case ChangeType_ModifiedSeries: | |
173 return OrthancPluginChangeType_ModifiedSeries; | |
174 | |
175 case ChangeType_ModifiedStudy: | |
176 return OrthancPluginChangeType_ModifiedStudy; | |
177 | |
178 case ChangeType_NewInstance: | |
179 return OrthancPluginChangeType_NewInstance; | |
180 | |
181 case ChangeType_NewPatient: | |
182 return OrthancPluginChangeType_NewPatient; | |
183 | |
184 case ChangeType_NewSeries: | |
185 return OrthancPluginChangeType_NewSeries; | |
186 | |
187 case ChangeType_NewStudy: | |
188 return OrthancPluginChangeType_NewStudy; | |
189 | |
190 case ChangeType_StablePatient: | |
191 return OrthancPluginChangeType_StablePatient; | |
192 | |
193 case ChangeType_StableSeries: | |
194 return OrthancPluginChangeType_StableSeries; | |
195 | |
196 case ChangeType_StableStudy: | |
197 return OrthancPluginChangeType_StableStudy; | |
198 | |
199 default: | |
200 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
201 } | |
123 } | 202 } |
124 | 203 |
125 | 204 |
126 OrthancPlugins::OrthancPlugins(ServerContext& context) | 205 OrthancPlugins::OrthancPlugins(ServerContext& context) |
127 { | 206 { |
277 } | 356 } |
278 } | 357 } |
279 | 358 |
280 | 359 |
281 void OrthancPlugins::SignalStoredInstance(DicomInstanceToStore& instance, | 360 void OrthancPlugins::SignalStoredInstance(DicomInstanceToStore& instance, |
282 const std::string& instanceId) | 361 const std::string& instanceId) |
283 { | 362 { |
284 for (PImpl::OnStoredCallbacks::const_iterator | 363 for (PImpl::OnStoredCallbacks::const_iterator |
285 callback = pimpl_->onStoredCallbacks_.begin(); | 364 callback = pimpl_->onStoredCallbacks_.begin(); |
286 callback != pimpl_->onStoredCallbacks_.end(); ++callback) | 365 callback != pimpl_->onStoredCallbacks_.end(); ++callback) |
287 { | 366 { |
290 } | 369 } |
291 } | 370 } |
292 | 371 |
293 | 372 |
294 | 373 |
374 void OrthancPlugins::SignalChange(ChangeType changeType, | |
375 ResourceType resourceType, | |
376 const std::string& publicId) | |
377 { | |
378 for (PImpl::OnChangeCallbacks::const_iterator | |
379 callback = pimpl_->onChangeCallbacks_.begin(); | |
380 callback != pimpl_->onChangeCallbacks_.end(); ++callback) | |
381 { | |
382 try | |
383 { | |
384 (*callback) (Convert(changeType), Convert(resourceType), publicId.c_str()); | |
385 } | |
386 catch (OrthancException&) | |
387 { | |
388 // This change type or resource type is not supported by the plugin SDK | |
389 } | |
390 } | |
391 } | |
392 | |
393 | |
394 | |
295 static void CopyToMemoryBuffer(OrthancPluginMemoryBuffer& target, | 395 static void CopyToMemoryBuffer(OrthancPluginMemoryBuffer& target, |
296 const void* data, | 396 const void* data, |
297 size_t size) | 397 size_t size) |
298 { | 398 { |
299 target.size = size; | 399 target.size = size; |
348 const _OrthancPluginOnStoredInstanceCallback& p = | 448 const _OrthancPluginOnStoredInstanceCallback& p = |
349 *reinterpret_cast<const _OrthancPluginOnStoredInstanceCallback*>(parameters); | 449 *reinterpret_cast<const _OrthancPluginOnStoredInstanceCallback*>(parameters); |
350 | 450 |
351 LOG(INFO) << "Plugin has registered an OnStoredInstance callback"; | 451 LOG(INFO) << "Plugin has registered an OnStoredInstance callback"; |
352 pimpl_->onStoredCallbacks_.push_back(p.callback); | 452 pimpl_->onStoredCallbacks_.push_back(p.callback); |
453 } | |
454 | |
455 | |
456 void OrthancPlugins::RegisterOnChangeCallback(const void* parameters) | |
457 { | |
458 const _OrthancPluginOnChangeCallback& p = | |
459 *reinterpret_cast<const _OrthancPluginOnChangeCallback*>(parameters); | |
460 | |
461 LOG(INFO) << "Plugin has registered an OnChange callback"; | |
462 pimpl_->onChangeCallbacks_.push_back(p.callback); | |
353 } | 463 } |
354 | 464 |
355 | 465 |
356 | 466 |
357 void OrthancPlugins::AnswerBuffer(const void* parameters) | 467 void OrthancPlugins::AnswerBuffer(const void* parameters) |
773 RegisterRestCallback(parameters); | 883 RegisterRestCallback(parameters); |
774 return true; | 884 return true; |
775 | 885 |
776 case _OrthancPluginService_RegisterOnStoredInstanceCallback: | 886 case _OrthancPluginService_RegisterOnStoredInstanceCallback: |
777 RegisterOnStoredInstanceCallback(parameters); | 887 RegisterOnStoredInstanceCallback(parameters); |
888 return true; | |
889 | |
890 case _OrthancPluginService_RegisterOnChangeCallback: | |
891 RegisterOnChangeCallback(parameters); | |
778 return true; | 892 return true; |
779 | 893 |
780 case _OrthancPluginService_AnswerBuffer: | 894 case _OrthancPluginService_AnswerBuffer: |
781 AnswerBuffer(parameters); | 895 AnswerBuffer(parameters); |
782 return true; | 896 return true; |