CollectsEventsFromEntities   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 115
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 12
c 3
b 0
f 0
lcom 1
cbo 3
dl 0
loc 115
rs 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getSubscribedEvents() 0 10 1
A prePersist() 0 5 1
A collectEventsFromEntity() 0 11 3
A preUpdate() 0 5 1
A postPersist() 0 5 1
A postUpdate() 0 5 1
A postRemove() 0 5 1
A recordedMessages() 0 6 1
A eraseMessages() 0 5 1
1
<?php
2
3
declare (strict_types = 1);
4
5
namespace HMLB\DDDBundle\EventListener;
6
7
use Doctrine\Common\EventSubscriber;
8
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
9
use HMLB\DDD\Message\MessageInterface;
10
use Psr\Log\LoggerInterface;
11
use SimpleBus\Message\Recorder\ContainsRecordedMessages;
12
13
/**
14
 * CollectsEventsFromEntities.
15
 *
16
 * @author Hugues Maignol <[email protected]>
17
 */
18
class CollectsEventsFromEntities implements EventSubscriber
19
{
20
    /**
21
     * @var LoggerInterface
22
     */
23
    protected $log;
24
25
    /**
26
     * @var MessageInterface[]
27
     */
28
    private $collectedEvents = [];
29
30
    /**
31
     * CollectsEventsFromEntities constructor.
32
     *
33
     * @param LoggerInterface $log
34
     */
35
    public function __construct(LoggerInterface $log)
36
    {
37
        $this->log = $log;
38
    }
39
40
    /**
41
     * @return array
42
     */
43
    public function getSubscribedEvents(): array
44
    {
45
        return [
46
            'prePersist',
47
            'preUpdate',
48
            'postPersist',
49
            'postUpdate',
50
            'postRemove',
51
        ];
52
    }
53
54
    /**
55
     * @param LifecycleEventArgs $event
56
     */
57
    public function prePersist(LifecycleEventArgs $event)
58
    {
59
        $this->log->debug('CollectsEventsFromEntities: prePersist listened');
60
        $this->collectEventsFromEntity($event);
61
    }
62
63
    /**
64
     * @param LifecycleEventArgs $event
65
     */
66
    private function collectEventsFromEntity(LifecycleEventArgs $event)
67
    {
68
        $entity = $event->getObject();
69
        if ($entity instanceof ContainsRecordedMessages) {
70
            foreach ($entity->recordedMessages() as $event) {
71
                $this->log->debug(get_class($event).' was collected');
72
                $this->collectedEvents[] = $event;
73
            }
74
            $entity->eraseMessages();
75
        }
76
    }
77
78
    /**
79
     * @param LifecycleEventArgs $event
80
     */
81
    public function preUpdate(LifecycleEventArgs $event)
82
    {
83
        $this->log->debug('CollectsEventsFromEntities: preUpdate listened');
84
        $this->collectEventsFromEntity($event);
85
    }
86
87
    /**
88
     * @param LifecycleEventArgs $event
89
     */
90
    public function postPersist(LifecycleEventArgs $event)
91
    {
92
        $this->log->debug('CollectsEventsFromEntities: postPersist listened');
93
        $this->collectEventsFromEntity($event);
94
    }
95
96
    /**
97
     * @param LifecycleEventArgs $event
98
     */
99
    public function postUpdate(LifecycleEventArgs $event)
100
    {
101
        $this->log->debug('CollectsEventsFromEntities: postUpdate listened');
102
        $this->collectEventsFromEntity($event);
103
    }
104
105
    /**
106
     * @param LifecycleEventArgs $event
107
     */
108
    public function postRemove(LifecycleEventArgs $event)
109
    {
110
        $this->log->debug('CollectsEventsFromEntities: postRemove listened');
111
        $this->collectEventsFromEntity($event);
112
    }
113
114
    /**
115
     * @return MessageInterface[]
116
     */
117
    public function recordedMessages(): array
118
    {
119
        $this->log->debug('CollectsEventsFromEntities giving it\'s '.count($this->collectedEvents).' events');
120
121
        return $this->collectedEvents;
122
    }
123
124
    /**
125
     * Reset recored messages.
126
     */
127
    public function eraseMessages()
128
    {
129
        $this->log->debug('CollectsEventsFromEntities erasing events');
130
        $this->collectedEvents = [];
131
    }
132
}
133