123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\EntityManager;
- use Magento\Framework\EntityManager\Sequence\SequenceFactory;
- use Magento\Framework\ObjectManagerInterface;
- /**
- * Class MetadataPool
- *
- * @api
- * @since 100.1.0
- */
- class MetadataPool
- {
- /**
- * @var ObjectManagerInterface
- * @since 100.1.0
- */
- protected $objectManager;
- /**
- * @var array
- * @since 100.1.0
- */
- protected $metadata;
- /**
- * @var \Magento\Framework\EntityManager\EntityMetadata[]
- * @since 100.1.0
- */
- protected $registry;
- /**
- * @var SequenceFactory
- * @since 100.1.0
- */
- protected $sequenceFactory;
- /**
- * MetadataPool constructor.
- * @param ObjectManagerInterface $objectManager
- * @param SequenceFactory $sequenceFactory
- * @param array $metadata
- */
- public function __construct(
- ObjectManagerInterface $objectManager,
- SequenceFactory $sequenceFactory,
- array $metadata
- ) {
- $this->objectManager = $objectManager;
- $this->sequenceFactory = $sequenceFactory;
- $this->metadata = $metadata;
- }
- /**
- * @param string $entityType
- * @return EntityMetadataInterface
- */
- private function createMetadata($entityType)
- {
- //@todo: use ID as default if , check is type has EAV attributes
- $connectionName = isset($this->metadata[$entityType]['connectionName'])
- ? $this->metadata[$entityType]['connectionName']
- : 'default';
- $eavEntityType = isset($this->metadata[$entityType]['eavEntityType'])
- ? $this->metadata[$entityType]['eavEntityType']
- : null;
- $entityContext = isset($this->metadata[$entityType]['entityContext'])
- ? $this->metadata[$entityType]['entityContext']
- : [];
- return $this->objectManager->create(
- EntityMetadataInterface::class,
- [
- 'entityTableName' => $this->metadata[$entityType]['entityTableName'],
- 'eavEntityType' => $eavEntityType,
- 'connectionName' => $connectionName,
- 'identifierField' => $this->metadata[$entityType]['identifierField'],
- 'sequence' => $this->sequenceFactory->create($entityType, $this->metadata),
- 'entityContext' => $entityContext
- ]
- );
- }
- /**
- * @param string $entityType
- * @return EntityMetadataInterface
- * @throws \Exception
- * @since 100.1.0
- */
- public function getMetadata($entityType)
- {
- if (!isset($this->metadata[$entityType])) {
- throw new \Exception(sprintf('Unknown entity type: %s requested', $entityType));
- }
- if (!isset($this->registry[$entityType])) {
- $this->registry[$entityType] = $this->createMetadata($entityType);
- }
- return $this->registry[$entityType];
- }
- /**
- * @param string $entityType
- * @return HydratorInterface
- * @deprecated 100.1.0
- * @since 100.1.0
- */
- public function getHydrator($entityType)
- {
- $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
- return $objectManager->get(HydratorPool::class)->getHydrator($entityType);
- }
- /**
- * Check if entity type configuration was set to metadata
- *
- * @param string $entityType
- * @return bool
- * @since 100.1.0
- */
- public function hasConfiguration($entityType)
- {
- return isset($this->metadata[$entityType]);
- }
- }
|