1 /*
2 ~ Copyright 2006-2007 Nicolas De Loof.
3 ~
4 ~ Licensed under the Apache License, Version 2.0 (the "License");
5 ~ you may not use this file except in compliance with the License.
6 ~ You may obtain a copy of the License at
7 ~
8 ~ http://www.apache.org/licenses/LICENSE-2.0
9 ~
10 ~ Unless required by applicable law or agreed to in writing, software
11 ~ distributed under the License is distributed on an "AS IS" BASIS,
12 ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ~ See the License for the specific language governing permissions and
14 ~ limitations under the License.
15 */
16 package org.jmonit.events;
17
18 import java.util.List;
19 import java.util.concurrent.CopyOnWriteArrayList;
20
21 /**
22 * A synchronous implementation of the MonitoringEventBus.
23 * <p>
24 * "Synchronous" means the event is dispatched to and consumed by all listeners
25 * before the emitter can resume processing.
26 *
27 * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
28 */
29 public class DefaultMonitoringEventBus
30 implements MonitoringEventBus
31 {
32 /**
33 * Registered listeners
34 */
35 private List<MonitoringEventListener> listeners =
36 new CopyOnWriteArrayList<MonitoringEventListener>();
37
38 /**
39 * {@inheritDoc}
40 *
41 * @see org.jmonit.events.MonitoringEventBus#addListener(org.jmonit.events.MonitoringEventListener)
42 */
43 public void addListener( final MonitoringEventListener listener )
44 {
45 if ( listener != null )
46 {
47 listeners.add( listener );
48 }
49 }
50
51 /**
52 * {@inheritDoc}
53 *
54 * @see org.jmonit.events.MonitoringEventBus#removeListener(MonitoringEventListener)
55 */
56 public void removeListener( final MonitoringEventListener listener )
57 {
58 listeners.remove( listener );
59 }
60
61 /**
62 * {@inheritDoc}
63 *
64 * @see org.jmonit.events.MonitoringEventBus#hasListener(MonitoringEventListener)
65 */
66 public boolean hasListener( final MonitoringEventListener listener )
67 {
68 return listeners.contains( listener );
69 }
70
71 /**
72 * {@inheritDoc}
73 *
74 * @see org.jmonit.events.MonitoringEventBus#fireMonitoringEvent(org.jmonit.events.MonitoringEvent)
75 */
76 public void fireMonitoringEvent( final MonitoringEvent event )
77 {
78 for ( MonitoringEventListener listener : listeners )
79 {
80 listener.onMonitoringEvent( event );
81 }
82 }
83 }