Completed
Push — feature/more-metadata-values ( 04e0cc...df50c8 )
by Daan van
05:57 queued 03:45
created

OrganizationDisplayNameList::find()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 12
rs 9.4285
cc 3
eloc 6
nc 3
nop 1
1
<?php
2
3
namespace OpenConext\Value\Saml\Metadata\Organization;
4
5
use ArrayIterator;
6
use Countable;
7
use IteratorAggregate;
8
use OpenConext\Value\Assert\Assertion;
9
use OpenConext\Value\Exception\IndexOutOfBoundsException;
10
use OpenConext\Value\Serializable;
11
12
final class OrganizationDisplayNameList implements Countable, IteratorAggregate, Serializable
13
{
14
    /**
15
     * @var OrganizationDisplayName[]
16
     */
17
    private $organizationDisplayNames;
18
19
    /**
20
     * @param OrganizationDisplayName[] $organizationDisplayNames
21
     */
22
    public function __construct(array $organizationDisplayNames)
23
    {
24
        Assertion::allIsInstanceOf(
25
            $organizationDisplayNames,
26
            '\OpenConext\Value\Saml\Metadata\Organization\OrganizationDisplayName'
27
        );
28
29
        $this->organizationDisplayNames = array_values($organizationDisplayNames);
30
    }
31
32
    /**
33
     * @param OrganizationDisplayName $organizationDisplayName
34
     * @return OrganizationDisplayNameList
35
     */
36
    public function add(OrganizationDisplayName $organizationDisplayName)
37
    {
38
        return new self(array_merge($this->organizationDisplayNames, array($organizationDisplayName)));
39
    }
40
41
    /**
42
     * @param OrganizationDisplayName $organizationDisplayName
43
     * @return bool
44
     */
45
    public function contains(OrganizationDisplayName $organizationDisplayName)
46
    {
47
        foreach ($this->organizationDisplayNames as $displayName) {
48
            if ($displayName->equals($organizationDisplayName)) {
49
                return true;
50
            }
51
        }
52
53
        return false;
54
    }
55
56
    /**
57
     * @param OrganizationDisplayName $organizationDisplayName
58
     * @return int
59
     */
60
    public function indexOf(OrganizationDisplayName $organizationDisplayName)
61
    {
62
        foreach ($this->organizationDisplayNames as $index => $displayName) {
63
            if ($displayName->equals($organizationDisplayName)) {
64
                return $index;
65
            }
66
        }
67
68
        return -1;
69
    }
70
71
    /**
72
     * @param int $index
73
     * @return OrganizationDisplayName
74
     */
75
    public function get($index)
76
    {
77
        Assertion::integer($index);
78
79
        if ($index < 0) {
80
            throw IndexOutOfBoundsException::tooLow($index, 0);
81
        }
82
83
        if ($index > count($this->organizationDisplayNames) - 1) {
84
            throw IndexOutOfBoundsException::tooHigh($index, count($this->organizationDisplayNames) - 1);
85
        }
86
87
        return $this->organizationDisplayNames[$index];
88
    }
89
90
    /**
91
     * @param OrganizationDisplayNameList $other
92
     * @return bool
93
     */
94
    public function equals(OrganizationDisplayNameList $other)
95
    {
96
        if (count($this->organizationDisplayNames) !== count($other->organizationDisplayNames)) {
97
            return false;
98
        }
99
100
        foreach ($this->organizationDisplayNames as $index => $organizationDisplayName) {
101
            if (!$organizationDisplayName->equals($other->organizationDisplayNames[$index])) {
102
                return false;
103
            }
104
        }
105
106
        return true;
107
    }
108
109
    /**
110
     * @param Callable $predicate
111
     * @return null|OrganizationDisplayName
112
     */
113
    public function find($predicate)
114
    {
115
        Assertion::isCallable($predicate, 'predicate');
116
117
        foreach ($this->organizationDisplayNames as $organizationDisplayName) {
118
            if (call_user_func($predicate, $organizationDisplayName) === true) {
119
                return $organizationDisplayName;
120
            }
121
        }
122
123
        return null;
124
    }
125
126
    /**
127
     * @return OrganizationDisplayName[]
128
     */
129
    public function toArray()
130
    {
131
        return $this->organizationDisplayNames;
132
    }
133
134
    public function getIterator()
135
    {
136
        return new ArrayIterator($this->organizationDisplayNames);
137
    }
138
139
    public function count()
140
    {
141
        return count($this->organizationDisplayNames);
142
    }
143
144
    public static function deserialize($data)
145
    {
146
        Assertion::isArray($data);
147
148
        $displayNames = array_map(function ($displayName) {
149
            return OrganizationDisplayName::deserialize($displayName);
150
        }, $data);
151
152
        return new self($displayNames);
153
    }
154
155
    public function serialize()
156
    {
157
        return array_map(function (OrganizationDisplayName $displayName) {
158
            return $displayName->serialize();
159
        }, $this->organizationDisplayNames);
160
    }
161
162
    public function __toString()
163
    {
164
        return sprintf('OrganizationDisplayNameList[%s]', implode(', ', $this->organizationDisplayNames));
165
    }
166
}
167