MetadataLayer   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 151
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 87.5%

Importance

Changes 0
Metric Value
wmc 14
lcom 0
cbo 1
dl 0
loc 151
c 0
b 0
f 0
ccs 42
cts 48
cp 0.875
rs 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getHubReflection() 0 6 1
A getHubAnnotation() 0 6 1
A getHub() 0 9 2
A setHub() 0 10 1
A getMaskAnnotation() 0 13 2
A getMaskReflection() 0 13 2
A getMaskList() 0 6 2
A setMask() 0 13 1
A isAlreadyProcessed() 0 7 2
1
<?php
2
3
/**
4
 * @author Konstantin Kuklin <[email protected]>
5
 */
6
7
namespace KonstantinKuklin\DoctrineCompressedFields;
8
9
use ReflectionProperty;
10
11
class MetadataLayer
12
{
13
    const ANNOTATION = 'annotation';
14
    const REFLECTION = 'reflection';
15
    const PATH_MASK_BY_HUB = 'bits_mask_by_hub';
16
    const PATH_HUB = 'bits_hub';
17
    const PATH_HUB_MASK = 'hub_mask';
18
19
    /**
20
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata
21
     * @param string|ReflectionProperty                          $propertyName
22
     *
23
     * @return ReflectionProperty
24
     */
25
    public static function getHubReflection($classMetadata, $propertyName)
26
    {
27
        $result = self::getHub($classMetadata, $propertyName);
28
29
        return $result[self::REFLECTION];
30
    }
31
32
    /**
33
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata
34
     * @param string|ReflectionProperty                          $propertyName
35
     *
36
     * @return \KonstantinKuklin\DoctrineCompressedFields\Annotation\Hub
37
     */
38 1
    public static function getHubAnnotation($classMetadata, $propertyName)
39
    {
40 1
        $result = self::getHub($classMetadata, $propertyName);
41
42 1
        return $result[self::ANNOTATION];
43
    }
44
45
    /**
46
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata
47
     * @param string|ReflectionProperty                          $propertyName
48
     *
49
     * @return array
50
     */
51 1
    public static function getHub($classMetadata, $propertyName)
52
    {
53 1
        if ($propertyName instanceof ReflectionProperty) {
54
            $propertyName = $propertyName->getName();
55
        }
56 1
        $path = self::PATH_HUB;
57
58 1
        return $classMetadata->$path[$propertyName];
59
    }
60
61
    /**
62
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata        $classMetadata
63
     * @param \KonstantinKuklin\DoctrineCompressedFields\Annotation\Hub $annotation
64
     * @param ReflectionProperty                                        $reflection
65
     */
66 8
    public static function setHub($classMetadata, $annotation, $reflection)
67
    {
68 8
        $path = self::PATH_HUB;
69 8
        $reflection->setAccessible(true);
70
71 8
        $classMetadata->$path[$reflection->getName()] = [
72 8
            self::ANNOTATION => $annotation,
73 8
            self::REFLECTION => $reflection,
74
        ];
75 8
    }
76
77
    /**
78
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata
79
     * @param string|ReflectionProperty                          $propertyName
80
     *
81
     * @return \KonstantinKuklin\DoctrineCompressedFields\Annotation\Mask
82
     */
83 1
    public static function getMaskAnnotation($classMetadata, $propertyName)
84
    {
85 1
        if ($propertyName instanceof ReflectionProperty) {
86
            $propertyName = $propertyName->getName();
87
        }
88
89 1
        $path_hub_mask = self::PATH_HUB_MASK;
90 1
        $hubName = $classMetadata->$path_hub_mask[$propertyName];
91
92 1
        $path = self::PATH_MASK_BY_HUB;
93
94 1
        return $classMetadata->$path[$hubName][$propertyName][self::ANNOTATION];
95
    }
96
97
    /**
98
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata
99
     * @param string|ReflectionProperty                          $propertyName
100
     *
101
     * @return ReflectionProperty
102
     */
103 1
    public static function getMaskReflection($classMetadata, $propertyName)
104
    {
105 1
        if ($propertyName instanceof ReflectionProperty) {
106
            $propertyName = $propertyName->getName();
107
        }
108
109 1
        $path_hub_mask = self::PATH_HUB_MASK;
110 1
        $hubName = $classMetadata->$path_hub_mask[$propertyName];
111
112 1
        $path = self::PATH_MASK_BY_HUB;
113
114 1
        return $classMetadata->$path[$hubName][$propertyName][self::REFLECTION];
115
    }
116
117
    /**
118
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata
119
     * @param string                                             $hub
120
     *
121
     * @return array
122
     */
123 1
    public static function getMaskList($classMetadata, $hub)
124
    {
125 1
        $path = self::PATH_MASK_BY_HUB;
126
127 1
        return (!empty($classMetadata->$path[$hub]) ? $classMetadata->$path[$hub] : []);
128
    }
129
130
    /**
131
     * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata         $classMetadata
132
     * @param \KonstantinKuklin\DoctrineCompressedFields\Annotation\Mask $annotation
133
     * @param ReflectionProperty                                         $reflection
134
     */
135 8
    public static function setMask($classMetadata, $annotation, $reflection)
136
    {
137 8
        $path = self::PATH_MASK_BY_HUB;
138 8
        $reflection->setAccessible(true);
139
140 8
        $classMetadata->$path[$annotation->property][$reflection->getName()] = [
141 8
            self::ANNOTATION => $annotation,
142 8
            self::REFLECTION => $reflection,
143
        ];
144
145 8
        $path_hub_mask = self::PATH_HUB_MASK;
146 8
        $classMetadata->$path_hub_mask[$reflection->getName()] = $annotation->property;
147 8
    }
148
149
    /**
150
     * @param \Doctrine\ORM\Mapping\ClassMetadata $classMetadata
151
     *
152
     * @return bool
153
     */
154 8
    public static function isAlreadyProcessed($classMetadata)
155
    {
156 8
        $path_hub = self::PATH_HUB;
157 8
        $path_mask = self::PATH_MASK_BY_HUB;
158
159 8
        return (!empty($classMetadata->$path_hub) || !empty($classMetadata->$path_mask));
160
    }
161
}
162