Completed
Push — master ( 111bcd...99ca87 )
by Andrey
26:30
created

JmsSerializerFactory::createService()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 46
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 46
rs 8.9411
cc 2
eloc 24
nc 2
nop 1
1
<?php
2
/**
3
 * @link    https://github.com/nnx-framework/jms-serializer-module
4
 * @author  Malofeykin Andrey  <[email protected]>
5
 */
6
namespace Nnx\JmsSerializerModule\Serializer;
7
8
use Nnx\JmsSerializerModule\ModuleServiceManager\JmsSerializerModuleServiceManager;
9
use Nnx\JmsSerializerModule\Options\SerializerOptions;
10
use Zend\ServiceManager\AbstractPluginManager;
11
use Zend\ServiceManager\FactoryInterface;
12
use Zend\ServiceManager\MutableCreationOptionsInterface;
13
use Zend\ServiceManager\MutableCreationOptionsTrait;
14
use Zend\ServiceManager\ServiceLocatorInterface;
15
use Metadata\MetadataFactoryInterface;
16
use JMS\Serializer\Handler\HandlerRegistryInterface;
17
use JMS\Serializer\Construction\ObjectConstructorInterface;
18
use PhpCollection\MapInterface;
19
use JMS\Serializer\EventDispatcher\EventDispatcherInterface;
20
21
/**
22
 * Class JmsSerializerFactory
23
 *
24
 * @package Nnx\JmsSerializerModule\Serializer
25
 */
26
class JmsSerializerFactory  implements FactoryInterface, MutableCreationOptionsInterface
0 ignored issues
show
Coding Style introduced by
Expected 1 space after class name; 2 found
Loading history...
Coding Style introduced by
Expected 1 space before implements keyword; 2 found
Loading history...
27
{
28
    use MutableCreationOptionsTrait;
29
30
    /**
31
     * @inheritdoc
32
     *
33
     * @param ServiceLocatorInterface $serviceLocator
34
     *
35
     * @return JmsSerializer
36
     * @throws \Zend\ServiceManager\Exception\ServiceNotCreatedException
37
     * @throws \Zend\ServiceManager\Exception\RuntimeException
38
     * @throws \Zend\ServiceManager\Exception\ServiceNotFoundException
39
     */
40
    public function createService(ServiceLocatorInterface $serviceLocator)
41
    {
42
        $appServiceLocator = $serviceLocator instanceof AbstractPluginManager ? $serviceLocator->getServiceLocator() : $serviceLocator;
43
44
        $creationOptions = $this->getCreationOptions();
45
46
        $options = new SerializerOptions($creationOptions);
47
48
49
50
        /** @var JmsSerializerModuleServiceManager $jmsSerializerModuleServiceManager */
51
        $jmsSerializerModuleServiceManager = $appServiceLocator->get(JmsSerializerModuleServiceManager::class);
52
53
        $metadataFactoryName = $options->getMetadataFactory();
54
        /** @var MetadataFactoryInterface $metadataFactory */
55
        $metadataFactory = $jmsSerializerModuleServiceManager->get($metadataFactoryName);
56
57
        $handlerRegistryName = $options->getHandlerRegistry();
58
        /** @var HandlerRegistryInterface $handlerRegistry */
59
        $handlerRegistry = $jmsSerializerModuleServiceManager->get($handlerRegistryName);
60
61
        $objectConstructorName = $options->getObjectConstructor();
62
        /** @var ObjectConstructorInterface $objectConstructor */
63
        $objectConstructor = $jmsSerializerModuleServiceManager->get($objectConstructorName);
64
65
        $serializationVisitorsServiceName = $options->getSerializationVisitors();
66
        /** @var MapInterface $serializationVisitors */
67
        $serializationVisitors = $jmsSerializerModuleServiceManager->get($serializationVisitorsServiceName);
68
69
        $deserializationVisitorsServiceName = $options->getDeserializationVisitors();
70
        /** @var MapInterface $deserializationVisitors */
71
        $deserializationVisitors = $jmsSerializerModuleServiceManager->get($deserializationVisitorsServiceName);
72
73
        $eventDispatcherName = $options->getEventDispatcher();
74
        /** @var EventDispatcherInterface $eventDispatcher */
75
        $eventDispatcher = $jmsSerializerModuleServiceManager->get($eventDispatcherName);
76
77
        return new JmsSerializer(
78
            $metadataFactory,
79
            $handlerRegistry,
80
            $objectConstructor,
81
            $serializationVisitors,
82
            $deserializationVisitors,
83
            $eventDispatcher
84
        );
85
    }
86
}
87