Failed Conditions
Push — master ( f185a6...047620 )
by Guilherme
09:26
created

withComponentMetadata()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\ORM\Mapping\Builder;
6
7
use Doctrine\DBAL\DBALException;
8
use Doctrine\DBAL\Types\Type;
9
use Doctrine\ORM\Annotation;
10
use Doctrine\ORM\Mapping;
11
use function assert;
12
13
class DiscriminatorColumnMetadataBuilder
14
{
15
    /** @var Mapping\ClassMetadataBuildingContext */
16
    private $metadataBuildingContext;
17
18
    /** @var Mapping\ClassMetadata */
19
    private $componentMetadata;
20
21
    /** @var Annotation\DiscriminatorColumn|null */
22
    private $discriminatorColumnAnnotation;
23
24 90
    public function __construct(Mapping\ClassMetadataBuildingContext $metadataBuildingContext)
25
    {
26 90
        $this->metadataBuildingContext = $metadataBuildingContext;
27 90
    }
28
29 90
    public function withComponentMetadata(Mapping\ClassMetadata $componentMetadata) : DiscriminatorColumnMetadataBuilder
30
    {
31 90
        $this->componentMetadata = $componentMetadata;
32
33 90
        return $this;
34
    }
35
36 90
    public function withDiscriminatorColumnAnnotation(
37
        ?Annotation\DiscriminatorColumn $discriminatorColumn
38
    ) : DiscriminatorColumnMetadataBuilder {
39 90
        $this->discriminatorColumnAnnotation = $discriminatorColumn;
40
41 90
        return $this;
42
    }
43
44
    /**
45
     * @throws DBALException
46
     */
47 90
    public function build() : Mapping\DiscriminatorColumnMetadata
48
    {
49
        // Validate required fields
50 90
        assert($this->componentMetadata !== null);
51
52 90
        $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata();
53
54 90
        $discriminatorColumn->setTableName($this->componentMetadata->getTableName());
55 90
        $discriminatorColumn->setColumnName('dtype');
56 90
        $discriminatorColumn->setType(Type::getType('string'));
57 90
        $discriminatorColumn->setLength(255);
58
59 90
        if ($this->discriminatorColumnAnnotation === null) {
60 26
            return $discriminatorColumn;
61
        }
62
63 70
        $annotation = $this->discriminatorColumnAnnotation;
64
65 70
        $discriminatorColumn->setType(Type::getType($annotation->type ?? 'string'));
66 70
        $discriminatorColumn->setColumnName($annotation->name);
67
68 70
        if (! empty($annotation->columnDefinition)) {
69 2
            $discriminatorColumn->setColumnDefinition($annotation->columnDefinition);
70
        }
71
72 70
        if (! empty($annotation->length)) {
73 8
            $discriminatorColumn->setLength($annotation->length);
74
        }
75
76 70
        return $discriminatorColumn;
77
    }
78
}
79