summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/pipeline.cpp54
-rw-r--r--common/pipeline.h24
2 files changed, 74 insertions, 4 deletions
diff --git a/common/pipeline.cpp b/common/pipeline.cpp
index 91437d4..019784e 100644
--- a/common/pipeline.cpp
+++ b/common/pipeline.cpp
@@ -269,7 +269,26 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size)
269 } 269 }
270 270
271 foreach (const auto &processor, d->processors[bufferType]) { 271 foreach (const auto &processor, d->processors[bufferType]) {
272 processor->modifiedEntity(current, newEntity); 272 bool exitLoop = false;
273 const auto result = processor->processModification(Preprocessor::Modification, current, newEntity);
274 switch (result.action) {
275 case Preprocessor::MoveToResource:
276 isMove = true;
277 exitLoop = true;
278 break;
279 case Preprocessor::CopyToResource:
280 isMove = true;
281 exitLoop = true;
282 break;
283 case Preprocessor::DropModification:
284 SinkTraceCtx(d->logCtx) << "Dropping modification";
285 return KAsync::error<qint64>(0);
286 default:
287 break;
288 }
289 if (exitLoop) {
290 break;
291 }
273 } 292 }
274 293
275 //The entity is either being copied or moved 294 //The entity is either being copied or moved
@@ -378,6 +397,39 @@ void Preprocessor::finalizeBatch()
378{ 397{
379} 398}
380 399
400void Preprocessor::newEntity(ApplicationDomain::ApplicationDomainType &newEntity)
401{
402
403}
404
405void Preprocessor::modifiedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity, ApplicationDomain::ApplicationDomainType &newEntity)
406{
407
408}
409
410void Preprocessor::deletedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity)
411{
412
413}
414
415Preprocessor::Result Preprocessor::processModification(Type type, const ApplicationDomain::ApplicationDomainType &current, ApplicationDomain::ApplicationDomainType &diff)
416{
417 switch(type) {
418 case Creation:
419 newEntity(diff);
420 return {NoAction};
421 case Modification:
422 modifiedEntity(current, diff);
423 return {NoAction};
424 case Deletion:
425 deletedEntity(current);
426 return {NoAction};
427 default:
428 break;
429 }
430 return {NoAction};
431}
432
381QByteArray Preprocessor::resourceInstanceIdentifier() const 433QByteArray Preprocessor::resourceInstanceIdentifier() const
382{ 434{
383 return d->resourceInstanceIdentifier; 435 return d->resourceInstanceIdentifier;
diff --git a/common/pipeline.h b/common/pipeline.h
index c6dc5fe..11d52fd 100644
--- a/common/pipeline.h
+++ b/common/pipeline.h
@@ -77,10 +77,28 @@ public:
77 Preprocessor(); 77 Preprocessor();
78 virtual ~Preprocessor(); 78 virtual ~Preprocessor();
79 79
80 enum Action {
81 NoAction,
82 MoveToResource,
83 CopyToResource,
84 DropModification,
85 DeleteEntity
86 };
87
88 enum Type {
89 Creation,
90 Modification,
91 Deletion
92 };
93 struct Result {
94 Action action;
95 };
96
80 virtual void startBatch(); 97 virtual void startBatch();
81 virtual void newEntity(ApplicationDomain::ApplicationDomainType &newEntity) {}; 98 virtual void newEntity(ApplicationDomain::ApplicationDomainType &newEntity);
82 virtual void modifiedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity, ApplicationDomain::ApplicationDomainType &newEntity) {}; 99 virtual void modifiedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity, ApplicationDomain::ApplicationDomainType &newEntity);
83 virtual void deletedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity) {}; 100 virtual void deletedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity);
101 virtual Result processModification(Type type, const ApplicationDomain::ApplicationDomainType &current, ApplicationDomain::ApplicationDomainType &diff);
84 virtual void finalizeBatch(); 102 virtual void finalizeBatch();
85 103
86 void setup(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier, Pipeline *, Storage::EntityStore *entityStore); 104 void setup(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier, Pipeline *, Storage::EntityStore *entityStore);