View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.monitor.jmx;
20  
21  import java.util.Collection;
22  import java.util.Collections;
23  import java.util.HashSet;
24  import java.util.Set;
25  
26  
27  
28  /* ------------------------------------------------------------ */
29  /**
30   * NotifierGroup
31   * 
32   * This class allows for grouping of the event notifiers 
33   */
34  public class NotifierGroup implements EventNotifier
35  {
36      private Set<EventNotifier> _group;
37  
38      /* ------------------------------------------------------------ */
39      /**
40       * Create a notifier group
41       */
42      public NotifierGroup()
43      {
44          _group = new HashSet<EventNotifier>();
45      }
46      
47      /* ------------------------------------------------------------ */
48      /**
49       * Retrieve all event notifier associated with this group
50       * 
51       * @return collection of event notifiers
52       */    
53      public Collection<EventNotifier> getNotifiers()
54      {
55          return Collections.unmodifiableSet(_group);
56      }
57  
58      /* ------------------------------------------------------------ */
59      /**
60       * Add specified event notifier to event notifier group
61       * 
62       * @param notifier event notifier to be added
63       * @return true if successful
64       */
65      public boolean addNotifier(EventNotifier notifier)
66      {
67          return _group.add(notifier);
68      }
69      
70      /* ------------------------------------------------------------ */
71      /**
72       * Add a collection of event notifiers to event notifier group
73       * 
74       * @param notifiers collection of event notifiers to be added
75       * @return true if successful
76       */
77      public boolean addNotifiers(Collection<EventNotifier> notifiers)
78      {
79          return _group.addAll(notifiers);
80      }
81      
82      /* ------------------------------------------------------------ */
83      /**
84       * Remove event notifier from event notifier group
85       * 
86       * @param notifier event notifier to be removed
87       * @return true if successful
88       */
89      public boolean removeNotifier(EventNotifier notifier)
90      {
91          return _group.remove(notifier);
92      }
93   
94      /* ------------------------------------------------------------ */
95      /**
96       * Remove a collection of event notifiers from event notifier group
97       * 
98       * @param notifiers collection of event notifiers to be removed
99       * @return true if successful
100      */
101     public boolean removeNotifiers(Collection<EventNotifier> notifiers)
102     {
103         return _group.removeAll(notifiers);
104     }
105 
106     /* ------------------------------------------------------------ */
107     /**
108      * Invoke the notify() method of each of the notifiers in group
109      * 
110      * @see org.eclipse.jetty.monitor.jmx.EventNotifier#notify(org.eclipse.jetty.monitor.jmx.EventTrigger, org.eclipse.jetty.monitor.jmx.EventState, long)
111      */
112     public void notify(EventTrigger trigger, EventState<?> state, long timestamp)
113     {
114         for (EventNotifier notifier: _group)
115         {
116             notifier.notify(trigger, state, timestamp);
117         }
118     }
119 }