RabbitMQBusinessFactory   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 155
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 35
dl 0
loc 155
ccs 46
cts 46
cp 1
rs 10
c 0
b 0
f 0
wmc 16

14 Methods

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