From b50832042416fb4a37a7d31f3b133f73a3b15ebb Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sat, 11 Jun 2016 11:12:54 +0200 Subject: A more convenient preprocessor API --- common/pipeline.h | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/common/pipeline.h b/common/pipeline.h index c3abcf6..1afda21 100644 --- a/common/pipeline.h +++ b/common/pipeline.h @@ -82,10 +82,10 @@ public: virtual ~Preprocessor(); virtual void startBatch(); - virtual void newEntity(const QByteArray &key, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) {}; - virtual void modifiedEntity(const QByteArray &key, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, + virtual void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) {}; + virtual void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) {}; - virtual void deletedEntity(const QByteArray &key, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) {}; + virtual void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) {}; virtual void finalize(); protected: @@ -104,4 +104,32 @@ private: QByteArray resourceType; }; +template +class SINK_EXPORT EntityPreprocessor: public Preprocessor +{ +public: + virtual void newEntity(DomainType &, Sink::Storage::Transaction &transaction) {}; + virtual void modifiedEntity(const DomainType &oldEntity, DomainType &newEntity, Sink::Storage::Transaction &transaction) {}; + virtual void deletedEntity(const DomainType &oldEntity, Sink::Storage::Transaction &transaction) {}; + +private: + static void nullDeleter(Sink::ApplicationDomain::BufferAdaptor *) {} + virtual void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + { + auto o = DomainType("", uid, revision, QSharedPointer(&bufferAdaptor, nullDeleter)); + newEntity(o, transaction); + } + + virtual void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, + Sink::ApplicationDomain::BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + { + auto o = DomainType("", uid, revision, QSharedPointer(&bufferAdaptor, nullDeleter)); + modifiedEntity(DomainType("", uid, 0, QSharedPointer(const_cast(&oldEntity), nullDeleter)), o, transaction); + } + virtual void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + { + deletedEntity(DomainType("", uid, revision, QSharedPointer(const_cast(&bufferAdaptor), nullDeleter)), transaction); + } +}; + } // namespace Sink -- cgit v1.2.3