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

CompositeValueGenerationPlan::containsDeferred()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 3.072

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 3
nop 0
dl 0
loc 9
ccs 4
cts 5
cp 0.8
crap 3.072
rs 9.6666
c 0
b 0
f 0
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