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 }