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