Completed
Push — master ( 1f684d...57b871 )
by Mike
02:29
created

RabbitMQBusinessFactory::createQueueProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Xervice\RabbitMQ\Business;
5
6
use Xervice\Core\Business\Model\Factory\AbstractBusinessFactory;
7
use Xervice\RabbitMQ\Business\Model\Core\Bootstrapper;
8
use Xervice\RabbitMQ\Business\Model\Core\BootstrapperInterface;
9
use Xervice\RabbitMQ\Business\Model\Core\ConnectionProvider;
10
use Xervice\RabbitMQ\Business\Model\Core\ConnectionProviderInterface;
11
use Xervice\RabbitMQ\Business\Model\Core\ExchangeProvider;
12
use Xervice\RabbitMQ\Business\Model\Core\ExchangeProviderInterface;
13
use Xervice\RabbitMQ\Business\Model\Core\QueueProvider;
14
use Xervice\RabbitMQ\Business\Model\Core\QueueProviderInterface;
15
use Xervice\RabbitMQ\Business\Model\Exchange\ExchangeBuilder;
16
use Xervice\RabbitMQ\Business\Model\Exchange\ExchangeBuilderInterface;
17
use Xervice\RabbitMQ\Business\Model\Exchange\ExchangeCollection;
18
use Xervice\RabbitMQ\Business\Model\Message\MessageProvider;
19
use Xervice\RabbitMQ\Business\Model\Message\MessageProviderInterface;
20
use Xervice\RabbitMQ\Business\Model\Queue\QueueBuilder;
21
use Xervice\RabbitMQ\Business\Model\Queue\QueueBuilderInterface;
22
use Xervice\RabbitMQ\Business\Model\Queue\QueueCollection;
23
use Xervice\RabbitMQ\Business\Model\Worker\Consumer\Consumer;
24
use Xervice\RabbitMQ\Business\Model\Worker\Consumer\ConsumerInterface;
25
use Xervice\RabbitMQ\Business\Model\Worker\Listener\ListenerCollection;
26
use Xervice\RabbitMQ\Business\Model\Worker\Worker;
27
use Xervice\RabbitMQ\Business\Model\Worker\WorkerInterface;
28
use Xervice\RabbitMQ\RabbitMQDependencyProvider;
29
30
/**
31
 * @method \Xervice\RabbitMQ\RabbitMQConfig getConfig()
32
 */
33
class RabbitMQBusinessFactory extends AbstractBusinessFactory
34
{
35
    /**
36
     * @var ConnectionProviderInterface
37
     */
38
    private $connection;
39
40
    /**
41
     * @var MessageProviderInterface
42
     */
43
    private $messageProvider;
44
45
    /**
46
     * @return \Xervice\RabbitMQ\Business\Model\Core\BootstrapperInterface
47
     */
48 2
    public function createBootstrapper(): BootstrapperInterface
49
    {
50 2
        return new Bootstrapper(
51 2
            $this->createExchangeBuilder(),
52 2
            $this->createQueueBuilder()
53
        );
54
    }
55
56
    /**
57
     * @return \Xervice\RabbitMQ\Business\Model\Worker\WorkerInterface
58
     */
59 2
    public function createWorker(): WorkerInterface
60
    {
61 2
        return new Worker(
62 2
            $this->getListenerCollection(),
63 2
            $this->createConsumer()
64
        );
65
    }
66
67
    /**
68
     * @return \Xervice\RabbitMQ\Business\Model\Worker\Consumer\ConsumerInterface
69
     */
70 2
    public function createConsumer(): ConsumerInterface
71
    {
72 2
        return new Consumer(
73 2
            $this->getConnectionProvider()->getChannel(),
74 2
            $this->getConfig()->getConsumerConfig()
75
        );
76
    }
77
78
    /**
79
     * @return \Xervice\RabbitMQ\Business\Model\Queue\QueueBuilderInterface
80
     */
81 2
    public function createQueueBuilder(): QueueBuilderInterface
82
    {
83 2
        return new QueueBuilder(
84 2
            $this->createQueueProvider(),
85 2
            $this->getQueueCollection()
86
        );
87
    }
88
89
    /**
90
     * @return \Xervice\RabbitMQ\Business\Model\Exchange\ExchangeBuilderInterface
91
     */
92 2
    public function createExchangeBuilder(): ExchangeBuilderInterface
93
    {
94 2
        return new ExchangeBuilder(
95 2
            $this->createExchangeProvider(),
96 2
            $this->getExchangeCollection()
97
        );
98
    }
99
100
    /**
101
     * @return \Xervice\RabbitMQ\Business\Model\Core\ExchangeProviderInterface
102
     */
103 2
    public function createExchangeProvider() : ExchangeProviderInterface
104
    {
105 2
        return new ExchangeProvider(
106 2
            $this->getConnectionProvider()->getChannel()
107
        );
108
    }
109
110
    /**
111
     * @return \Xervice\RabbitMQ\Business\Model\Core\QueueProviderInterface
112
     */
113 2
    public function createQueueProvider() : QueueProviderInterface
114
    {
115 2
        return new QueueProvider(
116 2
            $this->getConnectionProvider()->getChannel()
117
        );
118
    }
119
120
    /**
121
     * @return \Xervice\RabbitMQ\Business\Model\Message\MessageProviderInterface
122
     */
123 1
    public function createMessageProvider() : MessageProviderInterface
124
    {
125 1
        return new MessageProvider(
126 1
            $this->getConnectionProvider()->getChannel()
127
        );
128
    }
129
130
    /**
131
     * @return \Xervice\RabbitMQ\Business\Model\Core\ConnectionProviderInterface
132
     */
133 1
    public function createConnectionProvider() : ConnectionProviderInterface
134
    {
135 1
        return new ConnectionProvider(
136 1
            $this->getConfig()->getConnectionConfig()
137
        );
138
    }
139
140
    /**
141
     * @return \Xervice\RabbitMQ\Business\Model\Message\MessageProviderInterface
142
     */
143 2
    public function getMessageProvider() : MessageProviderInterface
144
    {
145 2
        if ($this->messageProvider === null) {
146 1
            $this->messageProvider = $this->createMessageProvider();
147
        }
148
149 2
        return $this->messageProvider;
150
    }
151
152
    /**
153
     * @return \Xervice\RabbitMQ\Business\Model\Core\ConnectionProviderInterface
154
     */
155 2
    public function getConnectionProvider() : ConnectionProviderInterface
156
    {
157 2
        if ($this->connection === null) {
158 1
            $this->connection = $this->createConnectionProvider();
159
        }
160
161 2
        return $this->connection;
162
    }
163
164
    /**
165
     * @return \Xervice\RabbitMQ\Business\Model\Exchange\ExchangeCollection
166
     */
167 2
    public function getExchangeCollection(): ExchangeCollection
168
    {
169 2
        return $this->getDependency(RabbitMQDependencyProvider::RABBITMQ_EXCHANGES);
170
    }
171
172
    /**
173
     * @return \Xervice\RabbitMQ\Business\Model\Queue\QueueCollection
174
     */
175 2
    public function getQueueCollection(): QueueCollection
176
    {
177 2
        return $this->getDependency(RabbitMQDependencyProvider::RABBITMQ_QUEUES);
178
    }
179
180
    /**
181
     * @return \Xervice\RabbitMQ\Business\Model\Worker\Listener\ListenerCollection
182
     */
183 2
    public function getListenerCollection(): ListenerCollection
184
    {
185 2
        return $this->getDependency(RabbitMQDependencyProvider::RABBITMQ_LISTENER);
186
    }
187
188
}