summaryrefslogtreecommitdiffstats
path: root/common/pipeline.h
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-06-11 11:12:54 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-06-11 11:12:54 +0200
commitb50832042416fb4a37a7d31f3b133f73a3b15ebb (patch)
treed1ecdc8ac19619111362302bb19e4f42e1b46071 /common/pipeline.h
parentd8fcc65cac69fdbaad79289458a25c300ebdc212 (diff)
downloadsink-b50832042416fb4a37a7d31f3b133f73a3b15ebb.tar.gz
sink-b50832042416fb4a37a7d31f3b133f73a3b15ebb.zip
A more convenient preprocessor API
Diffstat (limited to 'common/pipeline.h')
-rw-r--r--common/pipeline.h34
1 files 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:
82 virtual ~Preprocessor(); 82 virtual ~Preprocessor();
83 83
84 virtual void startBatch(); 84 virtual void startBatch();
85 virtual void newEntity(const QByteArray &key, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) {}; 85 virtual void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) {};
86 virtual void modifiedEntity(const QByteArray &key, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, 86 virtual void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity,
87 Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) {}; 87 Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) {};
88 virtual void deletedEntity(const QByteArray &key, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) {}; 88 virtual void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) {};
89 virtual void finalize(); 89 virtual void finalize();
90 90
91protected: 91protected:
@@ -104,4 +104,32 @@ private:
104 QByteArray resourceType; 104 QByteArray resourceType;
105}; 105};
106 106
107template<typename DomainType>
108class SINK_EXPORT EntityPreprocessor: public Preprocessor
109{
110public:
111 virtual void newEntity(DomainType &, Sink::Storage::Transaction &transaction) {};
112 virtual void modifiedEntity(const DomainType &oldEntity, DomainType &newEntity, Sink::Storage::Transaction &transaction) {};
113 virtual void deletedEntity(const DomainType &oldEntity, Sink::Storage::Transaction &transaction) {};
114
115private:
116 static void nullDeleter(Sink::ApplicationDomain::BufferAdaptor *) {}
117 virtual void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE
118 {
119 auto o = DomainType("", uid, revision, QSharedPointer<Sink::ApplicationDomain::BufferAdaptor>(&bufferAdaptor, nullDeleter));
120 newEntity(o, transaction);
121 }
122
123 virtual void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity,
124 Sink::ApplicationDomain::BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE
125 {
126 auto o = DomainType("", uid, revision, QSharedPointer<Sink::ApplicationDomain::BufferAdaptor>(&bufferAdaptor, nullDeleter));
127 modifiedEntity(DomainType("", uid, 0, QSharedPointer<Sink::ApplicationDomain::BufferAdaptor>(const_cast<Sink::ApplicationDomain::BufferAdaptor*>(&oldEntity), nullDeleter)), o, transaction);
128 }
129 virtual void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE
130 {
131 deletedEntity(DomainType("", uid, revision, QSharedPointer<Sink::ApplicationDomain::BufferAdaptor>(const_cast<Sink::ApplicationDomain::BufferAdaptor*>(&bufferAdaptor), nullDeleter)), transaction);
132 }
133};
134
107} // namespace Sink 135} // namespace Sink