Completed
Pull Request — master (#349)
by Luc
06:21
created

AbstractProjector   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 2
dl 0
loc 81
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
B handle() 0 23 4
applyLabelAdded() 0 1 ?
applyLabelRemoved() 0 1 ?
applyLabelsImported() 0 1 ?
A isLabelAdded() 0 5 2
A isLabelRemoved() 0 5 2
A isLabelsImported() 0 5 2
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