Passed
Push — master ( 9db3d0...354d5b )
by Reyo
02:53
created

TimeNormalizer   F

Complexity

Total Complexity 130

Size/Duplication

Total Lines 286
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 215
c 1
b 0
f 0
dl 0
loc 286
ccs 0
cts 276
cp 0
rs 2
wmc 130

4 Methods

Rating   Name   Duplication   Size   Complexity  
F normalize() 0 133 27
A supportsDenormalization() 0 3 1
A supportsNormalization() 0 3 2
F denormalize() 0 136 100

How to fix   Complexity   

Complex Class

Complex classes like TimeNormalizer often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use TimeNormalizer, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the timechimp bundle package.
7
 * (c) Connect Holland.
8
 */
9
10
namespace ConnectHolland\TimechimpBundle\Api\Normalizer;
11
12
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
13
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareTrait;
14
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
15
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
16
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
17
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
18
19
class TimeNormalizer implements DenormalizerInterface, NormalizerInterface, DenormalizerAwareInterface, NormalizerAwareInterface
20
{
21
    use DenormalizerAwareTrait;
22
    use NormalizerAwareTrait;
23
24
    public function supportsDenormalization($data, $type, $format = null)
25
    {
26
        return $type === 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Time';
27
    }
28
29
    public function supportsNormalization($data, $format = null)
30
    {
31
        return is_object($data) && get_class($data) === 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Time';
32
    }
33
34
    public function denormalize($data, $class, $format = null, array $context = [])
35
    {
36
        if (!is_object($data)) {
37
            return null;
38
        }
39
        $object = new \ConnectHolland\TimechimpBundle\Api\Model\Time();
40
        if (property_exists($data, 'id') && $data->{'id'} !== null) {
41
            $object->setId($data->{'id'});
42
        } elseif (property_exists($data, 'id') && $data->{'id'} === null) {
43
            $object->setId(null);
44
        }
45
        if (property_exists($data, 'customerId') && $data->{'customerId'} !== null) {
46
            $object->setCustomerId($data->{'customerId'});
47
        } elseif (property_exists($data, 'customerId') && $data->{'customerId'} === null) {
48
            $object->setCustomerId(null);
49
        }
50
        if (property_exists($data, 'customerName') && $data->{'customerName'} !== null) {
51
            $object->setCustomerName($data->{'customerName'});
52
        } elseif (property_exists($data, 'customerName') && $data->{'customerName'} === null) {
53
            $object->setCustomerName(null);
54
        }
55
        if (property_exists($data, 'projectId') && $data->{'projectId'} !== null) {
56
            $object->setProjectId($data->{'projectId'});
57
        } elseif (property_exists($data, 'projectId') && $data->{'projectId'} === null) {
58
            $object->setProjectId(null);
59
        }
60
        if (property_exists($data, 'projectName') && $data->{'projectName'} !== null) {
61
            $object->setProjectName($data->{'projectName'});
62
        } elseif (property_exists($data, 'projectName') && $data->{'projectName'} === null) {
63
            $object->setProjectName(null);
64
        }
65
        if (property_exists($data, 'projectTaskId') && $data->{'projectTaskId'} !== null) {
66
            $object->setProjectTaskId($data->{'projectTaskId'});
67
        } elseif (property_exists($data, 'projectTaskId') && $data->{'projectTaskId'} === null) {
68
            $object->setProjectTaskId(null);
69
        }
70
        if (property_exists($data, 'taskId') && $data->{'taskId'} !== null) {
71
            $object->setTaskId($data->{'taskId'});
72
        } elseif (property_exists($data, 'taskId') && $data->{'taskId'} === null) {
73
            $object->setTaskId(null);
74
        }
75
        if (property_exists($data, 'taskName') && $data->{'taskName'} !== null) {
76
            $object->setTaskName($data->{'taskName'});
77
        } elseif (property_exists($data, 'taskName') && $data->{'taskName'} === null) {
78
            $object->setTaskName(null);
79
        }
80
        if (property_exists($data, 'userId') && $data->{'userId'} !== null) {
81
            $object->setUserId($data->{'userId'});
82
        } elseif (property_exists($data, 'userId') && $data->{'userId'} === null) {
83
            $object->setUserId(null);
84
        }
85
        if (property_exists($data, 'userDisplayName') && $data->{'userDisplayName'} !== null) {
86
            $object->setUserDisplayName($data->{'userDisplayName'});
87
        } elseif (property_exists($data, 'userDisplayName') && $data->{'userDisplayName'} === null) {
88
            $object->setUserDisplayName(null);
89
        }
90
        if (property_exists($data, 'userTags') && $data->{'userTags'} !== null) {
91
            $values = [];
92
            foreach ($data->{'userTags'} as $value) {
93
                $values[] = $value;
94
            }
95
            $object->setUserTags($values);
96
        } elseif (property_exists($data, 'userTags') && $data->{'userTags'} === null) {
97
            $object->setUserTags(null);
98
        }
99
        if (property_exists($data, 'date') && $data->{'date'} !== null) {
100
            $object->setDate(\DateTime::createFromFormat('Y-m-d\\TH:i:s', $data->{'date'}));
0 ignored issues
show
Bug introduced by
It seems like DateTime::createFromForm...TH:i:s', $data->'date') can also be of type false; however, parameter $date of ConnectHolland\Timechimp...i\Model\Time::setDate() does only seem to accept DateTime|null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

100
            $object->setDate(/** @scrutinizer ignore-type */ \DateTime::createFromFormat('Y-m-d\\TH:i:s', $data->{'date'}));
Loading history...
101
        } elseif (property_exists($data, 'date') && $data->{'date'} === null) {
102
            $object->setDate(null);
103
        }
104
        if (property_exists($data, 'hours') && $data->{'hours'} !== null) {
105
            $object->setHours($data->{'hours'});
106
        } elseif (property_exists($data, 'hours') && $data->{'hours'} === null) {
107
            $object->setHours(null);
108
        }
109
        if (property_exists($data, 'notes') && $data->{'notes'} !== null) {
110
            $object->setNotes($data->{'notes'});
111
        } elseif (property_exists($data, 'notes') && $data->{'notes'} === null) {
112
            $object->setNotes(null);
113
        }
114
        if (property_exists($data, 'status') && $data->{'status'} !== null) {
115
            $object->setStatus($data->{'status'});
116
        } elseif (property_exists($data, 'status') && $data->{'status'} === null) {
117
            $object->setStatus(null);
118
        }
119
        if (property_exists($data, 'startEnd') && $data->{'startEnd'} !== null) {
120
            $object->setStartEnd($data->{'startEnd'});
121
        } elseif (property_exists($data, 'startEnd') && $data->{'startEnd'} === null) {
122
            $object->setStartEnd(null);
123
        }
124
        if (property_exists($data, 'start') && $data->{'start'} !== null) {
125
            $object->setStart($data->{'start'});
126
        } elseif (property_exists($data, 'start') && $data->{'start'} === null) {
127
            $object->setStart(null);
128
        }
129
        if (property_exists($data, 'end') && $data->{'end'} !== null) {
130
            $object->setEnd($data->{'end'});
131
        } elseif (property_exists($data, 'end') && $data->{'end'} === null) {
132
            $object->setEnd(null);
133
        }
134
        if (property_exists($data, 'pause') && $data->{'pause'} !== null) {
135
            $object->setPause($data->{'pause'});
136
        } elseif (property_exists($data, 'pause') && $data->{'pause'} === null) {
137
            $object->setPause(null);
138
        }
139
        if (property_exists($data, 'externalName') && $data->{'externalName'} !== null) {
140
            $object->setExternalName($data->{'externalName'});
141
        } elseif (property_exists($data, 'externalName') && $data->{'externalName'} === null) {
142
            $object->setExternalName(null);
143
        }
144
        if (property_exists($data, 'externalUrl') && $data->{'externalUrl'} !== null) {
145
            $object->setExternalUrl($data->{'externalUrl'});
146
        } elseif (property_exists($data, 'externalUrl') && $data->{'externalUrl'} === null) {
147
            $object->setExternalUrl(null);
148
        }
149
        if (property_exists($data, 'statusIntern') && $data->{'statusIntern'} !== null) {
150
            $object->setStatusIntern($data->{'statusIntern'});
151
        } elseif (property_exists($data, 'statusIntern') && $data->{'statusIntern'} === null) {
152
            $object->setStatusIntern(null);
153
        }
154
        if (property_exists($data, 'statusExtern') && $data->{'statusExtern'} !== null) {
155
            $object->setStatusExtern($data->{'statusExtern'});
156
        } elseif (property_exists($data, 'statusExtern') && $data->{'statusExtern'} === null) {
157
            $object->setStatusExtern(null);
158
        }
159
        if (property_exists($data, 'tags') && $data->{'tags'} !== null) {
160
            $values_1 = [];
161
            foreach ($data->{'tags'} as $value_1) {
162
                $values_1[] = $this->denormalizer->denormalize($value_1, 'ConnectHolland\\TimechimpBundle\\Api\\Model\\Tag', 'json', $context);
163
            }
164
            $object->setTags($values_1);
165
        } elseif (property_exists($data, 'tags') && $data->{'tags'} === null) {
166
            $object->setTags(null);
167
        }
168
169
        return $object;
170
    }
171
172
    public function normalize($object, $format = null, array $context = [])
173
    {
174
        $data = new \stdClass();
175
        if (null !== $object->getId()) {
176
            $data->{'id'} = $object->getId();
177
        } else {
178
            $data->{'id'} = null;
179
        }
180
        if (null !== $object->getCustomerId()) {
181
            $data->{'customerId'} = $object->getCustomerId();
182
        } else {
183
            $data->{'customerId'} = null;
184
        }
185
        if (null !== $object->getCustomerName()) {
186
            $data->{'customerName'} = $object->getCustomerName();
187
        } else {
188
            $data->{'customerName'} = null;
189
        }
190
        if (null !== $object->getProjectId()) {
191
            $data->{'projectId'} = $object->getProjectId();
192
        } else {
193
            $data->{'projectId'} = null;
194
        }
195
        if (null !== $object->getProjectName()) {
196
            $data->{'projectName'} = $object->getProjectName();
197
        } else {
198
            $data->{'projectName'} = null;
199
        }
200
        if (null !== $object->getProjectTaskId()) {
201
            $data->{'projectTaskId'} = $object->getProjectTaskId();
202
        } else {
203
            $data->{'projectTaskId'} = null;
204
        }
205
        if (null !== $object->getTaskId()) {
206
            $data->{'taskId'} = $object->getTaskId();
207
        } else {
208
            $data->{'taskId'} = null;
209
        }
210
        if (null !== $object->getTaskName()) {
211
            $data->{'taskName'} = $object->getTaskName();
212
        } else {
213
            $data->{'taskName'} = null;
214
        }
215
        if (null !== $object->getUserId()) {
216
            $data->{'userId'} = $object->getUserId();
217
        } else {
218
            $data->{'userId'} = null;
219
        }
220
        if (null !== $object->getUserDisplayName()) {
221
            $data->{'userDisplayName'} = $object->getUserDisplayName();
222
        } else {
223
            $data->{'userDisplayName'} = null;
224
        }
225
        if (null !== $object->getUserTags()) {
226
            $values = [];
227
            foreach ($object->getUserTags() as $value) {
228
                $values[] = $value;
229
            }
230
            $data->{'userTags'} = $values;
231
        } else {
232
            $data->{'userTags'} = null;
233
        }
234
        if (null !== $object->getDate()) {
235
            $data->{'date'} = $object->getDate()->format('Y-m-d\\TH:i:s');
236
        } else {
237
            $data->{'date'} = null;
238
        }
239
        if (null !== $object->getHours()) {
240
            $data->{'hours'} = $object->getHours();
241
        } else {
242
            $data->{'hours'} = null;
243
        }
244
        if (null !== $object->getNotes()) {
245
            $data->{'notes'} = $object->getNotes();
246
        } else {
247
            $data->{'notes'} = null;
248
        }
249
        if (null !== $object->getStatus()) {
250
            $data->{'status'} = $object->getStatus();
251
        } else {
252
            $data->{'status'} = null;
253
        }
254
        if (null !== $object->getStartEnd()) {
255
            $data->{'startEnd'} = $object->getStartEnd();
256
        } else {
257
            $data->{'startEnd'} = null;
258
        }
259
        if (null !== $object->getStart()) {
260
            $data->{'start'} = $object->getStart();
261
        } else {
262
            $data->{'start'} = null;
263
        }
264
        if (null !== $object->getEnd()) {
265
            $data->{'end'} = $object->getEnd();
266
        } else {
267
            $data->{'end'} = null;
268
        }
269
        if (null !== $object->getPause()) {
270
            $data->{'pause'} = $object->getPause();
271
        } else {
272
            $data->{'pause'} = null;
273
        }
274
        if (null !== $object->getExternalName()) {
275
            $data->{'externalName'} = $object->getExternalName();
276
        } else {
277
            $data->{'externalName'} = null;
278
        }
279
        if (null !== $object->getExternalUrl()) {
280
            $data->{'externalUrl'} = $object->getExternalUrl();
281
        } else {
282
            $data->{'externalUrl'} = null;
283
        }
284
        if (null !== $object->getStatusIntern()) {
285
            $data->{'statusIntern'} = $object->getStatusIntern();
286
        } else {
287
            $data->{'statusIntern'} = null;
288
        }
289
        if (null !== $object->getStatusExtern()) {
290
            $data->{'statusExtern'} = $object->getStatusExtern();
291
        } else {
292
            $data->{'statusExtern'} = null;
293
        }
294
        if (null !== $object->getTags()) {
295
            $values_1 = [];
296
            foreach ($object->getTags() as $value_1) {
297
                $values_1[] = $this->normalizer->normalize($value_1, 'json', $context);
298
            }
299
            $data->{'tags'} = $values_1;
300
        } else {
301
            $data->{'tags'} = null;
302
        }
303
304
        return $data;
305
    }
306
}
307