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 }