Mercurial > hg > orthanc-databases
diff Framework/Plugins/DatabaseBackendAdapterV3.cpp @ 232:4e15eace9b90
reorganization in DatabaseBackendAdapterV3
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 06 Apr 2021 12:50:06 +0200 |
parents | a4918d57435c |
children | 7d46c99523a2 |
line wrap: on
line diff
--- a/Framework/Plugins/DatabaseBackendAdapterV3.cpp Tue Apr 06 11:59:31 2021 +0200 +++ b/Framework/Plugins/DatabaseBackendAdapterV3.cpp Tue Apr 06 12:50:06 2021 +0200 @@ -61,10 +61,23 @@ class DatabaseBackendAdapterV3::Adapter : public boost::noncopyable { private: - std::unique_ptr<IndexBackend> backend_; + std::unique_ptr<IndexBackend> backend_; + OrthancPluginContext* context_; boost::mutex managerMutex_; std::unique_ptr<DatabaseManager> manager_; + DatabaseManager& GetManager() const + { + if (manager_.get() == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + else + { + return *manager_; + } + } + public: Adapter(IndexBackend* backend) : backend_(backend) @@ -73,11 +86,28 @@ { throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); } + else + { + context_ = backend_->GetContext(); + } + } + + OrthancPluginContext* GetContext() const + { + return context_; } - IndexBackend& GetBackend() const + uint32_t GetDatabaseVersion() { - return *backend_; + boost::mutex::scoped_lock lock(managerMutex_); + return backend_->GetDatabaseVersion(GetManager()); + } + + void UpgradeDatabase(OrthancPluginStorageArea* storageArea, + uint32_t targetVersion) + { + boost::mutex::scoped_lock lock(managerMutex_); + backend_->UpgradeDatabase(GetManager(), targetVersion, storageArea); } void OpenConnection() @@ -113,23 +143,25 @@ { private: boost::mutex::scoped_lock lock_; - DatabaseManager* manager_; + IndexBackend& backend_; + DatabaseManager& manager_; public: DatabaseAccessor(Adapter& adapter) : lock_(adapter.managerMutex_), - manager_(adapter.manager_.get()) + backend_(*adapter.backend_), + manager_(adapter.GetManager()) { - if (manager_ == NULL) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); - } + } + + IndexBackend& GetBackend() const + { + return backend_; } DatabaseManager& GetManager() const { - assert(manager_ != NULL); - return *manager_; + return manager_; } }; }; @@ -698,7 +730,7 @@ Adapter& adapter_; std::unique_ptr<Adapter::DatabaseAccessor> accessor_; std::unique_ptr<Output> output_; - + public: Transaction(Adapter& adapter) : adapter_(adapter), @@ -713,7 +745,7 @@ IndexBackend& GetBackend() const { - return adapter_.GetBackend(); + return accessor_->GetBackend(); } Output& GetOutput() const @@ -861,7 +893,7 @@ adapter->OpenConnection(); return OrthancPluginErrorCode_Success; } - ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetBackend().GetContext()); + ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); } @@ -874,7 +906,7 @@ adapter->CloseConnection(); return OrthancPluginErrorCode_Success; } - ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetBackend().GetContext()); + ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); } @@ -894,7 +926,7 @@ } else { - OrthancPluginLogError(adapter->GetBackend().GetContext(), "More than one index backend was registered, internal error"); + OrthancPluginLogError(adapter->GetContext(), "More than one index backend was registered, internal error"); } delete adapter; @@ -911,11 +943,10 @@ try { - DatabaseBackendAdapterV3::Adapter::DatabaseAccessor accessor(*adapter); - *version = adapter->GetBackend().GetDatabaseVersion(accessor.GetManager()); + *version = adapter->GetDatabaseVersion(); return OrthancPluginErrorCode_Success; } - ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetBackend().GetContext()); + ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); } @@ -927,11 +958,10 @@ try { - DatabaseBackendAdapterV3::Adapter::DatabaseAccessor accessor(*adapter); - adapter->GetBackend().UpgradeDatabase(accessor.GetManager(), targetVersion, storageArea); + adapter->UpgradeDatabase(storageArea, targetVersion); return OrthancPluginErrorCode_Success; } - ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetBackend().GetContext()); + ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); } @@ -963,7 +993,7 @@ return OrthancPluginErrorCode_Success; } - ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetBackend().GetContext()); + ORTHANC_PLUGINS_DATABASE_CATCH(adapter->GetContext()); }