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