DatabaseMapPool.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CatalogUrlRewrite\Model\Map;
  7. use Magento\Framework\ObjectManagerInterface;
  8. /**
  9. * Pool for database maps
  10. */
  11. class DatabaseMapPool
  12. {
  13. /**
  14. * @var DatabaseMapInterface[]
  15. */
  16. private $dataArray = [];
  17. /**
  18. * @var ObjectManagerInterface
  19. */
  20. private $objectManager;
  21. /**
  22. * Constructor
  23. *
  24. * @param ObjectManagerInterface $objectManager
  25. */
  26. public function __construct(
  27. ObjectManagerInterface $objectManager
  28. ) {
  29. $this->objectManager = $objectManager;
  30. }
  31. /**
  32. * Gets a map by instance and category Id
  33. *
  34. * @param string $instanceName
  35. * @param int $categoryId
  36. * @return DatabaseMapInterface
  37. */
  38. public function getDataMap($instanceName, $categoryId)
  39. {
  40. $key = $instanceName . '-' . $categoryId;
  41. if (!isset($this->dataArray[$key])) {
  42. $instance = $this->objectManager->create(
  43. $instanceName,
  44. [
  45. 'category' => $categoryId
  46. ]
  47. );
  48. if (!$instance instanceof DatabaseMapInterface) {
  49. throw new \InvalidArgumentException(
  50. $instanceName . ' does not implement interface ' . DatabaseMapInterface::class
  51. );
  52. }
  53. $this->dataArray[$key] = $instance;
  54. }
  55. return $this->dataArray[$key];
  56. }
  57. /**
  58. * Resets a database map by instance and category Id
  59. *
  60. * @param string $instanceName
  61. * @param int $categoryId
  62. * @return void
  63. */
  64. public function resetMap($instanceName, $categoryId)
  65. {
  66. $key = $instanceName . '-' . $categoryId;
  67. if (isset($this->dataArray[$key])) {
  68. $this->dataArray[$key]->destroyTableAdapter($categoryId);
  69. unset($this->dataArray[$key]);
  70. }
  71. }
  72. }