Skip to content

Commit 2c7a83b

Browse files
committed
MAGETWO-36282: Refactor MySql search indexer to use indexer interface
- MAGETWO-39532: Refactor Engine prepareData method - Reverted EngineProvider
1 parent 4fe7af0 commit 2c7a83b

File tree

3 files changed

+97
-2
lines changed

3 files changed

+97
-2
lines changed

app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public function __construct(
171171
\Magento\Framework\Search\Request\Config $searchRequestConfig,
172172
\Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus,
173173
\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $productAttributeCollectionFactory,
174-
\Magento\CatalogSearch\Model\Resource\Engine $engine,
174+
\Magento\CatalogSearch\Model\Resource\EngineProvider $engineProvider,
175175
\Magento\CatalogSearch\Model\Indexer\IndexerHandlerFactory $indexHandlerFactory,
176176
\Magento\Framework\Event\ManagerInterface $eventManager,
177177
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
@@ -192,7 +192,7 @@ public function __construct(
192192
$this->eventManager = $eventManager;
193193
$this->scopeConfig = $scopeConfig;
194194
$this->storeManager = $storeManager;
195-
$this->engine = $engine;
195+
$this->engine = $engineProvider->get();
196196
$configData = $indexerConfig->getIndexer(Fulltext::INDEXER_ID);
197197
$this->indexHandler = $indexHandlerFactory->create(['data' => $configData]);
198198
$this->dateTime = $dateTime;
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
/**
8+
* Catalog Search engine provider
9+
*/
10+
namespace Magento\CatalogSearch\Model\Resource;
11+
12+
use Magento\Store\Model\ScopeInterface;
13+
14+
class EngineProvider
15+
{
16+
const CONFIG_ENGINE_PATH = 'catalog/search/engine';
17+
18+
/**
19+
* @var \Magento\CatalogSearch\Model\Resource\EngineInterface
20+
*/
21+
protected $engine;
22+
23+
/**
24+
* @var \Magento\Framework\App\Config\ScopeConfigInterface
25+
*/
26+
protected $scopeConfig;
27+
28+
/**
29+
* @var \Magento\Framework\ObjectManagerInterface
30+
*/
31+
private $objectManager;
32+
33+
/**
34+
* Pool of existing engines
35+
*
36+
* @var array
37+
*/
38+
private $enginePool;
39+
40+
/**
41+
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
42+
* @param \Magento\Framework\ObjectManagerInterface $objectManager
43+
* @param array $engines
44+
*/
45+
public function __construct(
46+
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
47+
\Magento\Framework\ObjectManagerInterface $objectManager,
48+
array $engines
49+
) {
50+
$this->scopeConfig = $scopeConfig;
51+
$this->objectManager = $objectManager;
52+
$this->enginePool = $engines;
53+
}
54+
55+
/**
56+
* Get engine singleton
57+
*
58+
* @return EngineInterface
59+
*/
60+
public function get()
61+
{
62+
if (!$this->engine) {
63+
$currentEngine = $this->scopeConfig->getValue(self::CONFIG_ENGINE_PATH, ScopeInterface::SCOPE_STORE);
64+
if (!isset($this->enginePool[$currentEngine])) {
65+
throw new \LogicException(
66+
'There is no such engine: ' . $currentEngine
67+
);
68+
}
69+
$engineClassName = $this->enginePool[$currentEngine];
70+
71+
$engine = $this->objectManager->create($engineClassName);
72+
if (false === $engine instanceof \Magento\CatalogSearch\Model\Resource\EngineInterface) {
73+
throw new \LogicException(
74+
$engineClassName . ' doesn\'t implement \Magento\CatalogSearch\Model\Resource\EngineInterface'
75+
);
76+
}
77+
78+
if ($engine && !$engine->isAvailable()) {
79+
throw new \LogicException(
80+
'Engine is not available: ' . $currentEngine
81+
);
82+
}
83+
$this->engine = $engine;
84+
}
85+
86+
return $this->engine;
87+
}
88+
}

app/code/Magento/CatalogSearch/etc/di.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,13 @@
219219
<argument name="attributePrefix" xsi:type="const">Magento\CatalogSearch\Model\Resource\Engine::ATTRIBUTE_PREFIX</argument>
220220
</arguments>
221221
</type>
222+
<type name="Magento\CatalogSearch\Model\Resource\EngineProvider">
223+
<arguments>
224+
<argument name="engines" xsi:type="array">
225+
<item name="mysql" xsi:type="string">Magento\CatalogSearch\Model\Resource\Engine</item>
226+
</argument>
227+
</arguments>
228+
</type>
222229
<type name="Magento\Search\Model\AdapterFactory">
223230
<arguments>
224231
<argument name="path" xsi:type="const">Magento\CatalogSearch\Model\Resource\EngineInterface::CONFIG_ENGINE_PATH</argument>

0 commit comments

Comments
 (0)