Completed
Push — master ( 5ace45...cd9bd4 )
by
unknown
14s queued 10s
created

AbstractProjector::applyLabelRemoved()

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 1
c 0
b 0
f 0
nc 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\LabelsImportedEventInterface;
11
use CultuurNet\UDB3\Offer\Events\AbstractLabelAdded as OfferAbstractLabelAdded;
12
use CultuurNet\UDB3\Offer\Events\AbstractLabelRemoved as OfferAbstractLabelRemoved;
13
use CultuurNet\UDB3\Offer\Events\AbstractLabelsImported;
14
use CultuurNet\UDB3\Organizer\Events\LabelAdded as OrganizerLabelAdded;
15
use CultuurNet\UDB3\Organizer\Events\LabelRemoved as OrganizerLabelRemoved;
16
use CultuurNet\UDB3\Organizer\Events\LabelsImported;
17
18
abstract class AbstractProjector implements EventListenerInterface
19
{
20
    use DelegateEventHandlingToSpecificMethodTrait {
21
        DelegateEventHandlingToSpecificMethodTrait::handle as handleSpecific;
22
    }
23
24
    /**
25
     * @param DomainMessage $domainMessage
26
     */
27
    public function handle(DomainMessage $domainMessage)
28
    {
29
        $payload = $domainMessage->getPayload();
30
31
        if ($this->isLabelAdded($payload)) {
32
            $this->applyLabelAdded(
33
                $domainMessage->getPayload(),
34
                $domainMessage->getMetadata()
35
            );
36
        } elseif ($this->isLabelRemoved($payload)) {
37
            $this->applyLabelRemoved(
38
                $domainMessage->getPayload(),
39
                $domainMessage->getMetadata()
40
            );
41
        } elseif ($this->isLabelsImported($payload)) {
42
            $this->applyLabelsImported(
43
                $domainMessage->getPayload(),
44
                $domainMessage->getMetadata()
45
            );
46
        } else {
47
            $this->handleSpecific($domainMessage);
48
        }
49
    }
50
51
    /**
52
     * @param LabelEventInterface $labelAdded
53
     * @param Metadata $metadata
54
     */
55
    abstract public function applyLabelAdded(LabelEventInterface $labelAdded, Metadata $metadata);
56
57
    /**
58
     * @param LabelEventInterface $labelRemoved
59
     * @param Metadata $metadata
60
     */
61
    abstract public function applyLabelRemoved(LabelEventInterface $labelRemoved, Metadata $metadata);
62
63
    /**
64
     * @param LabelsImportedEventInterface $labelsImported
65
     * @param Metadata $metadata
66
     */
67
    abstract public function applyLabelsImported(LabelsImportedEventInterface $labelsImported, Metadata $metadata);
68
69
    /**
70
     * @param $payload
71
     * @return bool
72
     */
73
    private function isLabelAdded($payload)
74
    {
75
        return ($payload instanceof OfferAbstractLabelAdded ||
76
            $payload instanceof OrganizerLabelAdded);
77
    }
78
79
    /**
80
     * @param $payload
81
     * @return bool
82
     */
83
    private function isLabelRemoved($payload)
84
    {
85
        return ($payload instanceof OfferAbstractLabelRemoved ||
86
            $payload instanceof OrganizerLabelRemoved);
87
    }
88
89
    /**
90
     * @param $payload
91
     * @return bool
92
     */
93
    private function isLabelsImported($payload)
94
    {
95
        return ($payload instanceof AbstractLabelsImported ||
96
            $payload instanceof LabelsImported);
97
    }
98
}
99