PhpcrOdmExtension   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 12

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 12
dl 0
loc 65
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getDefaultConfig() 0 6 1
B load() 0 55 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Psi\Bridge\ObjectAgent\Doctrine\PhpcrOdm\Tests\Functional;
6
7
use Doctrine\Common\Annotations\AnnotationReader;
8
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
9
use Doctrine\DBAL\DriverManager;
10
use Doctrine\ODM\PHPCR\Configuration;
11
use Doctrine\ODM\PHPCR\DocumentManager;
12
use Doctrine\ODM\PHPCR\Mapping\Driver\AnnotationDriver;
13
use Doctrine\ODM\PHPCR\Mapping\Driver\XmlDriver;
14
use Doctrine\ODM\PHPCR\NodeTypeRegistrator;
15
use Jackalope\RepositoryFactoryDoctrineDBAL;
16
use Jackalope\Transport\DoctrineDBAL\RepositorySchema;
17
use PhpBench\DependencyInjection\Container;
18
use PhpBench\DependencyInjection\ExtensionInterface;
19
use PHPCR\SimpleCredentials;
20
use Psi\Bridge\ObjectAgent\Doctrine\PhpcrOdm\PhpcrOdmAgent;
21
22
class PhpcrOdmExtension implements ExtensionInterface
23
{
24
    public function getDefaultConfig()
25
    {
26
        return [
27
            'db_path' => __DIR__ . '/../../../../cache/test.sqlite',
28
        ];
29
    }
30
31
    public function load(Container $container)
32
    {
33
        $container->register('phpcr_odm', function (Container $container) {
34
            $dbPath = $container->getParameter('db_path');
35
            $registerNodeTypes = false;
36
37
            $connection = DriverManager::getConnection([
38
                'driver'    => 'pdo_sqlite',
39
                'path' => $dbPath,
40
            ]);
41
42
            // automatically setup the schema if the db doesn't exist yet.
43
            if (!file_exists($dbPath)) {
44
                if (!file_exists($dir = dirname($dbPath))) {
45
                    mkdir($dir);
46
                }
47
48
                $schema = new RepositorySchema();
49
                foreach ($schema->toSql($connection->getDatabasePlatform()) as $sql) {
50
                    $connection->exec($sql);
51
                }
52
53
                $registerNodeTypes = true;
54
            }
55
56
            $factory = new RepositoryFactoryDoctrineDBAL();
57
            $repository = $factory->getRepository([
58
                'jackalope.doctrine_dbal_connection' => $connection,
59
            ]);
60
            $session = $repository->login(new SimpleCredentials(null, null), 'default');
61
62
            if ($registerNodeTypes) {
63
                $typeRegistrator = new NodeTypeRegistrator();
64
                $typeRegistrator->registerNodeTypes($session);
65
            }
66
67
            $xmlDriver = new XmlDriver([__DIR__ . '/mappings']);
68
            $annotationDriver = new AnnotationDriver(new AnnotationReader(), [
69
                __DIR__ . '/../../../vendor/doctrine/phpcr-odm/lib/Doctrine/ODM/PHPCR/Document',
70
            ]);
71
            $chain = new MappingDriverChain();
72
            $chain->addDriver($xmlDriver, 'Psi\Component\ObjectAgent\Tests\Functional\Model');
73
            $chain->addDriver($xmlDriver, 'Psi\Bridge\ObjectAgent\Doctrine\PhpcrOdm\Tests\Functional\Model');
74
            $chain->addDriver($annotationDriver, 'Doctrine');
75
76
            $config = new Configuration();
77
            $config->setMetadataDriverImpl($chain);
78
79
            return DocumentManager::create($session, $config);
80
        });
81
82
        $container->register('psi_object_agent.phpcr_odm', function (Container $container) {
83
            return new PhpcrOdmAgent($container->get('phpcr_odm'));
84
        });
85
    }
86
}
87