diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/pipeline.cpp | 54 | ||||
-rw-r--r-- | common/pipeline.h | 24 |
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 | ||
400 | void Preprocessor::newEntity(ApplicationDomain::ApplicationDomainType &newEntity) | ||
401 | { | ||
402 | |||
403 | } | ||
404 | |||
405 | void Preprocessor::modifiedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity, ApplicationDomain::ApplicationDomainType &newEntity) | ||
406 | { | ||
407 | |||
408 | } | ||
409 | |||
410 | void Preprocessor::deletedEntity(const ApplicationDomain::ApplicationDomainType &oldEntity) | ||
411 | { | ||
412 | |||
413 | } | ||
414 | |||
415 | Preprocessor::Result Preprocessor::processModification(Type type, const ApplicationDomain::ApplicationDomainType ¤t, 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 | |||
381 | QByteArray Preprocessor::resourceInstanceIdentifier() const | 433 | QByteArray 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 ¤t, 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); |