Code

< 40 %
40-60 %
> 60 %
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Bundle\DoctrineSkeletonMapperBundle;
6
7
use Doctrine\Common\EventManager;
8
use Doctrine\SkeletonMapper\DataSource\DataSource;
9
use Doctrine\SkeletonMapper\DataSource\DataSourceObjectDataRepository;
10
use Doctrine\SkeletonMapper\Hydrator\BasicObjectHydrator;
11
use Doctrine\SkeletonMapper\ObjectFactory;
12
use Doctrine\SkeletonMapper\ObjectManager;
13
use Doctrine\SkeletonMapper\ObjectRepository\ObjectRepositoryFactory as BaseObjectRepositoryFactory;
14
use Doctrine\SkeletonMapper\ObjectRepository\ObjectRepositoryInterface;
15
16
class ObjectRepositoryFactory
17
{
18
    /** @var ObjectManager */
19
    private $objectManager;
20
21
    /** @var ObjectFactory */
22
    private $objectFactory;
23
24
    /** @var BaseObjectRepositoryFactory */
25
    private $objectRepositoryFactory;
26
27
    /** @var EventManager */
28
    private $eventManager;
29
30 1
    public function __construct(
31
        ObjectManager $objectManager,
32
        ObjectFactory $objectFactory,
33
        BaseObjectRepositoryFactory $objectRepositoryFactory,
34
        EventManager $eventManager
35
    ) {
36 1
        $this->objectManager           = $objectManager;
37 1
        $this->objectFactory           = $objectFactory;
38 1
        $this->objectRepositoryFactory = $objectRepositoryFactory;
39 1
        $this->eventManager            = $eventManager;
40 1
    }
41
42 1
    public function createRepository(
43
        DataSource $dataSource,
44
        string $repositoryClassName,
45
        string $modelClassName
46
    ) : ObjectRepositoryInterface {
47 1
        $objectRepository = new $repositoryClassName(
48 1
            $this->objectManager,
49 1
            new DataSourceObjectDataRepository(
50 1
                $this->objectManager,
51 1
                $dataSource,
52 1
                $modelClassName
53
            ),
54 1
            $this->objectFactory,
55 1
            new BasicObjectHydrator($this->objectManager),
56 1
            $this->eventManager,
57 1
            $modelClassName
58
        );
59
60 1
        $this->objectRepositoryFactory->addObjectRepository($modelClassName, $objectRepository);
61
62 1
        return $objectRepository;
63
    }
64
}
65