Completed
Push — master ( f67f73...0e4ae7 )
by Mathijs
02:23
created

MqManagementFactory::getJobMapperFromContainer()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 1
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\JobExchangeListAllMapper;
22
use mcorten87\rabbitmq_api\mappers\JobExchangeListMapper;
23
use mcorten87\rabbitmq_api\mappers\JobExchangeListVirtualHostMapper;
24
use mcorten87\rabbitmq_api\mappers\JobExchangePublishMapper;
25
use mcorten87\rabbitmq_api\mappers\JobOverviewListMapper;
26
use mcorten87\rabbitmq_api\mappers\JobPermissionCreateMapper;
27
use mcorten87\rabbitmq_api\mappers\JobPermissionDeleteMapper;
28
use mcorten87\rabbitmq_api\mappers\JobPermissionListAllMapper;
29
use mcorten87\rabbitmq_api\mappers\JobPermissionListMapper;
30
use mcorten87\rabbitmq_api\mappers\JobPermissionListUserMapper;
31
use mcorten87\rabbitmq_api\mappers\JobPermissionListVirtualHostMapper;
32
use mcorten87\rabbitmq_api\mappers\JobQueueCreateMapper;
33
use mcorten87\rabbitmq_api\mappers\JobQueueDeleteMapper;
34
use mcorten87\rabbitmq_api\mappers\JobQueueListAllMapper;
35
use mcorten87\rabbitmq_api\mappers\JobQueueListMapper;
36
use mcorten87\rabbitmq_api\mappers\JobQueueListVirtualHostMapper;
37
use mcorten87\rabbitmq_api\mappers\JobUserCreateMapper;
38
use mcorten87\rabbitmq_api\mappers\JobUserDeleteMapper;
39
use mcorten87\rabbitmq_api\mappers\JobUserListMapper;
40
use mcorten87\rabbitmq_api\mappers\JobVirtualHostCreateMapper;
41
use mcorten87\rabbitmq_api\mappers\JobVirtualHostDeleteMapper;
42
use mcorten87\rabbitmq_api\mappers\JobVirtualHostListMapper;
43
use mcorten87\rabbitmq_api\objects\JobResult;
44
use mcorten87\rabbitmq_api\services\JobService;
45
use Symfony\Component\DependencyInjection\ContainerBuilder;
46
use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
47
48
class MqManagementFactory
49
{
50
51
    /** @var MqManagementConfig */
52
    private $config;
53
54 24
    public function getConfig() : MqManagementConfig
55
    {
56 24
        return $this->config;
57
    }
58
59
    /**
60
     * @var ContainerBuilder
61
     */
62
    private $container;
63
64
65
    public function __construct()
66
    {
67
        $container = new ContainerBuilder();
68
        $this->container = $container;
69
    }
70
71
    /**
72
     * @param MqManagementConfig $config
73
     */
74
    public function register(MqManagementConfig $config)
75
    {
76
        $this->config = $config;
77
78
        $this->container->register(Client::class, Client::class);
79
80
        $this->container->register(JobService::class, JobService::class)
81
            ->addArgument($this)
82
            ->addArgument($this->container->get(Client::class))
83
        ;
84
    }
85
86 1
    protected function registerMapper(BaseMapper $mapper, JobBase $job) {
87 1
        $this->container->register(
88
                get_class($job),
89
                get_class($mapper))
90 1
            ->addArgument($this->config)
91
        ;
92 1
    }
93
94
95
    /**
96
     * @param  String $class
97
     * @return JobService|JobBase
98
     */
99 24
    private function get(String $class)
100
    {
101 24
        $result = $this->container->get($class);
102 24
        return $result;
103
    }
104
105
    /**
106
     * @return JobService
107
     */
108 24
    public function getJobService()
109
    {
110 24
        return $this->get(JobService::class);
111
    }
112
113
    /**
114
     * @param $result
115
     * @return JobResult
116
     */
117
    public function getJobResult($result)
118
    {
119
        return new JobResult($result);
120
    }
121
122
    /**
123
     * Gets a mapper for the job, if non found it throws an NoMapperForJob exception
124
     *
125
     * @param JobBase $job
126
     * @return BaseMapper
127
     * @throws NoMapperForJob
128
     */
129 41
    public function getJobMapper(JobBase $job) : BaseMapper
130
    {
131 41
        $mapper = $this->getJobMapperFromContainer($job);
132 41
        if ($mapper instanceof BaseMapper) {
133 1
            return $mapper;
134
        }
135
136 40
        $mapper = $this->getJobMapperFromAutoload($job);
137 40
        if ($mapper instanceof BaseMapper) {
138 39
            return $mapper;
139
        }
140
141 1
        throw new NoMapperForJob($job);
142
    }
143
144 41
    private function getJobMapperFromContainer(JobBase $job) {
145 41
        $class = get_class($job);
146
147 41
        if (!$this->container->has($class)) {
148 40
            return null;
149
        }
150
151 1
        return $this->container->get($class);
152
    }
153
154 40
    private function getJobMapperFromAutoload(JobBase $job) {
155 40
        $class = get_class($job);
156 40
        $class = str_replace('\\jobs\\', '\\mappers\\', $class);
157 40
        $class .= 'Mapper';
158
159
        try {
160 40
            return new $class($this->config);
161 1
        } catch (\Throwable  $e) {
162 1
            return null;
163
        }
164
    }
165
}
166