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 }