Media   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 46
c 0
b 0
f 0
dl 0
loc 95
rs 10
wmc 13

9 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 13 1
A __construct() 0 13 2
A getId() 0 3 1
A getCollection() 0 3 1
A getHeight() 0 3 1
A attrs() 0 21 4
A getOccurrenceKey() 0 3 1
A getMediaType() 0 3 1
A getWidth() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Adf\Node\Child;
6
7
use DH\Adf\Node\BlockNode;
8
use DH\Adf\Node\Node;
9
use InvalidArgumentException;
10
11
/**
12
 * @see https://developer.atlassian.com/cloud/jira/platform/apis/document/nodes/media
13
 */
14
class Media extends Node
15
{
16
    public const TYPE_FILE = 'file';
17
    public const TYPE_LINK = 'link';
18
19
    protected string $type = 'media';
20
    private string $id;
21
    private string $mediaType;
22
    private string $collection;
23
    private ?string $occurrenceKey;
24
    private ?int $width;
25
    private ?int $height;
26
27
    public function __construct(string $id, string $mediaType, string $collection, ?int $width = null, ?int $height = null, ?string $occurrenceKey = null, ?BlockNode $parent = null)
28
    {
29
        if (!\in_array($mediaType, [self::TYPE_FILE, self::TYPE_LINK], true)) {
30
            throw new InvalidArgumentException('Invalid media type');
31
        }
32
33
        parent::__construct($parent);
34
        $this->id = $id;
35
        $this->mediaType = $mediaType;
36
        $this->collection = $collection;
37
        $this->occurrenceKey = $occurrenceKey;
38
        $this->width = $width;
39
        $this->height = $height;
40
    }
41
42
    public static function load(array $data, ?BlockNode $parent = null): self
43
    {
44
        self::checkNodeData(static::class, $data, ['attrs']);
45
        self::checkRequiredKeys(['id', 'type', 'collection'], $data['attrs']);
46
47
        return new self(
48
            $data['attrs']['id'],
49
            $data['attrs']['type'],
50
            $data['attrs']['collection'],
51
            $data['attrs']['width'] ?? null,
52
            $data['attrs']['height'] ?? null,
53
            $data['attrs']['occurrenceKey'] ?? null,
54
            $parent
55
        );
56
    }
57
58
    public function getId(): string
59
    {
60
        return $this->id;
61
    }
62
63
    public function getMediaType(): string
64
    {
65
        return $this->mediaType;
66
    }
67
68
    public function getCollection(): string
69
    {
70
        return $this->collection;
71
    }
72
73
    public function getOccurrenceKey(): ?string
74
    {
75
        return $this->occurrenceKey;
76
    }
77
78
    public function getWidth(): ?int
79
    {
80
        return $this->width;
81
    }
82
83
    public function getHeight(): ?int
84
    {
85
        return $this->height;
86
    }
87
88
    protected function attrs(): array
89
    {
90
        $attrs = parent::attrs();
91
92
        $attrs['id'] = $this->id;
93
        $attrs['type'] = $this->mediaType;
94
        $attrs['collection'] = $this->collection;
95
96
        if (null !== $this->occurrenceKey) {
97
            $attrs['occurrenceKey'] = $this->occurrenceKey;
98
        }
99
100
        if (null !== $this->width) {
101
            $attrs['width'] = $this->width;
102
        }
103
104
        if (null !== $this->height) {
105
            $attrs['height'] = $this->height;
106
        }
107
108
        return $attrs;
109
    }
110
}
111