1 // 2 // ======================================================================== 3 // Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. 4 // ------------------------------------------------------------------------ 5 // All rights reserved. This program and the accompanying materials 6 // are made available under the terms of the Eclipse Public License v1.0 7 // and Apache License v2.0 which accompanies this distribution. 8 // 9 // The Eclipse Public License is available at 10 // http://www.eclipse.org/legal/epl-v10.html 11 // 12 // The Apache License v2.0 is available at 13 // http://www.opensource.org/licenses/apache2.0.php 14 // 15 // You may elect to redistribute this code under either of these licenses. 16 // ======================================================================== 17 // 18 19 20 package org.eclipse.jetty.monitor.triggers; 21 22 import java.util.ArrayList; 23 import java.util.Arrays; 24 import java.util.List; 25 26 import org.eclipse.jetty.monitor.jmx.EventState; 27 import org.eclipse.jetty.monitor.jmx.EventTrigger; 28 29 30 /* ------------------------------------------------------------ */ 31 /** 32 * AggregateEventTrigger 33 * 34 * EventTrigger aggregation that executes every aggregated event 35 * triggers in left to right order, and returns match if any one 36 * of them have returned match. 37 */ 38 public class AggregateEventTrigger extends EventTrigger 39 { 40 protected final List<EventTrigger> _triggers; 41 42 /* ------------------------------------------------------------ */ 43 /** 44 * Construct an event trigger 45 */ 46 public AggregateEventTrigger() 47 { 48 _triggers = new ArrayList<EventTrigger>(); 49 } 50 51 /* ------------------------------------------------------------ */ 52 /** 53 * Construct an event trigger and associate the list 54 * of event triggers to be aggregated by this trigger 55 * 56 * @param triggers list of event triggers to add 57 */ 58 public AggregateEventTrigger(List<EventTrigger> triggers) 59 { 60 _triggers = new ArrayList<EventTrigger>(triggers); 61 } 62 63 /* ------------------------------------------------------------ */ 64 /** 65 * Construct an event trigger and associate the array 66 * of event triggers to be aggregated by this trigger 67 * 68 * @param triggers list of event triggers to add 69 */ 70 public AggregateEventTrigger(EventTrigger... triggers) 71 { 72 _triggers = Arrays.asList(triggers); 73 } 74 75 /* ------------------------------------------------------------ */ 76 /** 77 * @param trigger 78 */ 79 public void add(EventTrigger trigger) 80 { 81 _triggers.add(trigger); 82 } 83 84 /* ------------------------------------------------------------ */ 85 /** 86 * @param triggers 87 */ 88 public void addAll(List<EventTrigger> triggers) 89 { 90 _triggers.addAll(triggers); 91 } 92 93 /* ------------------------------------------------------------ */ 94 /** 95 * @param triggers 96 */ 97 public void addAll(EventTrigger... triggers) 98 { 99 _triggers.addAll(Arrays.asList(triggers)); 100 } 101 102 /* ------------------------------------------------------------ */ 103 /** 104 * Retrieve the event state associated with specified invocation 105 * of the event trigger match method. This event trigger retrieves 106 * the combined event state of all aggregated event triggers. 107 * 108 * @param timestamp time stamp associated with invocation 109 * @return event state or null if not found 110 * 111 * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long) 112 */ 113 @Override 114 public EventState getState(long timestamp) 115 { 116 EventState state = new EventState(); 117 118 for (EventTrigger trigger : _triggers) 119 { 120 EventState subState = trigger.getState(timestamp); 121 if (subState != null) 122 { 123 state.addAll(subState.values()); 124 } 125 } 126 127 return state; 128 } 129 130 /* ------------------------------------------------------------ */ 131 /** 132 * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long) 133 */ 134 @Override 135 public boolean match(long timestamp) throws Exception 136 { 137 boolean result = false; 138 for(EventTrigger trigger : _triggers) 139 { 140 result = trigger.match(timestamp) ? true : result; 141 } 142 return true; 143 } 144 145 /* ------------------------------------------------------------ */ 146 /** 147 * Returns the string representation of this event trigger 148 * in the format "AND(triger1,trigger2,...)". 149 * 150 * @return string representation of the event trigger 151 * 152 * @see java.lang.Object#toString() 153 */ 154 public String toString() 155 { 156 int cnt = 0; 157 StringBuilder result = new StringBuilder(); 158 159 result.append("ANY("); 160 for (EventTrigger trigger : _triggers) 161 { 162 result.append(cnt++ > 0 ? "," : ""); 163 result.append(trigger); 164 } 165 result.append(')'); 166 167 return result.toString(); 168 } 169 }