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