summaryrefslogtreecommitdiffstats
path: root/dummyresource/domainadaptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dummyresource/domainadaptor.cpp')
-rw-r--r--dummyresource/domainadaptor.cpp135
1 files changed, 24 insertions, 111 deletions
diff --git a/dummyresource/domainadaptor.cpp b/dummyresource/domainadaptor.cpp
index 2182f9a..fa00bbc 100644
--- a/dummyresource/domainadaptor.cpp
+++ b/dummyresource/domainadaptor.cpp
@@ -9,142 +9,55 @@
9#include "entity_generated.h" 9#include "entity_generated.h"
10#include "metadata_generated.h" 10#include "metadata_generated.h"
11#include "domainadaptor.h" 11#include "domainadaptor.h"
12#include "log.h"
12#include <common/entitybuffer.h> 13#include <common/entitybuffer.h>
13 14
14using namespace DummyCalendar; 15using namespace DummyCalendar;
15using namespace flatbuffers; 16using namespace flatbuffers;
16 17
17using namespace DummyCalendar;
18using namespace flatbuffers;
19
20//This will become a generic implementation that simply takes the resource buffer and local buffer pointer
21class DummyEventAdaptor : public Akonadi2::Domain::BufferAdaptor
22{
23public:
24 DummyEventAdaptor()
25 : BufferAdaptor()
26 {
27
28 }
29
30 void setProperty(const QString &key, const QVariant &value)
31 {
32 if (mResourceMapper && mResourceMapper->mWriteAccessors.contains(key)) {
33 // mResourceMapper->setProperty(key, value, mResourceBuffer);
34 } else {
35 // mLocalMapper.;
36 }
37 }
38 18
39 virtual QVariant getProperty(const QString &key) const
40 {
41 if (mResourceBuffer && mResourceMapper->mReadAccessors.contains(key)) {
42 return mResourceMapper->getProperty(key, mResourceBuffer);
43 } else if (mLocalBuffer && mLocalMapper->mReadAccessors.contains(key)) {
44 return mLocalMapper->getProperty(key, mLocalBuffer);
45 }
46 qWarning() << "no mapping available for key " << key;
47 return QVariant();
48 }
49
50 virtual QStringList availableProperties() const
51 {
52 QStringList props;
53 props << mResourceMapper->mReadAccessors.keys();
54 props << mLocalMapper->mReadAccessors.keys();
55 return props;
56 }
57
58 Akonadi2::Domain::Buffer::Event const *mLocalBuffer;
59 DummyEvent const *mResourceBuffer;
60
61 QSharedPointer<PropertyMapper<Akonadi2::Domain::Buffer::Event> > mLocalMapper;
62 QSharedPointer<PropertyMapper<DummyEvent> > mResourceMapper;
63};
64 19
65 20
66DummyEventAdaptorFactory::DummyEventAdaptorFactory() 21DummyEventAdaptorFactory::DummyEventAdaptorFactory()
67 : DomainTypeAdaptorFactory() 22 : DomainTypeAdaptorFactory()
68{ 23{
69 mResourceMapper = QSharedPointer<PropertyMapper<DummyEvent> >::create(); 24 //TODO turn this into initializeReadPropertyMapper as well?
70 mResourceMapper->mReadAccessors.insert("summary", [](DummyEvent const *buffer) -> QVariant { 25 mResourceMapper->addMapping("summary", [](DummyEvent const *buffer) -> QVariant {
71 if (buffer->summary()) {
72 return QString::fromStdString(buffer->summary()->c_str());
73 }
74 return QVariant();
75 });
76 mLocalMapper = QSharedPointer<PropertyMapper<Akonadi2::Domain::Buffer::Event> >::create();
77 mLocalMapper->mReadAccessors.insert("summary", [](Akonadi2::Domain::Buffer::Event const *buffer) -> QVariant {
78 if (buffer->summary()) { 26 if (buffer->summary()) {
79 return QString::fromStdString(buffer->summary()->c_str()); 27 return QString::fromStdString(buffer->summary()->c_str());
80 } 28 }
81 return QVariant(); 29 return QVariant();
82 }); 30 });
83 mLocalMapper->mReadAccessors.insert("uid", [](Akonadi2::Domain::Buffer::Event const *buffer) -> QVariant {
84 if (buffer->uid()) {
85 return QString::fromStdString(buffer->uid()->c_str());
86 }
87 return QVariant();
88 });
89 31
32 mResourceWriteMapper->addMapping("summary", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function<void(DummyEventBuilder &)> {
33 auto offset = extractProperty<QString>(value, fbb);
34 return [offset](DummyEventBuilder &builder) { builder.add_summary(offset); };
35 });
90} 36}
91 37
92//TODO pass EntityBuffer instead? 38
93QSharedPointer<Akonadi2::Domain::BufferAdaptor> DummyEventAdaptorFactory::createAdaptor(const Akonadi2::Entity &entity) 39void DummyEventAdaptorFactory::createBuffer(const Akonadi2::ApplicationDomain::Event &event, flatbuffers::FlatBufferBuilder &fbb)
94{ 40{
95 DummyEvent const *resourceBuffer = 0; 41 flatbuffers::FlatBufferBuilder localFbb;
96 if (auto resourceData = entity.resource()) { 42 if (mLocalWriteMapper) {
97 flatbuffers::Verifier verifyer(resourceData->Data(), resourceData->size()); 43 auto pos = createBufferPart<Akonadi2::ApplicationDomain::Buffer::EventBuilder, Akonadi2::ApplicationDomain::Buffer::Event>(event, localFbb, *mLocalWriteMapper);
98 if (VerifyDummyEventBuffer(verifyer)) { 44 Akonadi2::ApplicationDomain::Buffer::FinishEventBuffer(localFbb, pos);
99 resourceBuffer = GetDummyEvent(resourceData->Data()); 45 flatbuffers::Verifier verifier(localFbb.GetBufferPointer(), localFbb.GetSize());
46 if (!verifier.VerifyBuffer<Akonadi2::ApplicationDomain::Buffer::Event>()) {
47 Warning() << "Created invalid local buffer";
100 } 48 }
101 } 49 }
102 50
103 // Akonadi2::Metadata const *metadataBuffer = 0; 51 flatbuffers::FlatBufferBuilder resFbb;
104 // if (auto metadataData = entity.metadata()) { 52 if (mResourceWriteMapper) {
105 // flatbuffers::Verifier verifyer(metadataData->Data(), metadataData->size()); 53 auto pos = createBufferPart<DummyEventBuilder, DummyEvent>(event, resFbb, *mResourceWriteMapper);
106 // if (Akonadi2::VerifyMetadataBuffer(verifyer)) { 54 DummyCalendar::FinishDummyEventBuffer(resFbb, pos);
107 // metadataBuffer = Akonadi2::GetMetadata(metadataData->Data()); 55 flatbuffers::Verifier verifier(resFbb.GetBufferPointer(), resFbb.GetSize());
108 // } 56 if (!verifier.VerifyBuffer<DummyEvent>()) {
109 // } 57 Warning() << "Created invalid resource buffer";
110
111 Akonadi2::Domain::Buffer::Event const *localBuffer = 0;
112 if (auto localData = entity.local()) {
113 flatbuffers::Verifier verifyer(localData->Data(), localData->size());
114 if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) {
115 localBuffer = Akonadi2::Domain::Buffer::GetEvent(localData->Data());
116 } 58 }
117 } 59 }
118 60
119 auto adaptor = QSharedPointer<DummyEventAdaptor>::create(); 61 Akonadi2::EntityBuffer::assembleEntityBuffer(fbb, 0, 0, resFbb.GetBufferPointer(), resFbb.GetSize(), localFbb.GetBufferPointer(), localFbb.GetSize());
120 adaptor->mLocalBuffer = localBuffer;
121 adaptor->mLocalMapper = mLocalMapper;
122 adaptor->mResourceBuffer = resourceBuffer;
123 adaptor->mResourceMapper = mResourceMapper;
124 return adaptor;
125}
126
127void DummyEventAdaptorFactory::createBuffer(const Akonadi2::Domain::Event &event, flatbuffers::FlatBufferBuilder &fbb)
128{
129 flatbuffers::FlatBufferBuilder eventFbb;
130 eventFbb.Clear();
131 {
132 auto summary = eventFbb.CreateString(event.getProperty("summary").toString().toStdString());
133 DummyCalendar::DummyEventBuilder eventBuilder(eventFbb);
134 eventBuilder.add_summary(summary);
135 auto eventLocation = eventBuilder.Finish();
136 DummyCalendar::FinishDummyEventBuffer(eventFbb, eventLocation);
137 }
138
139 flatbuffers::FlatBufferBuilder localFbb;
140 {
141 auto uid = localFbb.CreateString(event.getProperty("uid").toString().toStdString());
142 auto localBuilder = Akonadi2::Domain::Buffer::EventBuilder(localFbb);
143 localBuilder.add_uid(uid);
144 auto location = localBuilder.Finish();
145 Akonadi2::Domain::Buffer::FinishEventBuffer(localFbb, location);
146 }
147
148 Akonadi2::EntityBuffer::assembleEntityBuffer(fbb, 0, 0, eventFbb.GetBufferPointer(), eventFbb.GetSize(), localFbb.GetBufferPointer(), localFbb.GetSize());
149} 62}
150 63