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 package org.eclipse.jetty.monitor.jmx; 15 16 import java.util.Collection; 17 import java.util.Collections; 18 import java.util.Map; 19 import java.util.concurrent.ConcurrentHashMap; 20 21 22 /* ------------------------------------------------------------ */ 23 /** 24 * EventState 25 * 26 * Holds the state of one or more {@link org.eclipse.jetty.monitor.jmx.EventTrigger event trigger} 27 * instances to be used when sending notifications as well as executing the actions 28 */ 29 public class EventState<TYPE> 30 { 31 32 /* ------------------------------------------------------------ */ 33 /** 34 * State 35 * 36 * Holds the state of a single {@link org.eclipse.jetty.monitor.jmx.EventTrigger event trigger} 37 */ 38 public static class TriggerState<TYPE> 39 { 40 private final String _id; 41 private final String _desc; 42 private final TYPE _value; 43 44 /* ------------------------------------------------------------ */ 45 /** 46 * Construct a trigger state 47 * 48 * @param id unique identification string of the associated event trigger 49 * @param desc description of the associated event trigger 50 * @param value effective value of the MXBean attribute (if applicable) 51 */ 52 public TriggerState(String id, String desc, TYPE value) 53 { 54 _id = id; 55 _desc = desc; 56 _value = value; 57 } 58 59 /* ------------------------------------------------------------ */ 60 /** 61 * Retrieve the identification string of associated event trigger 62 * 63 * @return unique identification string 64 */ 65 public String getID() 66 { 67 return _id; 68 } 69 70 /* ------------------------------------------------------------ */ 71 /** 72 * Retrieve the description string set by event trigger 73 * 74 * @return description string 75 */ 76 public String getDescription() 77 { 78 return _desc; 79 } 80 81 /* ------------------------------------------------------------ */ 82 /** 83 * Retrieve the effective value of the MXBean attribute (if applicable) 84 * 85 * @return attribute value 86 */ 87 public TYPE getValue() 88 { 89 return _value; 90 } 91 92 /* ------------------------------------------------------------ */ 93 /** 94 * @return string representation of the state 95 */ 96 public String toString() 97 { 98 StringBuilder result = new StringBuilder(); 99 100 result.append(_desc); 101 result.append('='); 102 result.append(_value); 103 104 return result.toString(); 105 } 106 } 107 108 protected Map<String, TriggerState<TYPE>> _states; 109 110 /* ------------------------------------------------------------ */ 111 /** 112 * Constructs an empty event state 113 */ 114 public EventState() 115 { 116 _states = new ConcurrentHashMap<String, TriggerState<TYPE>>(); 117 } 118 119 120 /* ------------------------------------------------------------ */ 121 /** 122 * Constructs an event state and adds a specified trigger state to it 123 * 124 * @param id unique identification string of the associated event trigger 125 * @param desc description of the associated event trigger 126 * @param value effective value of the MXBean attribute (if applicable) 127 */ 128 public EventState(String id, String desc, TYPE value) 129 { 130 this(); 131 132 add(new TriggerState<TYPE>(id, desc, value)); 133 } 134 135 /* ------------------------------------------------------------ */ 136 /** 137 * Adds a trigger state to the event state 138 * 139 * @param state trigger state to add 140 */ 141 public void add(TriggerState<TYPE> state) 142 { 143 _states.put(state.getID(), state); 144 } 145 146 /* ------------------------------------------------------------ */ 147 /** 148 * Adds a collection of trigger states to the event state 149 * 150 * @param entries collection of trigger states to add 151 */ 152 public void addAll(Collection<TriggerState<TYPE>> entries) 153 { 154 for (TriggerState<TYPE> entry : entries) 155 { 156 add(entry); 157 } 158 } 159 160 /* ------------------------------------------------------------ */ 161 /** 162 * Retrieves a single trigger state 163 * 164 * @param id unique identification string of the event trigger 165 * @return requested trigger state or null if not found 166 */ 167 public TriggerState<TYPE> get(String id) 168 { 169 return _states.get(id); 170 } 171 172 /* ------------------------------------------------------------ */ 173 /** 174 * Retrieves a collection of all trigger states of the event state 175 * 176 * @return collection of the trigger states 177 */ 178 public Collection<TriggerState<TYPE>> values() 179 { 180 return Collections.unmodifiableCollection(_states.values()); 181 } 182 183 /* ------------------------------------------------------------ */ 184 /** 185 * Returns a string representation of the event state 186 * 187 * @return string representation of the event state 188 */ 189 public String toString() 190 { 191 int cnt = 0; 192 StringBuilder result = new StringBuilder(); 193 194 for (TriggerState<TYPE> value : _states.values()) 195 { 196 result.append(cnt++>0?"#":""); 197 result.append(value.toString()); 198 } 199 200 return result.toString(); 201 } 202 }