SuggesterManager   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
dl 0
loc 75
c 0
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getClassSuggester() 0 9 2
A __construct() 0 18 4
A getSchemaSuggester() 0 13 2
1
<?php
2
3
namespace Mdiyakov\DoctrineSolrBundle\Manager;
4
5
use Mdiyakov\DoctrineSolrBundle\Config\Config;
6
use Mdiyakov\DoctrineSolrBundle\Query\SuggestQueryBuilder;
7
use Mdiyakov\DoctrineSolrBundle\Suggester\ClassSuggester;
8
use Mdiyakov\DoctrineSolrBundle\Suggester\SchemaSuggester;
9
10
class SuggesterManager
11
{
12
    /**
13
     * @var ClassSuggester[]
14
     */
15
    private $classSuggesters = [];
16
17
    /**
18
     * @var SchemaSuggester[]
19
     */
20
    private $schemaSuggesters = [];
21
22
    /**
23
     * @param Config $config
24
     * @param SuggestQueryBuilder $queryBuilder
25
     */
26
    public function __construct(Config $config, SuggestQueryBuilder $queryBuilder)
27
    {
28
        $entityConfigs = $config->getIndexedEntities();
29
30
        foreach ($entityConfigs as $entityConfig) {
31
            $entityClass = $entityConfig['class'];
32
            if (!array_key_exists($entityClass, $this->classSuggesters)) {
33
34
                $this->classSuggesters[$entityClass] = new ClassSuggester(
35
                    $queryBuilder->buildClassSuggestQuery($entityClass)
36
                );
37
            }
38
39
            $entitySchemaName = $entityConfig['schema'];
40
            if (!array_key_exists($entitySchemaName, $this->schemaSuggesters)) {
41
                $this->schemaSuggesters[$entitySchemaName] = new SchemaSuggester(
42
                    $queryBuilder->buildSchemaSuggestQuery(
43
                        $config->getSchemaByEntityClass($entityConfig['class'])
44
                    )
45
                );
46
            }
47
        }
48
    }
49
50
    /**
51
     * @param string $class
52
     * @return ClassSuggester
53
     * @throws \InvalidArgumentException
54
     */
55
    public function getClassSuggester($class)
56
    {
57
        if (!array_key_exists($class, $this->classSuggesters)) {
58
            throw new \InvalidArgumentException(
59
                sprintf('Class suggester %s is not found', $class)
60
            );
61
        }
62
63
        return $this->classSuggesters[$class];
64
    }
65
66
67
    /**
68
     * @param string $schema
69
     * @return SchemaSuggester
70
     * @throws \InvalidArgumentException
71
     */
72
    public function getSchemaSuggester($schema)
73
    {
74
        if (!array_key_exists($schema, $this->schemaSuggesters)) {
75
            throw new \InvalidArgumentException(
76
                sprintf(
77
                    '"%s" schema is not found. You have the following schemas: "%s"',
78
                    $schema,
79
                    join('","', array_keys($this->schemaSuggesters))
80
                )
81
            );
82
        }
83
84
        return $this->schemaSuggesters[$schema];
85
    }
86
}