Passed
Push — master ( 354d5b...4607a5 )
by Reyo
02:27
created

JaneObjectNormalizer   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
dl 0
loc 46
ccs 0
cts 31
cp 0
rs 10
c 1
b 0
f 0
wmc 7
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the timechimp bundle package.
7
 * (c) Connect Holland.
8
 */
9
10
namespace ConnectHolland\TimechimpBundle\Api\Normalizer;
11
12
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
13
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareTrait;
14
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
15
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
16
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
17
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
18
19
class JaneObjectNormalizer implements DenormalizerInterface, NormalizerInterface, DenormalizerAwareInterface, NormalizerAwareInterface
20
{
21
    use DenormalizerAwareTrait;
22
    use NormalizerAwareTrait;
23
    protected $normalizers      = ['ConnectHolland\\TimechimpBundle\\Api\\Model\\Customer' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\CustomerNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Expense' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\ExpenseNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Invoice' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\InvoiceNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\InvoiceRow' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\InvoiceRowNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Mileage' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\MileageNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\ProjectNote' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\ProjectNoteNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Project' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\ProjectNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\ProjectTask' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\ProjectTaskNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\ProjectUser' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\ProjectUserNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\ProjectSubscription' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\ProjectSubscriptionNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\ProjectInsights' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\ProjectInsightsNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Tag' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\TagNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Task' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\TaskNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Time' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\TimeNormalizer', 'ConnectHolland\\TimechimpBundle\\Api\\Model\\User' => 'ConnectHolland\\TimechimpBundle\\Api\\Normalizer\\UserNormalizer'];
24
    protected $normalizersCache = [];
25
26
    public function supportsDenormalization($data, $type, $format = null)
27
    {
28
        return array_key_exists($type, $this->normalizers);
29
    }
30
31
    public function supportsNormalization($data, $format = null)
32
    {
33
        return is_object($data) && array_key_exists(get_class($data), $this->normalizers);
34
    }
35
36
    public function normalize($object, $format = null, array $context = [])
37
    {
38
        $normalizerClass = $this->normalizers[get_class($object)];
39
        $normalizer      = $this->getNormalizer($normalizerClass);
40
41
        return $normalizer->normalize($object, $format, $context);
42
    }
43
44
    public function denormalize($data, $class, $format = null, array $context = [])
45
    {
46
        $denormalizerClass = $this->normalizers[$class];
47
        $denormalizer      = $this->getNormalizer($denormalizerClass);
48
49
        return $denormalizer->denormalize($data, $class, $format, $context);
50
    }
51
52
    private function getNormalizer(string $normalizerClass)
53
    {
54
        return $this->normalizersCache[$normalizerClass] ?? $this->initNormalizer($normalizerClass);
55
    }
56
57
    private function initNormalizer(string $normalizerClass)
58
    {
59
        $normalizer = new $normalizerClass();
60
        $normalizer->setNormalizer($this->normalizer);
61
        $normalizer->setDenormalizer($this->denormalizer);
62
        $this->normalizersCache[$normalizerClass] = $normalizer;
63
64
        return $normalizer;
65
    }
66
}
67