diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-05-31 20:16:23 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-05-31 20:16:23 +0200 |
commit | e297fb92c2c0e344d36e0aef57921f6b9b921a61 (patch) | |
tree | ab36c3a121f3f132235ed3eafb5eb5d767c77b3b /common/domainadaptor.h | |
parent | 0815156ef93cb9f48073a777b888ed47b579d695 (diff) | |
download | sink-e297fb92c2c0e344d36e0aef57921f6b9b921a61.tar.gz sink-e297fb92c2c0e344d36e0aef57921f6b9b921a61.zip |
Moved default read/write property mapper to TypeImplementation
There is always exactly one default buffer that we can centralize
in TypeImplementation.
Diffstat (limited to 'common/domainadaptor.h')
-rw-r--r-- | common/domainadaptor.h | 69 |
1 files changed, 6 insertions, 63 deletions
diff --git a/common/domainadaptor.h b/common/domainadaptor.h index fd015b5..70c3a42 100644 --- a/common/domainadaptor.h +++ b/common/domainadaptor.h | |||
@@ -29,65 +29,8 @@ | |||
29 | #include "entity_generated.h" | 29 | #include "entity_generated.h" |
30 | #include "metadata_generated.h" | 30 | #include "metadata_generated.h" |
31 | #include "entitybuffer.h" | 31 | #include "entitybuffer.h" |
32 | 32 | #include "propertymapper.h" | |
33 | /** | 33 | #include "domain/event.h" |
34 | * The property mapper is a non-typesafe virtual dispatch. | ||
35 | * | ||
36 | * Instead of using an interface and requring each implementation to override | ||
37 | * a virtual method per property, the property mapper can be filled with accessors | ||
38 | * that extract the properties from resource types. | ||
39 | */ | ||
40 | template<typename BufferType> | ||
41 | class ReadPropertyMapper | ||
42 | { | ||
43 | public: | ||
44 | virtual QVariant getProperty(const QByteArray &key, BufferType const *buffer) const | ||
45 | { | ||
46 | if (mReadAccessors.contains(key)) { | ||
47 | auto accessor = mReadAccessors.value(key); | ||
48 | return accessor(buffer); | ||
49 | } | ||
50 | return QVariant(); | ||
51 | } | ||
52 | bool hasMapping(const QByteArray &key) const { return mReadAccessors.contains(key); } | ||
53 | QList<QByteArray> availableProperties() const { return mReadAccessors.keys(); } | ||
54 | void addMapping(const QByteArray &property, const std::function<QVariant(BufferType const *)> &mapping) { | ||
55 | mReadAccessors.insert(property, mapping); | ||
56 | } | ||
57 | private: | ||
58 | QHash<QByteArray, std::function<QVariant(BufferType const *)> > mReadAccessors; | ||
59 | }; | ||
60 | |||
61 | template<typename BufferBuilder> | ||
62 | class WritePropertyMapper | ||
63 | { | ||
64 | public: | ||
65 | virtual void setProperty(const QByteArray &key, const QVariant &value, QList<std::function<void(BufferBuilder &)> > &builderCalls, flatbuffers::FlatBufferBuilder &fbb) const | ||
66 | { | ||
67 | if (mWriteAccessors.contains(key)) { | ||
68 | auto accessor = mWriteAccessors.value(key); | ||
69 | builderCalls << accessor(value, fbb); | ||
70 | } | ||
71 | } | ||
72 | bool hasMapping(const QByteArray &key) const { return mWriteAccessors.contains(key); } | ||
73 | void addMapping(const QByteArray &property, const std::function<std::function<void(BufferBuilder &)>(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) { | ||
74 | mWriteAccessors.insert(property, mapping); | ||
75 | } | ||
76 | private: | ||
77 | QHash<QByteArray, std::function<std::function<void(BufferBuilder &)>(const QVariant &, flatbuffers::FlatBufferBuilder &)> > mWriteAccessors; | ||
78 | }; | ||
79 | |||
80 | /** | ||
81 | * Defines how to convert qt primitives to flatbuffer ones | ||
82 | */ | ||
83 | template <class T> | ||
84 | flatbuffers::uoffset_t variantToProperty(const QVariant &, flatbuffers::FlatBufferBuilder &fbb); | ||
85 | |||
86 | /** | ||
87 | * Defines how to convert flatbuffer primitives to qt ones | ||
88 | */ | ||
89 | template <typename T> | ||
90 | QVariant propertyToVariant(const flatbuffers::String *); | ||
91 | 34 | ||
92 | /** | 35 | /** |
93 | * Create a buffer from a domain object using the provided mappings | 36 | * Create a buffer from a domain object using the provided mappings |
@@ -177,7 +120,7 @@ class DomainTypeAdaptorFactoryInterface | |||
177 | public: | 120 | public: |
178 | virtual ~DomainTypeAdaptorFactoryInterface() {}; | 121 | virtual ~DomainTypeAdaptorFactoryInterface() {}; |
179 | virtual QSharedPointer<Akonadi2::ApplicationDomain::BufferAdaptor> createAdaptor(const Akonadi2::Entity &entity) = 0; | 122 | virtual QSharedPointer<Akonadi2::ApplicationDomain::BufferAdaptor> createAdaptor(const Akonadi2::Entity &entity) = 0; |
180 | virtual void createBuffer(const DomainType &event, flatbuffers::FlatBufferBuilder &fbb) = 0; | 123 | virtual void createBuffer(const DomainType &domainType, flatbuffers::FlatBufferBuilder &fbb) = 0; |
181 | }; | 124 | }; |
182 | 125 | ||
183 | /** | 126 | /** |
@@ -190,9 +133,9 @@ class DomainTypeAdaptorFactory : public DomainTypeAdaptorFactoryInterface<Domain | |||
190 | { | 133 | { |
191 | public: | 134 | public: |
192 | DomainTypeAdaptorFactory() : | 135 | DomainTypeAdaptorFactory() : |
193 | mLocalMapper(initializeReadPropertyMapper<LocalBuffer>()), | 136 | mLocalMapper(Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::initializeReadPropertyMapper()), |
194 | mResourceMapper(QSharedPointer<ReadPropertyMapper<ResourceBuffer> >::create()), | 137 | mResourceMapper(QSharedPointer<ReadPropertyMapper<ResourceBuffer> >::create()), |
195 | mLocalWriteMapper(initializeWritePropertyMapper<LocalBuilder>()), | 138 | mLocalWriteMapper(Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::initializeWritePropertyMapper()), |
196 | mResourceWriteMapper(QSharedPointer<WritePropertyMapper<ResourceBuilder> >::create()) | 139 | mResourceWriteMapper(QSharedPointer<WritePropertyMapper<ResourceBuilder> >::create()) |
197 | {}; | 140 | {}; |
198 | virtual ~DomainTypeAdaptorFactory() {}; | 141 | virtual ~DomainTypeAdaptorFactory() {}; |
@@ -216,7 +159,7 @@ public: | |||
216 | return adaptor; | 159 | return adaptor; |
217 | } | 160 | } |
218 | 161 | ||
219 | virtual void createBuffer(const Akonadi2::ApplicationDomain::Event &event, flatbuffers::FlatBufferBuilder &fbb) Q_DECL_OVERRIDE {}; | 162 | virtual void createBuffer(const DomainType &domainType, flatbuffers::FlatBufferBuilder &fbb) Q_DECL_OVERRIDE {}; |
220 | 163 | ||
221 | protected: | 164 | protected: |
222 | QSharedPointer<ReadPropertyMapper<LocalBuffer> > mLocalMapper; | 165 | QSharedPointer<ReadPropertyMapper<LocalBuffer> > mLocalMapper; |