summaryrefslogtreecommitdiffstats
path: root/examples/dummyresource/resourcefactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dummyresource/resourcefactory.cpp')
-rw-r--r--examples/dummyresource/resourcefactory.cpp101
1 files changed, 7 insertions, 94 deletions
diff --git a/examples/dummyresource/resourcefactory.cpp b/examples/dummyresource/resourcefactory.cpp
index 67e36d1..51000a7 100644
--- a/examples/dummyresource/resourcefactory.cpp
+++ b/examples/dummyresource/resourcefactory.cpp
@@ -24,7 +24,6 @@
24#include "pipeline.h" 24#include "pipeline.h"
25#include "dummycalendar_generated.h" 25#include "dummycalendar_generated.h"
26#include "mail_generated.h" 26#include "mail_generated.h"
27#include "queuedcommand_generated.h"
28#include "createentity_generated.h" 27#include "createentity_generated.h"
29#include "domainadaptor.h" 28#include "domainadaptor.h"
30#include "commands.h" 29#include "commands.h"
@@ -35,6 +34,7 @@
35#include "dummystore.h" 34#include "dummystore.h"
36#include "definitions.h" 35#include "definitions.h"
37#include "facadefactory.h" 36#include "facadefactory.h"
37#include "indexupdater.h"
38#include <QDate> 38#include <QDate>
39#include <QUuid> 39#include <QUuid>
40 40
@@ -43,102 +43,15 @@
43#define ENTITY_TYPE_MAIL "mail" 43#define ENTITY_TYPE_MAIL "mail"
44#define ENTITY_TYPE_FOLDER "folder" 44#define ENTITY_TYPE_FOLDER "folder"
45 45
46/**
47 * Index types:
48 * * uid - property
49 *
50 * * Property can be:
51 * * fixed value like uid
52 * * fixed value where we want to do smaller/greater-than comparisons. (like start date)
53 * * range indexes like what date range an event affects.
54 * * group indexes like tree hierarchies as nested sets
55 */
56class IndexUpdater : public Akonadi2::Preprocessor {
57public:
58 IndexUpdater(const QByteArray &index, const QByteArray &type, const QByteArray &property)
59 :mIndexIdentifier(index),
60 mBufferType(type),
61 mProperty(property)
62 {
63
64 }
65
66 void newEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
67 {
68 add(newEntity.getProperty(mProperty), uid, transaction);
69 }
70
71 void modifiedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
72 {
73 remove(oldEntity.getProperty(mProperty), uid, transaction);
74 add(newEntity.getProperty(mProperty), uid, transaction);
75 }
76
77 void deletedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
78 {
79 remove(oldEntity.getProperty(mProperty), uid, transaction);
80 }
81
82private:
83 void add(const QVariant &value, const QByteArray &uid, Akonadi2::Storage::Transaction &transaction)
84 {
85 if (value.isValid()) {
86 Index(mIndexIdentifier, transaction).add(value.toByteArray(), uid);
87 }
88 }
89
90 void remove(const QVariant &value, const QByteArray &uid, Akonadi2::Storage::Transaction &transaction)
91 {
92 //TODO hide notfound error
93 Index(mIndexIdentifier, transaction).remove(value.toByteArray(), uid);
94 }
95
96 QByteArray mIndexIdentifier;
97 QByteArray mBufferType;
98 QByteArray mProperty;
99};
100
101template<typename DomainType>
102class DefaultIndexUpdater : public Akonadi2::Preprocessor {
103public:
104 void newEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
105 {
106 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::index(uid, newEntity, transaction);
107 }
108
109 void modifiedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
110 {
111 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::removeIndex(uid, oldEntity, transaction);
112 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::index(uid, newEntity, transaction);
113 }
114
115 void deletedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
116 {
117 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::removeIndex(uid, oldEntity, transaction);
118 }
119};
120
121DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) 46DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline)
122 : Akonadi2::GenericResource(instanceIdentifier, pipeline) 47 : Akonadi2::GenericResource(instanceIdentifier, pipeline)
123{ 48{
124 { 49 addType(ENTITY_TYPE_MAIL, QSharedPointer<DummyMailAdaptorFactory>::create(),
125 QVector<Akonadi2::Preprocessor*> eventPreprocessors; 50 QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Mail>);
126 eventPreprocessors << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Event>; 51 addType(ENTITY_TYPE_FOLDER, QSharedPointer<DummyFolderAdaptorFactory>::create(),
127 mPipeline->setPreprocessors(ENTITY_TYPE_EVENT, eventPreprocessors); 52 QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Folder>);
128 mPipeline->setAdaptorFactory(ENTITY_TYPE_EVENT, QSharedPointer<DummyEventAdaptorFactory>::create()); 53 addType(ENTITY_TYPE_EVENT, QSharedPointer<DummyEventAdaptorFactory>::create(),
129 } 54 QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Event>);
130 {
131 QVector<Akonadi2::Preprocessor*> mailPreprocessors;
132 mailPreprocessors << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Mail>;
133 mPipeline->setPreprocessors(ENTITY_TYPE_MAIL, mailPreprocessors);
134 mPipeline->setAdaptorFactory(ENTITY_TYPE_MAIL, QSharedPointer<DummyMailAdaptorFactory>::create());
135 }
136 {
137 QVector<Akonadi2::Preprocessor*> folderPreprocessors;
138 folderPreprocessors << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Folder>;
139 mPipeline->setPreprocessors(ENTITY_TYPE_FOLDER, folderPreprocessors);
140 mPipeline->setAdaptorFactory(ENTITY_TYPE_FOLDER, QSharedPointer<DummyFolderAdaptorFactory>::create());
141 }
142} 55}
143 56
144void DummyResource::createEvent(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) 57void DummyResource::createEvent(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction)