Completed
Pull Request — develop (#9)
by Daan van
79:41 queued 49:00
created

OrganizationUrlList::equals()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 14
rs 9.2
cc 4
eloc 7
nc 4
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 OrganizationUrlList implements Countable, IteratorAggregate, Serializable
13
{
14
    /**
15
     * @var OrganizationUrl[]
16
     */
17
    private $organizationUrls;
18
19
    /**
20
     * @param OrganizationUrl[] $organizationUrls
21
     */
22
    public function __construct(array $organizationUrls)
23
    {
24
        Assertion::allIsInstanceOf($organizationUrls, '\OpenConext\Value\Saml\Metadata\Organization\OrganizationUrl');
25
26
        $this->organizationUrls = array_values($organizationUrls);
27
    }
28
29
    /**
30
     * @param OrganizationUrl $organizationUrl
31
     * @return OrganizationUrlList
32
     */
33
    public function add(OrganizationUrl $organizationUrl)
34
    {
35
        return new self(array_merge($this->organizationUrls, array($organizationUrl)));
36
    }
37
38
    /**
39
     * @param OrganizationUrl $organizationUrl
40
     * @return bool
41
     */
42
    public function contains(OrganizationUrl $organizationUrl)
43
    {
44
        foreach ($this->organizationUrls as $url) {
45
            if ($url->equals($organizationUrl)) {
46
                return true;
47
            }
48
        }
49
50
        return false;
51
    }
52
53
    /**
54
     * @param OrganizationUrl $organizationUrl
55
     * @return int
56
     */
57
    public function indexOf(OrganizationUrl $organizationUrl)
58
    {
59
        foreach ($this->organizationUrls as $index => $url) {
60
            if ($url->equals($organizationUrl)) {
61
                return $index;
62
            }
63
        }
64
65
        return -1;
66
    }
67
68
    /**
69
     * @param int $index
70
     * @return OrganizationUrl
71
     */
72
    public function get($index)
73
    {
74
        Assertion::integer($index);
75
76
        if ($index < 0) {
77
            throw IndexOutOfBoundsException::tooLow($index, 0);
78
        }
79
80
        if ($index > count($this->organizationUrls) - 1) {
81
            throw IndexOutOfBoundsException::tooHigh($index, count($this->organizationUrls) - 1);
82
        }
83
84
        return $this->organizationUrls[$index];
85
    }
86
87
    /**
88
     * @param OrganizationUrlList $other
89
     * @return bool
90
     */
91
    public function equals(OrganizationUrlList $other)
92
    {
93
        if (count($this->organizationUrls) !== count($other->organizationUrls)) {
94
            return false;
95
        }
96
97
        foreach ($this->organizationUrls as $index => $organizationUrl) {
98
            if (!$organizationUrl->equals($other->organizationUrls[$index])) {
99
                return false;
100
            }
101
        }
102
103
        return true;
104
    }
105
106
    /**
107
     * @return OrganizationUrl[]
108
     */
109
    public function toArray()
110
    {
111
        return $this->organizationUrls;
112
    }
113
114
    public function getIterator()
115
    {
116
        return new ArrayIterator($this->organizationUrls);
117
    }
118
119
    public function count()
120
    {
121
        return count($this->organizationUrls);
122
    }
123
124
    public static function deserialize($data)
125
    {
126
        Assertion::isArray($data);
127
128
        $organizationUrls = array_map(function ($organizationUrl) {
129
            return OrganizationUrl::deserialize($organizationUrl);
130
        }, $data);
131
132
        return new self($organizationUrls);
133
    }
134
135
    public function serialize()
136
    {
137
        return array_map(function (OrganizationUrl $organizationUrl) {
138
            return $organizationUrl->serialize();
139
        }, $this->organizationUrls);
140
    }
141
142
    public function __toString()
143
    {
144
        return sprintf('OrganizationUrlList[%s]', implode(', ', $this->organizationUrls));
145
    }
146
}
147