MergerFactory.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue;
  7. use Magento\Framework\ObjectManagerInterface;
  8. class MergerFactory
  9. {
  10. /**
  11. * @var ObjectManagerInterface
  12. */
  13. private $objectManager;
  14. /**
  15. * @var string[]
  16. */
  17. private $mergers;
  18. /**
  19. * MergerFactory constructor.
  20. * @param ObjectManagerInterface $objectManager
  21. * @param string[] $mergers
  22. */
  23. public function __construct(ObjectManagerInterface $objectManager, $mergers = [])
  24. {
  25. $this->objectManager = $objectManager;
  26. $this->mergers = $mergers;
  27. }
  28. /**
  29. * @param string $consumerName
  30. * @return MergerInterface
  31. * @throws \LogicException
  32. */
  33. public function create($consumerName)
  34. {
  35. if (!isset($this->mergers[$consumerName])) {
  36. throw new \LogicException("Not found merger for consumer name '{$consumerName}'");
  37. }
  38. $mergerClassName = $this->mergers[$consumerName];
  39. $merger = $this->objectManager->get($mergerClassName);
  40. if (!$merger instanceof MergerInterface) {
  41. $mergerInterfaceName = \Magento\Framework\MessageQueue\MergerInterface::class;
  42. throw new \LogicException(
  43. "Merger '{$mergerClassName}' for consumer name '{$consumerName}' " .
  44. "does not implement interface '{$mergerInterfaceName}'"
  45. );
  46. }
  47. return $merger;
  48. }
  49. }