Completed
Pull Request — master (#239)
by Luc
04:30
created

AbstractProjector::isLabelAdded()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 3
nc 2
nop 1
1
<?php
2
3
namespace CultuurNet\UDB3\Label\ReadModels;
4
5
use Broadway\Domain\DomainMessage;
6
use Broadway\Domain\Metadata;
7
use Broadway\EventHandling\EventListenerInterface;
8
use CultuurNet\UDB3\EventHandling\DelegateEventHandlingToSpecificMethodTrait;
9
use CultuurNet\UDB3\LabelEventInterface;
10
use CultuurNet\UDB3\Offer\Events\AbstractLabelAdded as OfferAbstractLabelAdded;
11
use CultuurNet\UDB3\Offer\Events\AbstractLabelDeleted as OfferAbstractLabelDeleted;
12
use CultuurNet\UDB3\Organizer\Events\LabelAdded as OrganizerLabelAdded;
13
use CultuurNet\UDB3\Organizer\Events\LabelRemoved as OrganizerLabelRemoved;
14
15
abstract class AbstractProjector implements EventListenerInterface
16
{
17
    use DelegateEventHandlingToSpecificMethodTrait {
18
        DelegateEventHandlingToSpecificMethodTrait::handle as handleSpecific;
19
    }
20
21
    /**
22
     * @param DomainMessage $domainMessage
23
     */
24
    public function handle(DomainMessage $domainMessage)
25
    {
26
        $payload = $domainMessage->getPayload();
27
28
        if ($this->isLabelAdded($payload)) {
29
            $this->applyLabelAdded(
30
                $domainMessage->getPayload(),
31
                $domainMessage->getMetadata()
32
            );
33
        } else if ($this->isLabelDeleted($payload)) {
34
            $this->applyLabelDeleted(
35
                $domainMessage->getPayload(),
36
                $domainMessage->getMetadata()
37
            );
38
        } else {
39
            $this->handleSpecific($domainMessage);
40
        }
41
    }
42
43
    /**
44
     * @param LabelEventInterface $labelAdded
45
     * @param Metadata $metadata
46
     */
47
    abstract public function applyLabelAdded(LabelEventInterface $labelAdded, Metadata $metadata);
48
49
    /**
50
     * @param LabelEventInterface $labelDeleted
51
     * @param Metadata $metadata
52
     */
53
    abstract public function applyLabelDeleted(LabelEventInterface $labelDeleted, Metadata $metadata);
54
55
    /**
56
     * @param $payload
57
     * @return bool
58
     */
59
    private function isLabelAdded($payload)
60
    {
61
        return ($payload instanceof OfferAbstractLabelAdded ||
62
            $payload instanceof OrganizerLabelAdded);
63
    }
64
65
    /**
66
     * @param $payload
67
     * @return bool
68
     */
69
    private function isLabelDeleted($payload)
70
    {
71
        return ($payload instanceof OfferAbstractLabelDeleted ||
72
            $payload instanceof OrganizerLabelRemoved);
73
    }
74
}
75