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 package org.eclipse.jetty.monitor.triggers;
15
16 import java.util.Arrays;
17 import java.util.List;
18
19 import org.eclipse.jetty.monitor.jmx.EventState;
20 import org.eclipse.jetty.monitor.jmx.EventTrigger;
21
22
23 /* ------------------------------------------------------------ */
24 /**
25 * AndEventTrigger
26 *
27 * EventTrigger aggregation using logical OR operation
28 * that executes matching of the aggregated event triggers
29 * in left to right order
30 */
31 public class OrEventTrigger
32 extends EventTrigger
33 {
34 private 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 OrEventTrigger(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 OrEventTrigger(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 any of 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 true;
76 }
77 return false;
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 @SuppressWarnings("unchecked")
93 public EventState getState(long timestamp)
94 {
95 EventState state = new EventState();
96
97 for (EventTrigger trigger : _triggers)
98 {
99 EventState subState = trigger.getState(timestamp);
100 if (subState!=null)
101 {
102 state.addAll(subState.values());
103 }
104 }
105
106 return state;
107 }
108
109 /* ------------------------------------------------------------ */
110 /**
111 * Returns the string representation of this event trigger
112 * in the format "OR(triger1,trigger2,...)".
113 *
114 * @return string representation of the event trigger
115 *
116 * @see java.lang.Object#toString()
117 */
118 public String toString()
119 {
120 int cnt = 0;
121 StringBuilder result = new StringBuilder();
122
123 result.append("OR(");
124 for (EventTrigger trigger : _triggers)
125 {
126 result.append(cnt++ > 0 ? "," : "");
127 result.append(trigger);
128 }
129 result.append(')');
130
131 return result.toString();
132 }
133 }