Reader.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue\Publisher\Config\RemoteService;
  7. use Magento\Framework\Communication\Config\ReflectionGenerator;
  8. use Magento\Framework\MessageQueue\Code\Generator\RemoteServiceGenerator;
  9. use Magento\Framework\MessageQueue\DefaultValueProvider;
  10. use Magento\Framework\MessageQueue\Publisher\Config\ReaderInterface;
  11. use Magento\Framework\ObjectManager\ConfigInterface as ObjectManagerConfig;
  12. use Magento\Framework\Reflection\MethodsMap as ServiceMethodsMap;
  13. /**
  14. * Reader for queue publisher configs based on remote service declaration in DI configs.
  15. */
  16. class Reader implements ReaderInterface
  17. {
  18. /**
  19. * @var DefaultValueProvider
  20. */
  21. private $defaultValueProvider;
  22. /**
  23. * @var ObjectManagerConfig
  24. */
  25. private $objectManagerConfig;
  26. /**
  27. * @var ReflectionGenerator
  28. */
  29. private $reflectionGenerator;
  30. /**
  31. * @var ServiceMethodsMap
  32. */
  33. private $serviceMethodsMap;
  34. /**
  35. * Initialize dependencies.
  36. *
  37. * @param DefaultValueProvider $defaultValueProvider
  38. * @param ObjectManagerConfig $objectManagerConfig
  39. * @param ReflectionGenerator $reflectionGenerator
  40. * @param ServiceMethodsMap $serviceMethodsMap
  41. */
  42. public function __construct(
  43. DefaultValueProvider $defaultValueProvider,
  44. ObjectManagerConfig $objectManagerConfig,
  45. ReflectionGenerator $reflectionGenerator,
  46. ServiceMethodsMap $serviceMethodsMap
  47. ) {
  48. $this->defaultValueProvider = $defaultValueProvider;
  49. $this->objectManagerConfig = $objectManagerConfig;
  50. $this->reflectionGenerator = $reflectionGenerator;
  51. $this->serviceMethodsMap = $serviceMethodsMap;
  52. }
  53. /**
  54. * {@inheritdoc}
  55. *
  56. * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  57. */
  58. public function read($scope = null)
  59. {
  60. $result = [];
  61. $connectionName = $this->defaultValueProvider->getConnection();
  62. $connections = [
  63. $connectionName => [
  64. 'name' => $connectionName,
  65. 'exchange' => $this->defaultValueProvider->getExchange(),
  66. 'disabled' => false,
  67. ]
  68. ];
  69. foreach ($this->getRemoteServices() as $serviceInterface => $remoteImplementation) {
  70. try {
  71. $methodsMap = $this->serviceMethodsMap->getMethodsMap($serviceInterface);
  72. } catch (\Exception $e) {
  73. throw new \LogicException(sprintf('Service interface was expected, "%s" given', $serviceInterface));
  74. }
  75. foreach ($methodsMap as $methodName => $returnType) {
  76. $topic = $this->reflectionGenerator->generateTopicName($serviceInterface, $methodName);
  77. $result[$topic] = [
  78. 'topic' => $topic,
  79. 'disabled' => false,
  80. 'connections' => $connections,
  81. ];
  82. }
  83. }
  84. return $result;
  85. }
  86. /**
  87. * Get list of remote services declared in DI config.
  88. *
  89. * @return array
  90. */
  91. private function getRemoteServices()
  92. {
  93. $preferences = $this->objectManagerConfig->getPreferences();
  94. $remoteServices = [];
  95. foreach ($preferences as $type => $preference) {
  96. if ($preference == $type . RemoteServiceGenerator::REMOTE_SERVICE_SUFFIX) {
  97. $remoteServices[$type] = $preference;
  98. }
  99. }
  100. return $remoteServices;
  101. }
  102. }