1: <?php
2:
3: /**
4: * Picon Framework
5: * http://code.google.com/p/picon-framework/
6: *
7: * Copyright (C) 2011-2012 Martin Cassidy <martin.cassidy@webquub.com>
8:
9: * Picon Framework is free software: you can redistribute it and/or modify
10: * it under the terms of the GNU General Public License as published by
11: * the Free Software Foundation, either version 3 of the License, or
12: * (at your option) any later version.
13:
14: * Picon Framework is distributed in the hope that it will be useful,
15: * but WITHOUT ANY WARRANTY; without even the implied warranty of
16: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: * General Public License for more details.
18:
19: * You should have received a copy of the GNU General Public License
20: * along with Picon Framework. If not, see <http://www.gnu.org/licenses/>.
21: * */
22:
23: namespace picon;
24:
25: /**
26: * Represents a collection of listeners that are treated as one listener
27: *
28: * @author Martin Cassidy Cassidy
29: * @package listeners
30: */
31: abstract class ListenerCollection
32: {
33: private $listeners = array();
34:
35: public function add($listener)
36: {
37: if(!$this->validateListener($listener))
38: {
39: throw new \InvalidArgumentException(sprintf("Listener of type %s was nat valid for the listener collection", get_class($listener)));
40: }
41: array_push($this->listeners, $listener);
42: }
43:
44: public function remove($listener)
45: {
46: $index = null;
47: array_walk($this->listeners, function($value, $key) use($listener, &$index)
48: {
49: if($value==$listener)
50: {
51: $index = $key;
52: }
53: });
54: if($index!=null)
55: {
56: unset($this->listeners[$index]);
57: }
58: }
59:
60: /**
61: *
62: * @param closure $callback
63: */
64: public function notify($callback)
65: {
66: Args::callBackArgs($callback, 1, 'callback');
67:
68: foreach($this->listeners as $listener)
69: {
70: $callback($listener);
71: }
72: }
73:
74: /**
75: * @param $listener The listener to validate
76: * @return Boolean true if the listener is valid
77: */
78: protected abstract function validateListener($listener);
79: }
80:
81: ?>
82: