SuggesterManager::__construct()   A
last analyzed

Complexity

Conditions 4
Paths 5

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 9.6666
c 0
b 0
f 0
cc 4
nc 5
nop 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
}