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.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 * 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 }