1
+ <?php
2
+
3
+ /**
4
+ * responsive-images-css
5
+ *
6
+ * @category Jkphl
7
+ * @package Jkphl\Respimgcss
8
+ * @subpackage Jkphl\Respimgcss\Application\Model
9
+ * @author Joschi Kuphal <[email protected] > / @jkphl
10
+ * @copyright Copyright © 2018 Joschi Kuphal <[email protected] > / @jkphl
11
+ * @license http://opensource.org/licenses/MIT The MIT License (MIT)
12
+ */
13
+
14
+ /***********************************************************************************
15
+ * The MIT License (MIT)
16
+ *
17
+ * Copyright © 2018 Joschi Kuphal <[email protected] > / @jkphl
18
+ *
19
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
20
+ * this software and associated documentation files (the "Software"), to deal in
21
+ * the Software without restriction, including without limitation the rights to
22
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
23
+ * the Software, and to permit persons to whom the Software is furnished to do so,
24
+ * subject to the following conditions:
25
+ *
26
+ * The above copyright notice and this permission notice shall be included in all
27
+ * copies or substantial portions of the Software.
28
+ *
29
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
31
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
32
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
33
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
34
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ ***********************************************************************************/
36
+
37
+ namespace Jkphl \Respimgcss \Application \Model ;
38
+
39
+ use Jkphl \Respimgcss \Application \Contract \ImageCandidateSetInterface ;
40
+ use Jkphl \Respimgcss \Application \Exceptions \InvalidArgumentException ;
41
+ use Jkphl \Respimgcss \Domain \Contract \ImageCandidateInterface ;
42
+
43
+ /**
44
+ * Typed and validating image candidate set
45
+ *
46
+ * @package Jkphl\Respimgcss
47
+ * @subpackage Jkphl\Respimgcss\Application
48
+ */
49
+ class ImageCandidateSet extends \Jkphl \Respimgcss \Domain \Model \ImageCandidateSet implements ImageCandidateSetInterface
50
+ {
51
+ /**
52
+ * Image candidate set type
53
+ *
54
+ * @var string
55
+ */
56
+ protected $ type ;
57
+ /**
58
+ * Image candidate values
59
+ *
60
+ * @var array
61
+ */
62
+ protected $ values = [];
63
+
64
+ /**
65
+ * Image candidate set constructor
66
+ *
67
+ * @param ImageCandidateInterface $imageCandidate Image candidate
68
+ */
69
+ public function __construct (ImageCandidateInterface $ imageCandidate )
70
+ {
71
+ $ this ->type = $ imageCandidate ->getType ();
72
+ $ this ->imageCandidates [] = $ imageCandidate ;
73
+ $ this ->values [$ imageCandidate ->getValue ()] = true ;
74
+ }
75
+
76
+ /**
77
+ * Offset to set
78
+ *
79
+ * @param int $offset Offset
80
+ * @param ImageCandidateInterface $value
81
+ *
82
+ * @return void
83
+ * @throws InvalidArgumentException If the value given is not a valid image candidate
84
+ * @throws InvalidArgumentException If the image candidate types are inconsistent
85
+ * @throws InvalidArgumentException If the image candidate value isn't unique
86
+ */
87
+ public function offsetSet ($ offset , $ value ): void
88
+ {
89
+ if (!($ value instanceof ImageCandidateInterface)) {
90
+ throw new InvalidArgumentException (
91
+ InvalidArgumentException::INVALID_IMAGE_CANDIDATE_STR ,
92
+ InvalidArgumentException::INVALID_IMAGE_CANDIDATE
93
+ );
94
+ }
95
+
96
+ // Test if the image candidate type matches the current set type
97
+ if ($ value ->getType () !== $ this ->type ) {
98
+ throw new InvalidArgumentException (
99
+ InvalidArgumentException::INCONSISTENT_IMAGE_CANDIDATE_TYPES_STR ,
100
+ InvalidArgumentException::INCONSISTENT_IMAGE_CANDIDATE_TYPES
101
+ );
102
+ }
103
+
104
+ if (array_key_exists ($ value ->getValue (), $ this ->values )) {
105
+ throw new InvalidArgumentException (
106
+ sprintf (InvalidArgumentException::OVERLAPPING_IMAGE_CANDIDATE_VALUE_STR , $ value ),
107
+ InvalidArgumentException::OVERLAPPING_IMAGE_CANDIDATE_VALUE
108
+ );
109
+ }
110
+
111
+ parent ::offsetSet ($ offset , $ value );
112
+ $ this ->values [$ value ->getValue ()] = true ;
113
+ }
114
+
115
+ /**
116
+ * Return all image candidates as an array
117
+ *
118
+ * @return array
119
+ */
120
+ public function toArray (): array
121
+ {
122
+ return $ this ->imageCandidates ;
123
+ }
124
+ }
0 commit comments