Failed Conditions
Push — master ( 6971e7...b11528 )
by Guilherme
08:44
created

JoinColumnMetadataBuilder::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
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\ORM\Annotation;
8
use Doctrine\ORM\Mapping;
9
use function assert;
10
use function strtoupper;
11
12
class JoinColumnMetadataBuilder
13
{
14
    /** @var Mapping\ClassMetadataBuildingContext */
15
    private $metadataBuildingContext;
16
17
    /** @var Mapping\ClassMetadata */
18
    private $componentMetadata;
19
20
    /** @var string */
21
    private $fieldName;
22
23
    /** @var Annotation\JoinColumn|null */
24
    private $joinColumnAnnotation;
25
26 259
    public function __construct(Mapping\ClassMetadataBuildingContext $metadataBuildingContext)
27
    {
28 259
        $this->metadataBuildingContext = $metadataBuildingContext;
29 259
    }
30
31 259
    public function withComponentMetadata(Mapping\ClassMetadata $componentMetadata) : JoinColumnMetadataBuilder
32
    {
33 259
        $this->componentMetadata = $componentMetadata;
34
35 259
        return $this;
36
    }
37
38 259
    public function withFieldName(string $fieldName) : JoinColumnMetadataBuilder
39
    {
40 259
        $this->fieldName = $fieldName;
41
42 259
        return $this;
43
    }
44
45 199
    public function withJoinColumnAnnotation(?Annotation\JoinColumn $joinColumnAnnotation) : JoinColumnMetadataBuilder
46
    {
47 199
        $this->joinColumnAnnotation = $joinColumnAnnotation;
48
49 199
        return $this;
50
    }
51
52 259
    public function build() : Mapping\JoinColumnMetadata
53
    {
54
        // Validate required fields
55 259
        assert($this->componentMetadata !== null);
56 259
        assert($this->fieldName !== null);
57
58 259
        $componentClassName = $this->componentMetadata->getClassName();
59 259
        $namingStrategy     = $this->metadataBuildingContext->getNamingStrategy();
60 259
        $joinColumnMetadata = new Mapping\JoinColumnMetadata();
61
62 259
        if (! $this->componentMetadata->isMappedSuperclass) {
63 253
            $joinColumnMetadata->setTableName($this->componentMetadata->getTableName());
64
        }
65
66 259
        $joinColumnMetadata->setColumnName($namingStrategy->joinColumnName($this->fieldName, $componentClassName));
67 259
        $joinColumnMetadata->setReferencedColumnName($namingStrategy->referenceColumnName());
68
69 259
        if ($this->joinColumnAnnotation === null) {
70 85
            return $joinColumnMetadata;
71
        }
72
73 199
        $joinColumnMetadata->setNullable($this->joinColumnAnnotation->nullable);
74 199
        $joinColumnMetadata->setUnique($this->joinColumnAnnotation->unique);
75
76 199
        if (! empty($this->joinColumnAnnotation->name)) {
77 193
            $joinColumnMetadata->setColumnName($this->joinColumnAnnotation->name);
78
        }
79
80 199
        if (! empty($this->joinColumnAnnotation->referencedColumnName)) {
81 199
            $joinColumnMetadata->setReferencedColumnName($this->joinColumnAnnotation->referencedColumnName);
82
        }
83
84 199
        if (! empty($this->joinColumnAnnotation->fieldName)) {
85
            $joinColumnMetadata->setAliasedName($this->joinColumnAnnotation->fieldName);
86
        }
87
88 199
        if (! empty($this->joinColumnAnnotation->columnDefinition)) {
89 6
            $joinColumnMetadata->setColumnDefinition($this->joinColumnAnnotation->columnDefinition);
90
        }
91
92 199
        if ($this->joinColumnAnnotation->onDelete) {
93 94
            $joinColumnMetadata->setOnDelete(strtoupper($this->joinColumnAnnotation->onDelete));
94
        }
95
96 199
        return $joinColumnMetadata;
97
    }
98
}
99