Mercurial > hg > orthanc-databases
comparison Framework/Plugins/StorageBackend.h @ 230:675f8322eb7c
refactored StorageBackend by introducing an accessor class
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 06 Apr 2021 11:17:00 +0200 |
parents | a4918d57435c |
children | 0a9b48d19643 |
comparison
equal
deleted
inserted
replaced
229:5744f09b0b1b | 230:675f8322eb7c |
---|---|
31 class StorageBackend : public boost::noncopyable | 31 class StorageBackend : public boost::noncopyable |
32 { | 32 { |
33 private: | 33 private: |
34 std::unique_ptr<DatabaseManager> manager_; | 34 std::unique_ptr<DatabaseManager> manager_; |
35 | 35 |
36 DatabaseManager& GetManager(); | |
37 | |
38 protected: | |
39 void SetDatabase(IDatabase* database); // Takes ownership | |
40 | |
36 public: | 41 public: |
37 class IFileContentVisitor : public boost::noncopyable | 42 class IFileContentVisitor : public boost::noncopyable |
38 { | 43 { |
39 public: | 44 public: |
40 virtual ~IFileContentVisitor() | 45 virtual ~IFileContentVisitor() |
41 { | 46 { |
42 } | 47 } |
43 | 48 |
44 virtual void Assign(const std::string& content) = 0; | 49 virtual void Assign(const std::string& content) = 0; |
50 | |
51 virtual bool IsSuccess() const = 0; | |
52 }; | |
53 | |
54 class Accessor : public boost::noncopyable | |
55 { | |
56 private: | |
57 DatabaseManager& manager_; | |
58 | |
59 public: | |
60 Accessor(StorageBackend& backend) : | |
61 manager_(backend.GetManager()) | |
62 { | |
63 } | |
64 | |
65 void Create(const std::string& uuid, | |
66 const void* content, | |
67 size_t size, | |
68 OrthancPluginContentType type); | |
69 | |
70 void Read(IFileContentVisitor& visitor, | |
71 const std::string& uuid, | |
72 OrthancPluginContentType type); | |
73 | |
74 void Remove(const std::string& uuid, | |
75 OrthancPluginContentType type); | |
76 | |
77 // For unit tests | |
78 void ReadToString(std::string& target, | |
79 const std::string& uuid, | |
80 OrthancPluginContentType type); | |
45 }; | 81 }; |
46 | 82 |
47 virtual ~StorageBackend() | 83 virtual ~StorageBackend() |
48 { | 84 { |
49 } | 85 } |
50 | 86 |
51 void SetDatabase(IDatabase* database); // Takes ownership | |
52 | |
53 DatabaseManager& GetManager(); | |
54 | |
55 // NB: These methods will always be invoked in mutual exclusion, | |
56 // as having access to some "DatabaseManager::Transaction" implies | |
57 // that the parent "DatabaseManager" is locked | |
58 virtual void Create(DatabaseManager::Transaction& transaction, | |
59 const std::string& uuid, | |
60 const void* content, | |
61 size_t size, | |
62 OrthancPluginContentType type) ORTHANC_FINAL; | |
63 | |
64 virtual void Read(IFileContentVisitor& target, | |
65 DatabaseManager::Transaction& transaction, | |
66 const std::string& uuid, | |
67 OrthancPluginContentType type) ORTHANC_FINAL; | |
68 | |
69 virtual void Remove(DatabaseManager::Transaction& transaction, | |
70 const std::string& uuid, | |
71 OrthancPluginContentType type) ORTHANC_FINAL; | |
72 | |
73 static void Register(OrthancPluginContext* context, | 87 static void Register(OrthancPluginContext* context, |
74 StorageBackend* backend); // Takes ownership | 88 StorageBackend* backend); // Takes ownership |
75 | 89 |
76 static void Finalize(); | 90 static void Finalize(); |
77 | |
78 // For unit tests | |
79 void ReadToString(std::string& target, | |
80 DatabaseManager::Transaction& transaction, | |
81 const std::string& uuid, | |
82 OrthancPluginContentType type); | |
83 }; | 91 }; |
84 } | 92 } |