View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 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.triggers;
20  
21  import java.util.ArrayList;
22  import java.util.Arrays;
23  import java.util.List;
24  
25  import org.eclipse.jetty.monitor.jmx.EventState;
26  import org.eclipse.jetty.monitor.jmx.EventTrigger;
27  
28  
29  /* ------------------------------------------------------------ */
30  /**
31   * AggregateEventTrigger
32   * 
33   * EventTrigger aggregation that executes every aggregated event
34   * triggers in left to right order, and returns match if any one
35   * of them have returned match.   
36   */
37  public class AggregateEventTrigger extends EventTrigger
38  {
39      protected final List<EventTrigger> _triggers;
40  
41      /* ------------------------------------------------------------ */
42      /**
43       * Construct an event trigger
44       */
45      public AggregateEventTrigger()
46      {
47          _triggers = new ArrayList<EventTrigger>();
48      }
49      
50      /* ------------------------------------------------------------ */
51      /**
52       * Construct an event trigger and associate the list 
53       * of event triggers to be aggregated by this trigger
54       * 
55       * @param triggers list of event triggers to add
56       */
57      public AggregateEventTrigger(List<EventTrigger> triggers)
58      {
59          _triggers = new ArrayList<EventTrigger>(triggers);
60      }
61  
62      /* ------------------------------------------------------------ */
63      /**
64       * Construct an event trigger and associate the array 
65       * of event triggers to be aggregated by this trigger
66       * 
67       * @param triggers list of event triggers to add
68       */
69      public AggregateEventTrigger(EventTrigger... triggers)
70      {
71          _triggers = Arrays.asList(triggers);
72      }
73      
74      /* ------------------------------------------------------------ */
75      /**
76       * @param trigger
77       */
78      public void add(EventTrigger trigger)
79      {
80          _triggers.add(trigger);
81      }
82      
83      /* ------------------------------------------------------------ */
84      /**
85       * @param triggers
86       */
87      public void addAll(List<EventTrigger> triggers)
88      {
89          _triggers.addAll(triggers);
90      }
91          
92      /* ------------------------------------------------------------ */
93      /**
94       * @param triggers
95       */
96      public void addAll(EventTrigger... triggers)
97      {
98          _triggers.addAll(Arrays.asList(triggers));
99      }
100     
101     /* ------------------------------------------------------------ */
102     /**
103      * Retrieve the event state associated with specified invocation
104      * of the event trigger match method. This event trigger retrieves
105      * the combined event state of all aggregated event triggers.
106      * 
107      * @param timestamp time stamp associated with invocation
108      * @return event state or null if not found
109      *
110      * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long)
111      */
112     @Override
113     public EventState getState(long timestamp)
114     {
115         EventState state = new EventState();
116         
117         for (EventTrigger trigger : _triggers)
118         {
119             EventState subState = trigger.getState(timestamp);
120             if (subState != null)
121             {
122                 state.addAll(subState.values());
123             }
124         }
125         
126         return state;
127     }
128 
129     /* ------------------------------------------------------------ */
130     /**
131      * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long)
132      */
133     @Override
134     public boolean match(long timestamp) throws Exception
135     {
136         boolean result = false;
137         for(EventTrigger trigger : _triggers)
138         {
139             result = trigger.match(timestamp) ? true : result;
140         }
141         return true;
142     }
143 
144     /* ------------------------------------------------------------ */
145     /**
146      * Returns the string representation of this event trigger
147      * in the format "AND(triger1,trigger2,...)". 
148      * 
149      * @return string representation of the event trigger
150      * 
151      * @see java.lang.Object#toString()
152      */
153     public String toString()
154     {
155         int cnt = 0;
156         StringBuilder result = new StringBuilder();
157         
158         result.append("ANY(");
159         for (EventTrigger trigger : _triggers)
160         {
161             result.append(cnt++ > 0 ? "," : "");
162             result.append(trigger);
163         }
164         result.append(')');
165         
166         return result.toString();
167     }
168 }