/
Neo4jExtension.php
107 lines (88 loc) · 3.81 KB
/
Neo4jExtension.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
namespace Bazo\Extensions\Neo4j\DI;
use Doctrine\Common\ClassLoader,
Doctrine\Common\Annotations\AnnotationReader;
/**
* Description of Neo4jExtension
*
* @author Martin Bažík
*/
class Neo4jExtension extends \Nette\Config\CompilerExtension
{
/**
* @var array
*/
public $defaults = array(
'host' => 'localhost',
'port' => 7474,
'cachePrefix' => 'neo4j',
'metaDataCache' => 'array',
'proxyDir' => '%appDir%/models/proxies'
);
private
$cacheClassMap = array(
'array' => '\Doctrine\Common\Cache\ArrayCache',
'apc' => '\Doctrine\Common\Cache\ApcCache',
'filesystem' => '\Doctrine\Common\Cache\FilesystemCache',
'phpFile' => '\Doctrine\Common\Cache\PhpFileCache',
'winCache' => '\Doctrine\Common\Cache\WinCacheCache',
'xcache' => '\Doctrine\Common\Cache\XcacheCache',
'zendData' => '\Doctrine\Common\Cache\ZendDataCache'
)
;
/**
* Processes configuration data
*
* @return void
*/
public function loadConfiguration()
{
$builder = $this->getContainerBuilder();
$config = $this->getConfig($this->defaults);
$builder->addDefinition($this->prefix('client'))
->setClass('\Everyman\Neo4j\Client')
->setFactory('Bazo\Extensions\Neo4j\DI\Neo4jExtension::createNeo4jClient', array('@container', $config))
->setAutowired(FALSE);
$builder->addDefinition('neo4jClient')
->setClass('\Everyman\Neo4j\Client')
->setFactory('@container::getService', array($this->prefix('client')));
$builder->addDefinition($this->prefix('entityManager'))
->setClass('\HireVoice\Neo4j\EntityManager')
->setFactory('Bazo\Extensions\Neo4j\DI\Neo4jExtension::createEntityManager', array('@container', $config))
->setAutowired(FALSE);
$builder->addDefinition('entityManager')
->setClass('\HireVoice\Neo4j\EntityManager')
->setFactory('@container::getService', array($this->prefix('entityManager')));
$builder->addDefinition($this->prefix('panel'))
->setFactory('\Bazo\Extensions\Neo4j\Diagnostics\Panel::register');
}
public static function createNeo4jClient(\Nette\DI\Container $container, $config)
{
return new \Everyman\Neo4j\Client($config['host'], $config['port']);
}
public static function createEntityManager(\Nette\DI\Container $container, $config)
{
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile(VENDOR_DIR . '/hirevoice/neo4jphp-ogm/lib/HireVoice/Neo4j/Annotation/Auto.php');
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile(VENDOR_DIR . '/hirevoice/neo4jphp-ogm/lib/HireVoice/Neo4j/Annotation/Entity.php');
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile(VENDOR_DIR . '/hirevoice/neo4jphp-ogm/lib/HireVoice/Neo4j/Annotation/Index.php');
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile(VENDOR_DIR . '/hirevoice/neo4jphp-ogm/lib/HireVoice/Neo4j/Annotation/ManyToMany.php');
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile(VENDOR_DIR . '/hirevoice/neo4jphp-ogm/lib/HireVoice/Neo4j/Annotation/ManyToOne.php');
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile(VENDOR_DIR . '/hirevoice/neo4jphp-ogm/lib/HireVoice/Neo4j/Annotation/Property.php');
$metadataCache = new $this->cacheClassMap($config['metaDataCache']);
$metadataCache->setNamespace($config['cachePrefix']);
$reader = new \Doctrine\Common\Annotations\CachedReader(
new AnnotationReader,
$metadataCache,
false
);
$client = $container->neo4jClient;
$metaRepository = new \HireVoice\Neo4j\Meta\Repository($reader);
$em = new \HireVoice\Neo4j\EntityManager($client, $metaRepository);
$panel = $container->neo4j->panel;
$em->registerEvent(\HireVoice\Neo4j\EntityManager::QUERY_RUN, function($query, $parameters, $time)use($panel){
$panel->addQuery($query, $parameters, $time);
});
$em->setProxyFactory(new \HireVoice\Neo4j\Proxy\Factory($config['proxyDir'], true));
return $em;
}
}