Completed
Push — master ( f908b5...38f4f8 )
by Maxime
02:16
created

MediaInfoContainer::jsonSerialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Mhor\MediaInfo\Container;
4
5
use Mhor\MediaInfo\Type\AbstractType;
6
use Mhor\MediaInfo\Type\Audio;
7
use Mhor\MediaInfo\Type\General;
8
use Mhor\MediaInfo\Type\Image;
9
use Mhor\MediaInfo\Type\Menu;
10
use Mhor\MediaInfo\Type\Other;
11
use Mhor\MediaInfo\Type\Subtitle;
12
use Mhor\MediaInfo\Type\Video;
13
use Mhor\MediaInfo\DumpTrait;
14
15
class MediaInfoContainer implements \JsonSerializable
16
{
17
    use DumpTrait;
18
    
19
    const GENERAL_CLASS = 'Mhor\MediaInfo\Type\General';
20
    const AUDIO_CLASS = 'Mhor\MediaInfo\Type\Audio';
21
    const IMAGE_CLASS = 'Mhor\MediaInfo\Type\Image';
22
    const VIDEO_CLASS = 'Mhor\MediaInfo\Type\Video';
23
    const SUBTITLE_CLASS = 'Mhor\MediaInfo\Type\Subtitle';
24
    const MENU_CLASS = 'Mhor\MediaInfo\Type\Menu';
25
    const OTHER_CLASS = 'Mhor\MediaInfo\Type\Other';
26
27
    /**
28
     * @var string
29
     */
30
    private $version;
31
32
    /**
33
     * @var General
34
     */
35
    private $general;
36
37
    /**
38
     * @var Audio[]
39
     */
40
    private $audios = array();
41
42
    /**
43
     * @var Video[]
44
     */
45
    private $videos = array();
46
47
    /**
48
     * @var Subtitle[]
49
     */
50
    private $subtitles = array();
51
52
    /**
53
     * @var Image[]
54
     */
55
    private $images = array();
56
57
    /**
58
     * @var Menu[]
59
     */
60
    private $menus = array();
61
62
    /**
63
     * @var Other[]
64
     */
65
    private $others = array();
66
67
    /**
68
     * @return General
69
     */
70
    public function getGeneral()
71
    {
72
        return $this->general;
73
    }
74
75
    /**
76
     * @return Audio[]
77
     */
78
    public function getAudios()
79
    {
80
        return $this->audios;
81
    }
82
83
    /**
84
     * @return Image[]
85
     */
86
    public function getImages()
87
    {
88
        return $this->images;
89
    }
90
91
    /**
92
     * @return Menu[]
93
     */
94
    public function getMenus()
95
    {
96
        return $this->menus;
97
    }
98
99
    /**
100
     * @return Other[]
101
     */
102
    public function getOthers()
103
    {
104
        return $this->others;
105
    }
106
107
    /**
108
     * @param string $version
109
     */
110
    public function setVersion($version)
111
    {
112
        $this->version = $version;
113
    }
114
115
    /**
116
     * @return string
117
     */
118
    public function getVersion()
119
    {
120
        return $this->version;
121
    }
122
123
    /**
124
     * @return Video[]
125
     */
126
    public function getVideos()
127
    {
128
        return $this->videos;
129
    }
130
131
    /**
132
     * @return Subtitle[]
133
     */
134
    public function getSubtitles()
135
    {
136
        return $this->subtitles;
137
    }
138
139
    /**
140
     * @param General $general
141
     */
142
    public function setGeneral($general)
143
    {
144
        $this->general = $general;
145
    }
146
147
    /**
148
     * @param AbstractType $trackType
149
     *
150
     * @throws \Exception
151
     */
152
    public function add(AbstractType $trackType)
153
    {
154
        switch (get_class($trackType)) {
155
            case self::AUDIO_CLASS:
156
                $this->addAudio($trackType);
0 ignored issues
show
Compatibility introduced by
$trackType of type object<Mhor\MediaInfo\Type\AbstractType> is not a sub-type of object<Mhor\MediaInfo\Type\Audio>. It seems like you assume a child class of the class Mhor\MediaInfo\Type\AbstractType to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
157
                break;
158
            case self::VIDEO_CLASS:
159
                $this->addVideo($trackType);
0 ignored issues
show
Compatibility introduced by
$trackType of type object<Mhor\MediaInfo\Type\AbstractType> is not a sub-type of object<Mhor\MediaInfo\Type\Video>. It seems like you assume a child class of the class Mhor\MediaInfo\Type\AbstractType to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
160
                break;
161
            case self::IMAGE_CLASS:
162
                $this->addImage($trackType);
0 ignored issues
show
Compatibility introduced by
$trackType of type object<Mhor\MediaInfo\Type\AbstractType> is not a sub-type of object<Mhor\MediaInfo\Type\Image>. It seems like you assume a child class of the class Mhor\MediaInfo\Type\AbstractType to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
163
                break;
164
            case self::GENERAL_CLASS:
165
                $this->setGeneral($trackType);
0 ignored issues
show
Compatibility introduced by
$trackType of type object<Mhor\MediaInfo\Type\AbstractType> is not a sub-type of object<Mhor\MediaInfo\Type\General>. It seems like you assume a child class of the class Mhor\MediaInfo\Type\AbstractType to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
166
                break;
167
            case self::SUBTITLE_CLASS:
168
                $this->addSubtitle($trackType);
0 ignored issues
show
Compatibility introduced by
$trackType of type object<Mhor\MediaInfo\Type\AbstractType> is not a sub-type of object<Mhor\MediaInfo\Type\Subtitle>. It seems like you assume a child class of the class Mhor\MediaInfo\Type\AbstractType to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
169
                break;
170
            case self::MENU_CLASS:
171
                $this->addMenu($trackType);
0 ignored issues
show
Compatibility introduced by
$trackType of type object<Mhor\MediaInfo\Type\AbstractType> is not a sub-type of object<Mhor\MediaInfo\Type\Menu>. It seems like you assume a child class of the class Mhor\MediaInfo\Type\AbstractType to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
172
                break;
173
            case self::OTHER_CLASS:
174
                $this->addOther($trackType);
0 ignored issues
show
Compatibility introduced by
$trackType of type object<Mhor\MediaInfo\Type\AbstractType> is not a sub-type of object<Mhor\MediaInfo\Type\Other>. It seems like you assume a child class of the class Mhor\MediaInfo\Type\AbstractType to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
175
                break;
176
            default:
177
                throw new \Exception('Unknown type');
178
        }
179
    }
180
181
    /**
182
     * @param Audio $audio
183
     */
184
    private function addAudio(Audio $audio)
185
    {
186
        $this->audios[] = $audio;
187
    }
188
189
    /**
190
     * @param Video $video
191
     */
192
    private function addVideo(Video $video)
193
    {
194
        $this->videos[] = $video;
195
    }
196
197
    /**
198
     * @param Image $image
199
     */
200
    private function addImage(Image $image)
201
    {
202
        $this->images[] = $image;
203
    }
204
205
    /**
206
     * @param Subtitle $subtitle
207
     */
208
    private function addSubtitle(Subtitle $subtitle)
209
    {
210
        $this->subtitles[] = $subtitle;
211
    }
212
213
    /**
214
     * @param Menu $menu
215
     */
216
    private function addMenu(Menu $menu)
217
    {
218
        $this->menus[] = $menu;
219
    }
220
221
    /**
222
     * @param Other $other
223
     */
224
    private function addOther(Other $other)
225
    {
226
        $this->others[] = $other;
227
    }
228
}
229