dd057d2ee8301cf89e04b7df3a31ae08711fa8f9
[yaffs-website] / routing / Matcher / Dumper / DumperCollection.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Routing\Matcher\Dumper;
13
14 /**
15  * Collection of routes.
16  *
17  * @author Arnaud Le Blanc <arnaud.lb@gmail.com>
18  *
19  * @internal
20  */
21 class DumperCollection implements \IteratorAggregate
22 {
23     /**
24      * @var DumperCollection|null
25      */
26     private $parent;
27
28     /**
29      * @var DumperCollection[]|DumperRoute[]
30      */
31     private $children = array();
32
33     /**
34      * @var array
35      */
36     private $attributes = array();
37
38     /**
39      * Returns the children routes and collections.
40      *
41      * @return self[]|DumperRoute[]
42      */
43     public function all()
44     {
45         return $this->children;
46     }
47
48     /**
49      * Adds a route or collection.
50      *
51      * @param DumperRoute|DumperCollection The route or collection
52      */
53     public function add($child)
54     {
55         if ($child instanceof self) {
56             $child->setParent($this);
57         }
58         $this->children[] = $child;
59     }
60
61     /**
62      * Sets children.
63      *
64      * @param array $children The children
65      */
66     public function setAll(array $children)
67     {
68         foreach ($children as $child) {
69             if ($child instanceof self) {
70                 $child->setParent($this);
71             }
72         }
73         $this->children = $children;
74     }
75
76     /**
77      * Returns an iterator over the children.
78      *
79      * @return \Iterator|DumperCollection[]|DumperRoute[] The iterator
80      */
81     public function getIterator()
82     {
83         return new \ArrayIterator($this->children);
84     }
85
86     /**
87      * Returns the root of the collection.
88      *
89      * @return self The root collection
90      */
91     public function getRoot()
92     {
93         return (null !== $this->parent) ? $this->parent->getRoot() : $this;
94     }
95
96     /**
97      * Returns the parent collection.
98      *
99      * @return self|null The parent collection or null if the collection has no parent
100      */
101     protected function getParent()
102     {
103         return $this->parent;
104     }
105
106     /**
107      * Sets the parent collection.
108      */
109     protected function setParent(self $parent)
110     {
111         $this->parent = $parent;
112     }
113
114     /**
115      * Returns true if the attribute is defined.
116      *
117      * @param string $name The attribute name
118      *
119      * @return bool true if the attribute is defined, false otherwise
120      */
121     public function hasAttribute($name)
122     {
123         return array_key_exists($name, $this->attributes);
124     }
125
126     /**
127      * Returns an attribute by name.
128      *
129      * @param string $name    The attribute name
130      * @param mixed  $default Default value is the attribute doesn't exist
131      *
132      * @return mixed The attribute value
133      */
134     public function getAttribute($name, $default = null)
135     {
136         return $this->hasAttribute($name) ? $this->attributes[$name] : $default;
137     }
138
139     /**
140      * Sets an attribute by name.
141      *
142      * @param string $name  The attribute name
143      * @param mixed  $value The attribute value
144      */
145     public function setAttribute($name, $value)
146     {
147         $this->attributes[$name] = $value;
148     }
149
150     /**
151      * Sets multiple attributes.
152      *
153      * @param array $attributes The attributes
154      */
155     public function setAttributes($attributes)
156     {
157         $this->attributes = $attributes;
158     }
159 }