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 }