Completed
Push — master ( f7252d...955fe9 )
by André
19:56 queued 06:52
created

getSearchEngineIndexers()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * This file is part of the eZ Publish Kernel package.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Bundle\EzPublishCoreBundle\ApiLoader;
10
11
use eZ\Bundle\EzPublishCoreBundle\ApiLoader\Exception\InvalidSearchEngineIndexer;
12
use eZ\Publish\Core\Search\Common\Indexer as SearchEngineIndexer;
13
14
/**
15
 * The search engine indexer factory.
16
 */
17
class SearchEngineIndexerFactory
18
{
19
    /**
20
     * @var \eZ\Bundle\EzPublishCoreBundle\ApiLoader\RepositoryConfigurationProvider
21
     */
22
    private $repositoryConfigurationProvider;
23
24
    /**
25
     * Hash of registered search engine indexers.
26
     * Key is the search engine identifier, value indexer itself.
27
     *
28
     * @var \eZ\Publish\Core\Search\Common\Indexer[]
29
     */
30
    protected $searchEngineIndexers = [];
31
32
    public function __construct(RepositoryConfigurationProvider $repositoryConfigurationProvider)
33
    {
34
        $this->repositoryConfigurationProvider = $repositoryConfigurationProvider;
35
    }
36
37
    /**
38
     * Registers $searchEngineIndexer as a valid search engine indexer with identifier $searchEngineIdentifier.
39
     *
40
     * @note It is strongly recommended to register indexer as a lazy service.
41
     *
42
     * @param \eZ\Publish\Core\Search\Common\Indexer $searchEngineIndexer
43
     * @param string $searchEngineIdentifier
44
     */
45
    public function registerSearchEngineIndexer(SearchEngineIndexer $searchEngineIndexer, $searchEngineIdentifier)
46
    {
47
        $this->searchEngineIndexers[$searchEngineIdentifier] = $searchEngineIndexer;
48
    }
49
50
    /**
51
     * Returns registered search engine indexers.
52
     *
53
     * @return \eZ\Publish\Core\Search\Common\Indexer[]
54
     */
55
    public function getSearchEngineIndexers()
56
    {
57
        return $this->searchEngineIndexers;
58
    }
59
60
    /**
61
     * Build search engine indexer identified by its identifier (the "alias" attribute in the service tag),
62
     * resolved for current siteaccess.
63
     *
64
     * @throws \eZ\Bundle\EzPublishCoreBundle\ApiLoader\Exception\InvalidSearchEngineIndexer
65
     *
66
     * @return \eZ\Publish\Core\Search\Common\Indexer
67
     */
68
    public function buildSearchEngineIndexer()
69
    {
70
        $repositoryConfig = $this->repositoryConfigurationProvider->getRepositoryConfig();
71
72
        if (
73
            !(
74
                isset($repositoryConfig['search']['engine'])
75
                && isset($this->searchEngineIndexers[$repositoryConfig['search']['engine']])
76
            )
77
        ) {
78
            throw new InvalidSearchEngineIndexer(
79
                "Invalid search engine '{$repositoryConfig['search']['engine']}'. " .
80
                "Could not find a service tagged as 'ezpublish.searchEngineIndexer' " .
81
                "with alias '{$repositoryConfig['search']['engine']}'."
82
            );
83
        }
84
85
        return $this->searchEngineIndexers[$repositoryConfig['search']['engine']];
86
    }
87
}
88