comparison Framework/Plugins/DatabaseBackendAdapterV3.cpp @ 222:c8e06b41feec

refactoring registration/finalization of index backend
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 01 Apr 2021 11:16:13 +0200
parents 73cc85f3d9c1
children af049cd66661
comparison
equal deleted inserted replaced
221:73cc85f3d9c1 222:c8e06b41feec
1753 } 1753 }
1754 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetContext()); 1754 ORTHANC_PLUGINS_DATABASE_CATCH(t->GetContext());
1755 } 1755 }
1756 1756
1757 1757
1758 void DatabaseBackendAdapterV3::Register(IndexBackend& database) 1758 static std::unique_ptr<IndexBackend> backend_;
1759 { 1759
1760 void DatabaseBackendAdapterV3::Register(IndexBackend* backend)
1761 {
1762 if (backend == NULL)
1763 {
1764 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
1765 }
1766
1767 if (backend_.get() != NULL)
1768 {
1769 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
1770 }
1771
1772 backend_.reset(backend);
1773
1760 OrthancPluginDatabaseBackendV3 params; 1774 OrthancPluginDatabaseBackendV3 params;
1761 memset(&params, 0, sizeof(params)); 1775 memset(&params, 0, sizeof(params));
1762 1776
1763 params.readAnswersCount = ReadAnswersCount; 1777 params.readAnswersCount = ReadAnswersCount;
1764 params.readAnswerAttachment = ReadAnswerAttachment; 1778 params.readAnswerAttachment = ReadAnswerAttachment;
1827 params.setGlobalProperty = SetGlobalProperty; 1841 params.setGlobalProperty = SetGlobalProperty;
1828 params.setMetadata = SetMetadata; 1842 params.setMetadata = SetMetadata;
1829 params.setProtectedPatient = SetProtectedPatient; 1843 params.setProtectedPatient = SetProtectedPatient;
1830 params.setResourcesContent = SetResourcesContent; 1844 params.setResourcesContent = SetResourcesContent;
1831 1845
1832 OrthancPluginContext* context = database.GetContext(); 1846 OrthancPluginContext* context = backend_->GetContext();
1833 1847
1834 if (OrthancPluginRegisterDatabaseBackendV3(context, &params, sizeof(params), &database) != OrthancPluginErrorCode_Success) 1848 if (OrthancPluginRegisterDatabaseBackendV3(context, &params, sizeof(params), backend_.get()) != OrthancPluginErrorCode_Success)
1835 { 1849 {
1836 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Unable to register the database backend"); 1850 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Unable to register the database backend");
1837 } 1851 }
1838 1852
1839 database.SetOutputFactory(new Factory); 1853 backend_->SetOutputFactory(new Factory);
1854 }
1855
1856
1857 void DatabaseBackendAdapterV3::Finalize()
1858 {
1859 backend_.reset(NULL);
1840 } 1860 }
1841 } 1861 }
1842 1862
1843 # endif 1863 # endif
1844 #endif 1864 #endif