From ef492409892eedb85d7555002eebebe3f046b873 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 15 Dec 2015 13:41:29 +0100 Subject: Avoid duplication accross resource implementations --- examples/dummyresource/resourcefactory.cpp | 101 ++--------------------------- 1 file changed, 7 insertions(+), 94 deletions(-) (limited to 'examples') 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 @@ #include "pipeline.h" #include "dummycalendar_generated.h" #include "mail_generated.h" -#include "queuedcommand_generated.h" #include "createentity_generated.h" #include "domainadaptor.h" #include "commands.h" @@ -35,6 +34,7 @@ #include "dummystore.h" #include "definitions.h" #include "facadefactory.h" +#include "indexupdater.h" #include #include @@ -43,102 +43,15 @@ #define ENTITY_TYPE_MAIL "mail" #define ENTITY_TYPE_FOLDER "folder" -/** - * Index types: - * * uid - property - * - * * Property can be: - * * fixed value like uid - * * fixed value where we want to do smaller/greater-than comparisons. (like start date) - * * range indexes like what date range an event affects. - * * group indexes like tree hierarchies as nested sets - */ -class IndexUpdater : public Akonadi2::Preprocessor { -public: - IndexUpdater(const QByteArray &index, const QByteArray &type, const QByteArray &property) - :mIndexIdentifier(index), - mBufferType(type), - mProperty(property) - { - - } - - void newEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE - { - add(newEntity.getProperty(mProperty), uid, transaction); - } - - void modifiedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE - { - remove(oldEntity.getProperty(mProperty), uid, transaction); - add(newEntity.getProperty(mProperty), uid, transaction); - } - - void deletedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE - { - remove(oldEntity.getProperty(mProperty), uid, transaction); - } - -private: - void add(const QVariant &value, const QByteArray &uid, Akonadi2::Storage::Transaction &transaction) - { - if (value.isValid()) { - Index(mIndexIdentifier, transaction).add(value.toByteArray(), uid); - } - } - - void remove(const QVariant &value, const QByteArray &uid, Akonadi2::Storage::Transaction &transaction) - { - //TODO hide notfound error - Index(mIndexIdentifier, transaction).remove(value.toByteArray(), uid); - } - - QByteArray mIndexIdentifier; - QByteArray mBufferType; - QByteArray mProperty; -}; - -template -class DefaultIndexUpdater : public Akonadi2::Preprocessor { -public: - void newEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE - { - Akonadi2::ApplicationDomain::TypeImplementation::index(uid, newEntity, transaction); - } - - void modifiedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE - { - Akonadi2::ApplicationDomain::TypeImplementation::removeIndex(uid, oldEntity, transaction); - Akonadi2::ApplicationDomain::TypeImplementation::index(uid, newEntity, transaction); - } - - void deletedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE - { - Akonadi2::ApplicationDomain::TypeImplementation::removeIndex(uid, oldEntity, transaction); - } -}; - DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer &pipeline) : Akonadi2::GenericResource(instanceIdentifier, pipeline) { - { - QVector eventPreprocessors; - eventPreprocessors << new DefaultIndexUpdater; - mPipeline->setPreprocessors(ENTITY_TYPE_EVENT, eventPreprocessors); - mPipeline->setAdaptorFactory(ENTITY_TYPE_EVENT, QSharedPointer::create()); - } - { - QVector mailPreprocessors; - mailPreprocessors << new DefaultIndexUpdater; - mPipeline->setPreprocessors(ENTITY_TYPE_MAIL, mailPreprocessors); - mPipeline->setAdaptorFactory(ENTITY_TYPE_MAIL, QSharedPointer::create()); - } - { - QVector folderPreprocessors; - folderPreprocessors << new DefaultIndexUpdater; - mPipeline->setPreprocessors(ENTITY_TYPE_FOLDER, folderPreprocessors); - mPipeline->setAdaptorFactory(ENTITY_TYPE_FOLDER, QSharedPointer::create()); - } + addType(ENTITY_TYPE_MAIL, QSharedPointer::create(), + QVector() << new DefaultIndexUpdater); + addType(ENTITY_TYPE_FOLDER, QSharedPointer::create(), + QVector() << new DefaultIndexUpdater); + addType(ENTITY_TYPE_EVENT, QSharedPointer::create(), + QVector() << new DefaultIndexUpdater); } void DummyResource::createEvent(const QByteArray &ridBuffer, const QMap &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) -- cgit v1.2.3