Completed
Pull Request — master (#239)
by Luc
04:59
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\Offer\Events\AbstractLabelAdded as OfferAbstractLabelAdded;
10
use CultuurNet\UDB3\Offer\Events\AbstractLabelDeleted as OfferAbstractLabelDeleted;
11
use CultuurNet\UDB3\Organizer\Events\LabelAdded as OrganizerLabelAdded;
12
use CultuurNet\UDB3\Organizer\Events\LabelRemoved as OrganizerLabelRemoved;
13
14
abstract class AbstractProjector implements EventListenerInterface
15
{
16
    use DelegateEventHandlingToSpecificMethodTrait {
17
        DelegateEventHandlingToSpecificMethodTrait::handle as handleSpecific;
18
    }
19
20
    /**
21
     * @param DomainMessage $domainMessage
22
     */
23
    public function handle(DomainMessage $domainMessage)
24
    {
25
        $payload = $domainMessage->getPayload();
26
27
        if ($this->isLabelAdded($payload)) {
28
            $this->applyLabelAdded(
29
                $domainMessage->getPayload(),
30
                $domainMessage->getMetadata()
31
            );
32
        } else if ($this->isLabelDeleted($payload)) {
33
            $this->applyLabelDeleted(
34
                $domainMessage->getPayload(),
35
                $domainMessage->getMetadata()
36
            );
37
        } else {
38
            $this->handleSpecific($domainMessage);
39
        }
40
    }
41
42
    /**
43
     * @param OfferAbstractLabelAdded|OrganizerLabelAdded $labelAdded
44
     * @param Metadata $metadata
45
     */
46
    abstract public function applyLabelAdded($labelAdded, Metadata $metadata);
47
48
    /**
49
     * @param OfferAbstractLabelDeleted|OrganizerLabelRemoved $labelDeleted
50
     * @param Metadata $metadata
51
     */
52
    abstract public function applyLabelDeleted($labelDeleted, Metadata $metadata);
53
54
    /**
55
     * @param $payload
56
     * @return bool
57
     */
58
    private function isLabelAdded($payload)
59
    {
60
        return ($payload instanceof OfferAbstractLabelAdded ||
61
            $payload instanceof OrganizerLabelAdded);
62
    }
63
64
    /**
65
     * @param $payload
66
     * @return bool
67
     */
68
    private function isLabelDeleted($payload)
69
    {
70
        return ($payload instanceof OfferAbstractLabelDeleted ||
71
            $payload instanceof OrganizerLabelRemoved);
72
    }
73
}
74