View Javadoc

1   // ========================================================================
2   // Copyright (c) Webtide LLC
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  
15  package org.eclipse.jetty.monitor.triggers;
16  
17  import java.util.Arrays;
18  import java.util.List;
19  
20  import org.eclipse.jetty.monitor.jmx.EventState;
21  import org.eclipse.jetty.monitor.jmx.EventTrigger;
22  
23  
24  /* ------------------------------------------------------------ */
25  /**
26   * AndEventTrigger 
27   *
28   * EventTrigger aggregation using logical AND operation 
29   * that executes matching of the aggregated event triggers
30   * in left to right order  
31   */
32  public class AndEventTrigger extends EventTrigger
33  {
34      protected final List<EventTrigger> _triggers;
35      
36      /* ------------------------------------------------------------ */
37      /**
38       * Construct an event trigger and associate the list 
39       * of event triggers to be aggregated by this trigger
40       * 
41       * @param triggers list of event triggers to add
42       */
43      public AndEventTrigger(List<EventTrigger> triggers)
44      {
45          _triggers = triggers;
46      }
47  
48      /* ------------------------------------------------------------ */
49      /**
50       * Construct an event trigger and associate the array 
51       * of event triggers to be aggregated by this trigger
52       * 
53       * @param triggers array of event triggers to add
54       */
55      public AndEventTrigger(EventTrigger... triggers)
56      {
57          _triggers = Arrays.asList(triggers);
58      }
59  
60      /* ------------------------------------------------------------ */
61      /**
62       * Verify if the event trigger conditions are in the 
63       * appropriate state for an event to be triggered.
64       * This event trigger will match if all aggregated 
65       * event triggers would return a match.
66       * 
67       * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long)
68       */
69      public boolean match(long timestamp)
70          throws Exception
71      {
72          for(EventTrigger trigger : _triggers)
73          {
74              if (!trigger.match(timestamp))
75                  return false;
76          }
77          return true;
78      }
79  
80      /* ------------------------------------------------------------ */
81      /**
82       * Retrieve the event state associated with specified invocation
83       * of the event trigger match method. This event trigger retrieves
84       * the combined event state of all aggregated event triggers.
85       * 
86       * @param timestamp time stamp associated with invocation
87       * @return event state or null if not found
88       *
89       * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long)
90       */
91      @Override
92      public EventState getState(long timestamp)
93      {
94         EventState state = new EventState();
95         
96         for (EventTrigger trigger : _triggers)
97         {
98             EventState subState = trigger.getState(timestamp);
99             state.addAll(subState.values());
100        }
101        
102        return state;
103     }
104 
105     /* ------------------------------------------------------------ */
106     /**
107      * Returns the string representation of this event trigger
108      * in the format "AND(triger1,trigger2,...)". 
109      * 
110      * @return string representation of the event trigger
111      * 
112      * @see java.lang.Object#toString()
113      */
114     public String toString()
115     {
116         int cnt = 0;
117         StringBuilder result = new StringBuilder();
118         
119         result.append("AND(");
120         for (EventTrigger trigger : _triggers)
121         {
122             result.append(cnt++ > 0 ? "," : "");
123             result.append(trigger);
124         }
125         result.append(')');
126         
127         return result.toString();
128     }
129 }