Passed
Push — master ( 3e1d12...91acb4 )
by Luís
13:51 queued 06:19
created

CompositeValueGenerationPlan   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Test Coverage

Coverage 80.77%

Importance

Changes 0
Metric Value
dl 0
loc 61
ccs 21
cts 26
cp 0.8077
rs 10
c 0
b 0
f 0
wmc 12

5 Methods

Rating   Name   Duplication   Size   Complexity  
A executeDeferred() 0 8 3
A __construct() 0 4 1
A executeImmediate() 0 8 3
A containsDeferred() 0 9 3
A dispatchExecutor() 0 10 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\ORM\Sequencing\Planning;
6
7
use Doctrine\ORM\EntityManagerInterface;
8
use Doctrine\ORM\Mapping\ClassMetadata;
9
use Doctrine\ORM\Mapping\FieldMetadata;
10
11
class CompositeValueGenerationPlan implements ValueGenerationPlan
12
{
13
    /** @var ClassMetadata */
14
    private $class;
15
16
    /** @var ValueGenerationExecutor[] */
17
    private $executors;
18
19
    /**
20
     * @param ValueGenerationExecutor[] $executors
21
     */
22 17
    public function __construct(ClassMetadata $metadata, array $executors)
23
    {
24 17
        $this->class     = $metadata;
25 17
        $this->executors = $executors;
26 17
    }
27
28 39
    public function executeImmediate(EntityManagerInterface $entityManager, object $entity) : void
29
    {
30 39
        foreach ($this->executors as $executor) {
31 39
            if ($executor->isDeferred()) {
32 39
                continue;
33
            }
34
35
            $this->dispatchExecutor($executor, $entity, $entityManager);
36
        }
37 39
    }
38
39 39
    public function executeDeferred(EntityManagerInterface $entityManager, object $entity) : void
40
    {
41 39
        foreach ($this->executors as $executor) {
42 39
            if (! $executor->isDeferred()) {
43
                continue;
44
            }
45
46 39
            $this->dispatchExecutor($executor, $entity, $entityManager);
47
        }
48 39
    }
49
50 39
    private function dispatchExecutor(
51
        ValueGenerationExecutor $executor,
52
        object $entity,
53
        EntityManagerInterface $entityManager
54
    ) : void {
55 39
        foreach ($executor->execute($entityManager, $entity) as $columnName => $value) {
56
            // TODO LocalColumnMetadata are currently shadowed and only exposed as FieldMetadata
57
            /** @var FieldMetadata $column */
58
            $column = $this->class->getColumn($columnName);
59
            $column->setValue($entity, $value);
60
        }
61 39
    }
62
63 39
    public function containsDeferred() : bool
64
    {
65 39
        foreach ($this->executors as $executor) {
66 39
            if ($executor->isDeferred()) {
67 39
                return true;
68
            }
69
        }
70
71
        return false;
72
    }
73
}
74