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