Test Failed
Push — master ( 9d048f...9d083f )
by Mathijs
07:23
created

MqManagementFactory::getJobService()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 0
cts 0
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
3
namespace mcorten87\rabbitmq_api;
4
5
use GuzzleHttp\Client;
6
use mcorten87\rabbitmq_api\exceptions\NoMapperForJob;
7
use mcorten87\rabbitmq_api\jobs\JobBase;
8
use mcorten87\rabbitmq_api\jobs\JobVirtualHostsList;
9
use mcorten87\rabbitmq_api\mappers\BaseMapper;
10
use mcorten87\rabbitmq_api\mappers\JobBindingListAllMapper;
11
use mcorten87\rabbitmq_api\mappers\JobBindingListBetweenQueueAndExchangeMapper;
12
use mcorten87\rabbitmq_api\mappers\JobBindingListExchangeMapper;
13
use mcorten87\rabbitmq_api\mappers\JobBindingListQueueMapper;
14
use mcorten87\rabbitmq_api\mappers\JobBindingListVirtualHostMapper;
15
use mcorten87\rabbitmq_api\mappers\JobBindingToExchangeCreateMapper;
16
use mcorten87\rabbitmq_api\mappers\JobBindingToExchangeDeleteMapper;
17
use mcorten87\rabbitmq_api\mappers\JobBindingToQueueCreateMapper;
18
use mcorten87\rabbitmq_api\mappers\JobBindingToQueueDeleteMapper;
19
use mcorten87\rabbitmq_api\mappers\JobExchangeCreateMapper;
20
use mcorten87\rabbitmq_api\mappers\JobExchangeDeleteMapper;
21
use mcorten87\rabbitmq_api\mappers\JobExchangeListMapper;
22
use mcorten87\rabbitmq_api\mappers\JobExchangeListVirtualHostMapper;
23
use mcorten87\rabbitmq_api\mappers\JobExchangePublishMapper;
24
use mcorten87\rabbitmq_api\mappers\JobPermissionCreateMapper;
25
use mcorten87\rabbitmq_api\mappers\JobPermissionDeleteMapper;
26
use mcorten87\rabbitmq_api\mappers\JobPermissionListAllMapper;
27
use mcorten87\rabbitmq_api\mappers\JobPermissionListMapper;
28
use mcorten87\rabbitmq_api\mappers\JobPermissionListUserMapper;
29
use mcorten87\rabbitmq_api\mappers\JobPermissionListVirtualHostMapper;
30
use mcorten87\rabbitmq_api\mappers\JobQueueCreateMapper;
31
use mcorten87\rabbitmq_api\mappers\JobQueueDeleteMapper;
32
use mcorten87\rabbitmq_api\mappers\JobQueueListAllMapper;
33
use mcorten87\rabbitmq_api\mappers\JobQueueListMapper;
34
use mcorten87\rabbitmq_api\mappers\JobQueueListVirtualHostMapper;
35
use mcorten87\rabbitmq_api\mappers\JobUserCreateMapper;
36
use mcorten87\rabbitmq_api\mappers\JobUserDeleteMapper;
37
use mcorten87\rabbitmq_api\mappers\JobUserListMapper;
38
use mcorten87\rabbitmq_api\mappers\JobVirtualHostCreateMapper;
39
use mcorten87\rabbitmq_api\mappers\JobVirtualHostDeleteMapper;
40
use mcorten87\rabbitmq_api\mappers\JobVirtualHostListMapper;
41
use mcorten87\rabbitmq_api\objects\JobResult;
42
use mcorten87\rabbitmq_api\services\JobService;
43
use Symfony\Component\DependencyInjection\ContainerBuilder;
44
use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
45
46
class MqManagementFactory
47
{
48
49
    /** @var MqManagementConfig */
50
    private $config;
51
52
    public function getConfig() : MqManagementConfig
53
    {
54
        return $this->config;
55
    }
56
57
    /**
58
     * @var ContainerBuilder
59
     */
60
    private $container;
61
62
63
    public function __construct()
64
    {
65
        $container = new ContainerBuilder();
66
        $this->container = $container;
67
    }
68
69
    /**
70
     * @param MqManagementConfig $config
71
     */
72
    public function register(MqManagementConfig $config)
73
    {
74
        $this->config = $config;
75
76
        $this->container->register(Client::class, Client::class);
77
78
        $this->container->register(JobService::class, JobService::class)
79
            ->addArgument($this)
80
            ->addArgument($this->container->get(Client::class))
81
        ;
82
83
        $this->registerJobs();
84
    }
85
86
    protected function registerJobs()
87
    {
88
        // virtual hosts
89
        $this->container->register(JobVirtualHostListMapper::class, JobVirtualHostListMapper::class)
90
            ->addArgument($this->config)
91
        ;
92
93
        $this->container
94
            ->register(JobVirtualHostCreateMapper::class, JobVirtualHostCreateMapper::class)
95
            ->addArgument($this->config)
96
        ;
97
98
        $this->container
99
            ->register(JobVirtualHostDeleteMapper::class, JobVirtualHostDeleteMapper::class)
100
            ->addArgument($this->config)
101
        ;
102
103
        // queues
104
        $this->container
105
            ->register(JobQueueListAllMapper::class, JobQueueListAllMapper::class)
106
            ->addArgument($this->config)
107
        ;
108
109
        $this->container
110
            ->register(JobQueueListVirtualHostMapper::class, JobQueueListVirtualHostMapper::class)
111
            ->addArgument($this->config)
112
        ;
113
114
        $this->container
115
            ->register(JobQueueListMapper::class, JobQueueListMapper::class)
116
            ->addArgument($this->config)
117
        ;
118
119
        $this->container
120
            ->register(JobQueueCreateMapper::class, JobQueueCreateMapper::class)
121
            ->addArgument($this->config)
122
        ;
123
124
        $this->container
125
            ->register(JobQueueDeleteMapper::class, JobQueueDeleteMapper::class)
126
            ->addArgument($this->config)
127
        ;
128
129
        // users
130
        $this->container
131
            ->register(JobUserListMapper::class, JobUserListMapper::class)
132
            ->addArgument($this->config)
133
        ;
134
135
        $this->container
136
            ->register(JobUserCreateMapper::class, JobUserCreateMapper::class)
137
            ->addArgument($this->config)
138
        ;
139
140
        $this->container
141
            ->register(JobUserDeleteMapper::class, JobUserDeleteMapper::class)
142
            ->addArgument($this->config)
143
        ;
144
145
        $this->container
146
            ->register(JobPermissionListAllMapper::class, JobPermissionListAllMapper::class)
147
            ->addArgument($this->config)
148
        ;
149
150
        $this->container
151
            ->register(JobPermissionListUserMapper::class, JobPermissionListUserMapper::class)
152
            ->addArgument($this->config)
153
        ;
154
155
        $this->container
156
            ->register(JobPermissionListVirtualHostMapper::class, JobPermissionListVirtualHostMapper::class)
157
            ->addArgument($this->config)
158
        ;
159
160
        $this->container
161
            ->register(JobPermissionCreateMapper::class, JobPermissionCreateMapper::class)
162
            ->addArgument($this->config)
163
        ;
164
165
        $this->container
166
            ->register(JobPermissionDeleteMapper::class, JobPermissionDeleteMapper::class)
167
            ->addArgument($this->config)
168
        ;
169
170
        $this->container
171
            ->register(JobExchangeListMapper::class, JobExchangeListMapper::class)
172
            ->addArgument($this->config)
173
        ;
174
175
        $this->container
176
            ->register(JobExchangeListVirtualHostMapper::class, JobExchangeListVirtualHostMapper::class)
177
            ->addArgument($this->config)
178
        ;
179
180
        $this->container
181
            ->register(JobExchangePublishMapper::class, JobExchangePublishMapper::class)
182
            ->addArgument($this->config)
183
        ;
184
185
        $this->container
186
            ->register(JobExchangeCreateMapper::class, JobExchangeCreateMapper::class)
187
            ->addArgument($this->config)
188
        ;
189
190
        $this->container
191
            ->register(JobExchangeDeleteMapper::class, JobExchangeDeleteMapper::class)
192
            ->addArgument($this->config)
193
        ;
194
195
        $this->container
196
            ->register(JobBindingToQueueCreateMapper::class, JobBindingToQueueCreateMapper::class)
197
            ->addArgument($this->config)
198
        ;
199
200
        $this->container
201
            ->register(JobBindingToExchangeCreateMapper::class, JobBindingToExchangeCreateMapper::class)
202
            ->addArgument($this->config)
203
        ;
204
205
        $this->container
206
            ->register(JobBindingToExchangeDeleteMapper::class, JobBindingToExchangeDeleteMapper::class)
207
            ->addArgument($this->config)
208
        ;
209
210
        $this->container
211
            ->register(JobBindingToQueueDeleteMapper::class, JobBindingToQueueDeleteMapper::class)
212
            ->addArgument($this->config)
213
        ;
214
215
        $this->container
216
            ->register(JobBindingListAllMapper::class, JobBindingListAllMapper::class)
217
            ->addArgument($this->config)
218
        ;
219
220
        $this->container
221
            ->register(JobBindingListVirtualHostMapper::class, JobBindingListVirtualHostMapper::class)
222
            ->addArgument($this->config)
223
        ;
224
225
        $this->container
226
            ->register(JobBindingListQueueMapper::class, JobBindingListQueueMapper::class)
227
            ->addArgument($this->config)
228
        ;
229
230
        $this->container
231
            ->register(JobBindingListExchangeMapper::class, JobBindingListExchangeMapper::class)
232
            ->addArgument($this->config)
233
        ;
234
235
        $this->container
236
            ->register(
237
                JobBindingListBetweenQueueAndExchangeMapper::class,
238
                JobBindingListBetweenQueueAndExchangeMapper::class
239
            )->addArgument($this->config)
240
        ;
241
    }
242
243
    /**
244
     * @param  String $class
245
     * @return JobBase
246
     */
247
    private function get(String $class)
248
    {
249
        $result = $this->container->get($class);
250
        return $result;
251
    }
252
253
    /**
254
     * @return JobService
255
     */
256
    public function getJobService()
257
    {
258
        return $this->get(JobService::class);
259
    }
260
261 16
    /**
262 16
     * @param $result
263 16
     * @return JobResult
264 16
     */
265
    public function getJobResult($result)
266
    {
267 16
        return new JobResult($result);
268 1
    }
269 1
270
    /**
271
     * Gets a mapper for the job, if non found it throws an NoMapperForJob exception
272
     *
273
     * @param JobBase $job
274
     * @return BaseMapper
275
     * @throws NoMapperForJob
276
     */
277
    public function getJobMapper(JobBase $job) : BaseMapper
278
    {
279
        $class = get_class($job);
280
        $class = str_replace('\\jobs\\', '\\mappers\\', $class);
281
        $class .= 'Mapper';
282
283
        try {
284
            return $this->container->get($class);
285
        } catch (ServiceNotFoundException $e) {
286
            throw new NoMapperForJob($job);
287
        }
288
    }
289
}
290