Completed
Push — 2.1 ( f722ef...ec91b1 )
by Rafał
09:27
created

MetadataFactory   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 4
dl 0
loc 64
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A create() 0 4 1
B createFrom() 0 48 8
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Superdesk Web Publisher Content Bundle.
7
 *
8
 * Copyright 2020 Sourcefabric z.ú. and contributors.
9
 *
10
 * For the full copyright and license information, please see the
11
 * AUTHORS and LICENSE files distributed with this source code.
12
 *
13
 * @copyright 2020 Sourcefabric z.ú
14
 * @license http://www.superdesk.org/license
15
 */
16
17
namespace SWP\Bundle\ContentBundle\Factory;
18
19
use SWP\Bundle\ContentBundle\Model\MetadataInterface;
20
use SWP\Bundle\ContentBundle\Model\Place;
21
use SWP\Bundle\ContentBundle\Model\Service;
22
use SWP\Bundle\ContentBundle\Model\Subject;
23
24
final class MetadataFactory implements MetadataFactoryInterface
25
{
26
    /** @var string */
27
    private $className;
28
29
    public function __construct(string $className)
30
    {
31
        $this->className = $className;
32
    }
33
34
    public function create(): MetadataInterface
35
    {
36
        return new $this->className();
37
    }
38
39
    public function createFrom(array $legacyMetadata): MetadataInterface
40
    {
41
        $metadata = $this->create();
42
        if (isset($legacyMetadata['subject'])) {
43
            foreach ($legacyMetadata['subject'] as $legacySubject) {
44
                $subject = new Subject();
45
                $subject->setCode($legacySubject['code']);
46
                $subject->setScheme($legacySubject['scheme'] ?? null);
47
48
                $metadata->addSubject($subject);
49
            }
50
        }
51
52
        if (isset($legacyMetadata['service'])) {
53
            foreach ($legacyMetadata['service'] as $legacyService) {
54
                $service = new Service();
55
                $service->setCode($legacyService['code'] ?? $legacyService['name'] ?? null);
56
57
                $metadata->addService($service);
58
            }
59
        }
60
61
        if (isset($legacyMetadata['place'])) {
62
            foreach ($legacyMetadata['place'] as $legacyPlace) {
63
                $place = new Place();
64
                $place->setCountry($legacyPlace['country'] ?? null);
65
                $place->setGroup($legacyPlace['group'] ?? null);
66
                $place->setName($legacyPlace['name'] ?? null);
67
                $place->setState($legacyPlace['state'] ?? null);
68
                $place->setQcode($legacyPlace['qcode'] ?? null);
69
                $place->setWorldRegion($legacyPlace['world_region'] ?? null);
70
71
                $metadata->addPlace($place);
72
            }
73
        }
74
75
        $metadata->setProfile($legacyMetadata['profile'] ?? null);
76
        $metadata->setUrgency($legacyMetadata['urgency'] ?? null);
77
        $metadata->setPriority($legacyMetadata['priority'] ?? null);
78
        $metadata->setEdNote($legacyMetadata['edNote'] ?? null);
79
        $metadata->setLanguage($legacyMetadata['language'] ?? null);
80
        $metadata->setGuid($legacyMetadata['guid'] ?? null);
81
        $metadata->setGenre(isset($legacyMetadata['genre']) ? $legacyMetadata['genre'][0]['code'] ?? null : null);
82
        $metadata->setLocated($legacyMetadata['located'] ?? null);
83
        $metadata->setByline($legacyMetadata['byline'] ?? null);
84
85
        return $metadata;
86
    }
87
}
88