objectManager = $objectManager; $this->fieldMappers = $fieldMappers; } /** * {@inheritdoc} */ public function getFieldName($attributeCode, $context = []) { $entityType = isset($context['entityType']) ? $context['entityType'] : Config::ELASTICSEARCH_TYPE_DEFAULT; return $this->getEntity($entityType)->getFieldName($attributeCode, $context); } /** * {@inheritdoc} */ public function getAllAttributesTypes($context = []) { $entityType = isset($context['entityType']) ? $context['entityType'] : Config::ELASTICSEARCH_TYPE_DEFAULT; return $this->getEntity($entityType)->getAllAttributesTypes($context); } /** * Get instance of current field mapper * * @param string $entityType * @return FieldMapperInterface * @throws \Exception */ private function getEntity($entityType) { if (empty($this->fieldMapperEntity)) { if (empty($entityType)) { throw new \Exception( 'No entity type given' ); } if (!isset($this->fieldMappers[$entityType])) { throw new \LogicException( 'There is no such field mapper: ' . $entityType ); } $fieldMapperClass = $this->fieldMappers[$entityType]; $this->fieldMapperEntity = $this->objectManager->create($fieldMapperClass); if (!($this->fieldMapperEntity instanceof FieldMapperInterface)) { throw new \InvalidArgumentException( 'Field mapper must implement \Magento\Elasticsearch\Model\Adapter\FieldMapperInterface' ); } } return $this->fieldMapperEntity; } }