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.triggers;
20  
21  import java.util.Arrays;
22  import java.util.List;
23  
24  import org.eclipse.jetty.monitor.jmx.EventState;
25  import org.eclipse.jetty.monitor.jmx.EventTrigger;
26  
27  
28  
29  /* ------------------------------------------------------------ */
30  /**
31   * AndEventTrigger 
32   *
33   * EventTrigger aggregation using logical AND operation 
34   * that executes matching of the aggregated event triggers
35   * in left to right order  
36   */
37  public class AndEventTrigger extends EventTrigger
38  {
39      protected final List<EventTrigger> _triggers;
40      
41      /* ------------------------------------------------------------ */
42      /**
43       * Construct an event trigger and associate the list 
44       * of event triggers to be aggregated by this trigger
45       * 
46       * @param triggers list of event triggers to add
47       */
48      public AndEventTrigger(List<EventTrigger> triggers)
49      {
50          _triggers = triggers;
51      }
52  
53      /* ------------------------------------------------------------ */
54      /**
55       * Construct an event trigger and associate the array 
56       * of event triggers to be aggregated by this trigger
57       * 
58       * @param triggers array of event triggers to add
59       */
60      public AndEventTrigger(EventTrigger... triggers)
61      {
62          _triggers = Arrays.asList(triggers);
63      }
64  
65      /* ------------------------------------------------------------ */
66      /**
67       * Verify if the event trigger conditions are in the 
68       * appropriate state for an event to be triggered.
69       * This event trigger will match if all aggregated 
70       * event triggers would return a match.
71       * 
72       * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long)
73       */
74      public boolean match(long timestamp)
75          throws Exception
76      {
77          for(EventTrigger trigger : _triggers)
78          {
79              if (!trigger.match(timestamp))
80                  return false;
81          }
82          return true;
83      }
84  
85      /* ------------------------------------------------------------ */
86      /**
87       * Retrieve the event state associated with specified invocation
88       * of the event trigger match method. This event trigger retrieves
89       * the combined event state of all aggregated event triggers.
90       * 
91       * @param timestamp time stamp associated with invocation
92       * @return event state or null if not found
93       *
94       * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long)
95       */
96      @Override
97      public EventState getState(long timestamp)
98      {
99         EventState state = new EventState();
100        
101        for (EventTrigger trigger : _triggers)
102        {
103            EventState subState = trigger.getState(timestamp);
104            state.addAll(subState.values());
105        }
106        
107        return state;
108     }
109 
110     /* ------------------------------------------------------------ */
111     /**
112      * Returns the string representation of this event trigger
113      * in the format "AND(triger1,trigger2,...)". 
114      * 
115      * @return string representation of the event trigger
116      * 
117      * @see java.lang.Object#toString()
118      */
119     public String toString()
120     {
121         int cnt = 0;
122         StringBuilder result = new StringBuilder();
123         
124         result.append("AND(");
125         for (EventTrigger trigger : _triggers)
126         {
127             result.append(cnt++ > 0 ? "," : "");
128             result.append(trigger);
129         }
130         result.append(')');
131         
132         return result.toString();
133     }
134 }