%line | %branch | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
ca.spaz.cron.summary.SummaryPanel |
|
|
1 | /* |
|
2 | ******************************************************************************* |
|
3 | * Copyright (c) 2005 Chris Rose and AIMedia |
|
4 | * All rights reserved. SummaryPanel and the accompanying materials |
|
5 | * are made available under the terms of the Common Public License v1.0 |
|
6 | * which accompanies this distribution, and is available at |
|
7 | * http://www.eclipse.org/legal/cpl-v10.html |
|
8 | * |
|
9 | * Contributors: |
|
10 | * Chris Rose |
|
11 | *******************************************************************************/ |
|
12 | ||
13 | package ca.spaz.cron.summary; |
|
14 | ||
15 | import java.awt.BorderLayout; |
|
16 | import java.util.*; |
|
17 | ||
18 | import javax.swing.*; |
|
19 | ||
20 | import com.aimedia.ui.IValueListUser; |
|
21 | ||
22 | /** |
|
23 | * An abstract UI class for display of a set of field values. Supports |
|
24 | * arbitrary numbers of rows in 3-column displays. |
|
25 | * |
|
26 | * @deprecated No longer needed for UI. |
|
27 | * @author Chris Rose |
|
28 | */ |
|
29 | public abstract class SummaryPanel extends JPanel { |
|
30 | ||
31 | private Map valueHash; |
|
32 | ||
33 | // private Map valueLabels; |
|
34 | ||
35 | private List values; |
|
36 | ||
37 | private Map valueSuffixes; |
|
38 | ||
39 | // private int columns; |
|
40 | ||
41 | private Comparator fieldOrdering; |
|
42 | ||
43 | private Map valueLabelText; |
|
44 | ||
45 | private SimpleSummaryContent content; |
|
46 | ||
47 | /** |
|
48 | * Construct a summary panel with the default ordering of components. |
|
49 | */ |
|
50 | protected SummaryPanel() { |
|
51 | 0 | this(null); |
52 | 0 | } |
53 | ||
54 | /** |
|
55 | * Construct a summary panel with the specified number of columns and field ordering. |
|
56 | * |
|
57 | * @param fieldOrdering The <code>Comparator</code> to sort the fields with. If null, |
|
58 | * the field default ordering is the order they are added in. |
|
59 | */ |
|
60 | protected SummaryPanel(Comparator fieldOrdering) { |
|
61 | 0 | super(); |
62 | // this.columns = columns; |
|
63 | 0 | valueHash = new HashMap(); |
64 | 0 | values = new ArrayList(); |
65 | // valueLabels = new HashMap(); |
|
66 | 0 | valueSuffixes = new HashMap(); |
67 | 0 | valueLabelText = new HashMap(); |
68 | 0 | this.fieldOrdering = fieldOrdering; |
69 | 0 | this.setBorder(BorderFactory.createEmptyBorder(4,4,4,4)); |
70 | 0 | this.setLayout(new BorderLayout()); |
71 | 0 | } |
72 | ||
73 | /** |
|
74 | * Add a new value field to the component. Sets a default value of "" (empty string) |
|
75 | * for the value. |
|
76 | * |
|
77 | * @param valueName The name to use for both the label and as the key. Must be unique. |
|
78 | * @param valueUnit The unit of measure (will be appended to the output value by default). |
|
79 | */ |
|
80 | protected final void addValueField(String valueName, String valueUnit) { |
|
81 | 0 | addValueField(valueName, valueName, valueUnit); |
82 | 0 | } |
83 | ||
84 | /** |
|
85 | * Add a new value field to the component. Sets a default value of "" (empty string) |
|
86 | * for the value. |
|
87 | * |
|
88 | * @param valueName The name to use for both the label and as the key. Must be unique. |
|
89 | * @param labelText The text to be displayed on the label. |
|
90 | * @param valueUnit The unit of measure (will be appended to the output value by default). |
|
91 | */ |
|
92 | protected final void addValueField(String valueName, String labelText, String valueUnit) { |
|
93 | 0 | values.add(valueName); |
94 | 0 | valueLabelText.put(valueName, labelText); |
95 | 0 | valueSuffixes.put(valueName, valueUnit); |
96 | 0 | setValue(valueName, ""); |
97 | 0 | } |
98 | ||
99 | /** |
|
100 | * Format a <code>Boolean</code> for display. Defaults to toString(), but sublcasses |
|
101 | * can override this behaviour. |
|
102 | * @param valueName The name of the value to be formatted. |
|
103 | * @param value The value to format. |
|
104 | * @return a formatted String for value. |
|
105 | */ |
|
106 | protected String doBooleanString(String valueName, Boolean value) { |
|
107 | 0 | return value.toString() + " " + getUnit(valueName); |
108 | } |
|
109 | ||
110 | /** |
|
111 | * Format a <code>Double</code> for display. Defaults to toString(), but sublcasses |
|
112 | * can override this behaviour. |
|
113 | * @param valueName The name of the value to be formatted. |
|
114 | * @param value The value to format. |
|
115 | * @return a formatted String for value. |
|
116 | */ |
|
117 | protected String doDoubleString(String valueName, Double value) { |
|
118 | 0 | return value.toString() + " " + getUnit(valueName); |
119 | } |
|
120 | ||
121 | /** |
|
122 | * Get the label text for a value. |
|
123 | * |
|
124 | * @param valueName The name of the value to retrieve. |
|
125 | * @param value The actual value to display. |
|
126 | * @return a String with the value name and the value itself formatted according to the |
|
127 | * policy of this component. |
|
128 | */ |
|
129 | protected final String doGetTextForValue(String valueName, Object value) { |
|
130 | 0 | String ret = ""; |
131 | 0 | if (value instanceof Integer) { |
132 | 0 | Integer ival = (Integer) value; |
133 | 0 | ret = doIntegerString(valueName, ival); |
134 | 0 | } else if (value instanceof Double) { |
135 | 0 | Double dval = (Double) value; |
136 | 0 | ret = doDoubleString(valueName, dval); |
137 | 0 | } else if (value instanceof Boolean) { |
138 | 0 | Boolean bval = (Boolean) value; |
139 | 0 | ret = doBooleanString(valueName, bval); |
140 | 0 | } else if (value instanceof String) { |
141 | 0 | String sval = (String) value; |
142 | 0 | ret = doString(valueName, sval); |
143 | 0 | } else { |
144 | 0 | ret = value.toString(); |
145 | } |
|
146 | 0 | return ret; |
147 | } |
|
148 | ||
149 | /** |
|
150 | * Format a <code>Integer</code> for display. Defaults to toString(), but sublcasses |
|
151 | * can override this behaviour. |
|
152 | * @param valueName The name of the value to be formatted. |
|
153 | * @param value The value to format. |
|
154 | * @return a formatted String for value. |
|
155 | */ |
|
156 | protected String doIntegerString(String valueName, Integer value) { |
|
157 | 0 | return value.toString() + " " + getUnit(valueName); |
158 | } |
|
159 | ||
160 | private void doSetValue(String valueName, Object value) { |
|
161 | 0 | valueHash.put(valueName, value); |
162 | // relabelValue(valueName); |
|
163 | 0 | if (content != null) { |
164 | 0 | ((IValueListUser)content).setValueList(getValueList()); |
165 | } |
|
166 | 0 | doValueUpdate(valueName); |
167 | 0 | revalidate(); |
168 | 0 | } |
169 | ||
170 | /** |
|
171 | * Format a <code>String</code> for display. Defaults to unmodified, but sublcasses |
|
172 | * can override this behaviour. |
|
173 | * @param valueName The name of the value to be formatted. |
|
174 | * @param value The value to format. |
|
175 | * @return a formatted String for value. |
|
176 | */ |
|
177 | protected String doString(String valueName, String value) { |
|
178 | 0 | return value + " " + getUnit(valueName); |
179 | } |
|
180 | ||
181 | /** |
|
182 | * get the unit string for the value, with all the fixings. |
|
183 | * @param valueName the value to get the unit for. |
|
184 | * @return the unit stored in valueSuffixes, or an empty string if there was none. |
|
185 | */ |
|
186 | protected final String getUnit(String valueName) { |
|
187 | 0 | String ret = (String) valueSuffixes.get(valueName); |
188 | 0 | return (ret == null) ? "" : ret; |
189 | } |
|
190 | ||
191 | protected final String getText(String valueName) { |
|
192 | 0 | String ret = (String) valueLabelText.get(valueName); |
193 | 0 | return (ret == null) ? "" : ret; |
194 | } |
|
195 | ||
196 | public final String getValueText(String valueName) { |
|
197 | 0 | return doGetTextForValue(valueName, valueHash.get(valueName)); |
198 | } |
|
199 | ||
200 | public final String getLabelText(String valueName) { |
|
201 | 0 | String ret = (String) valueLabelText.get(valueName); |
202 | 0 | if (ret == null) { |
203 | 0 | return valueName; |
204 | } else { |
|
205 | 0 | return ret; |
206 | } |
|
207 | } |
|
208 | ||
209 | /** |
|
210 | * Subclass-specific behaviour on value settings occurs here. By the time this |
|
211 | * is called, the value will already be set, but the UI will not have been updated |
|
212 | * yet. Empty implementations of this are perfectly valid. |
|
213 | * |
|
214 | * @param valueName the name of the value that was updated. |
|
215 | */ |
|
216 | protected abstract void doValueUpdate(String valueName); |
|
217 | ||
218 | /** |
|
219 | * Retrieve a <code>boolean</code> value. |
|
220 | * @param valueName the name of the value to return. |
|
221 | * @return the value stored under <code>valueName</code>. False if no boolean stored. |
|
222 | */ |
|
223 | public final boolean getBooleanValue(String valueName) { |
|
224 | 0 | boolean ret = false; |
225 | 0 | Object o = valueHash.get(valueName); |
226 | 0 | if (o != null && o instanceof Boolean) { |
227 | 0 | ret = ((Boolean) o).booleanValue(); |
228 | } |
|
229 | 0 | return ret; |
230 | } |
|
231 | ||
232 | /** |
|
233 | * Retrieve a <code>double</code> value. |
|
234 | * @param valueName the name of the value to return. |
|
235 | * @return the value stored under <code>valueName</code>. |
|
236 | * <code>Double.NaN</code> if no double stored. |
|
237 | */ |
|
238 | public final double getDoubleValue(String valueName) { |
|
239 | 0 | double ret = Double.NaN; |
240 | 0 | Object o = valueHash.get(valueName); |
241 | 0 | if (o != null && o instanceof Double) { |
242 | 0 | ret = ((Double) o).doubleValue(); |
243 | } |
|
244 | 0 | return ret; |
245 | } |
|
246 | ||
247 | /** |
|
248 | * Retrieve an <code>int</code> value. |
|
249 | * @param valueName the name of the value to return. |
|
250 | * @return the value stored under <code>valueName</code>. |
|
251 | * 0 if no int stored. |
|
252 | */ |
|
253 | public final int getIntValue(String valueName) { |
|
254 | 0 | int ret = 0; |
255 | 0 | Object o = valueHash.get(valueName); |
256 | 0 | if (o != null && o instanceof Integer) { |
257 | 0 | ret = ((Integer) o).intValue(); |
258 | } |
|
259 | 0 | return ret; |
260 | } |
|
261 | ||
262 | /** |
|
263 | * Retrieve a <code>String</code> value. |
|
264 | * @param valueName the name of the value to return. |
|
265 | * @return the value stored under <code>valueName</code>. |
|
266 | * Empty string if no object stored. |
|
267 | */ |
|
268 | public final String getStringValue(String valueName) { |
|
269 | 0 | String ret = ""; |
270 | 0 | Object o = valueHash.get(valueName); |
271 | 0 | if (o != null) { |
272 | 0 | ret = o.toString(); |
273 | } |
|
274 | 0 | return ret; |
275 | } |
|
276 | ||
277 | /** |
|
278 | * @param valueName |
|
279 | */ |
|
280 | // private void relabelValue(String valueName) { |
|
281 | // Object value = valueHash.get(valueName); |
|
282 | // if (null == value) { |
|
283 | // return; |
|
284 | // } |
|
285 | // JLabel lbl = (JLabel) valueLabels.get(valueName); |
|
286 | // if (lbl == null) { |
|
287 | // lbl = new JLabel(); |
|
288 | // lbl.setAlignmentX(JLabel.LEFT_ALIGNMENT); |
|
289 | // valueLabels.put(valueName, lbl); |
|
290 | // } |
|
291 | // lbl.setText(doGetTextForValue(valueName, value)); |
|
292 | // } |
|
293 | ||
294 | /** |
|
295 | * Regenerate the UI components. Call this whenever the return |
|
296 | * value of getContentPane() would change. |
|
297 | */ |
|
298 | protected final void generateContentPane() { |
|
299 | 0 | removeAll(); |
300 | 0 | List intersect = getValueList(); |
301 | 0 | add(getContentPane(intersect), BorderLayout.CENTER); |
302 | 0 | } |
303 | ||
304 | /** |
|
305 | * Get a list of the values in this summary panel. |
|
306 | * @return a <code>List</code> containing all the values in this summary panel. |
|
307 | */ |
|
308 | protected final List getValueList() { |
|
309 | 0 | List intersect = new ArrayList(values); |
310 | 0 | intersect.retainAll(valueHash.keySet()); |
311 | 0 | if (null != fieldOrdering) { |
312 | 0 | Collections.sort(intersect, fieldOrdering); |
313 | } |
|
314 | 0 | return intersect; |
315 | } |
|
316 | ||
317 | /** |
|
318 | * Overridable method to select the actual content panel of the display |
|
319 | * component. |
|
320 | * @param contentValues The list of value tags that will be displayed in |
|
321 | * this component. |
|
322 | * |
|
323 | */ |
|
324 | protected JComponent getContentPane(List contentValues) { |
|
325 | 0 | content = new SimpleSummaryContent(this); |
326 | 0 | content.setValueList(contentValues); |
327 | /* int numlbls = contentValues.size(); |
|
328 | int nrows = numlbls / columns; |
|
329 | if ((numlbls % columns) != 0) { |
|
330 | nrows++; |
|
331 | } |
|
332 | // content.removeAll(); |
|
333 | content.setLayout(new GridBagLayout()); |
|
334 | GridBagConstraints gclbl = new GridBagConstraints(); |
|
335 | GridBagConstraints gcval = new GridBagConstraints(); |
|
336 | gclbl.ipadx=4; |
|
337 | // gclbl.ipady=4; |
|
338 | gcval.ipadx=4; |
|
339 | // gcval.ipady=4; |
|
340 | gclbl.insets=new Insets(2,2,2,6); |
|
341 | gcval.insets=new Insets(2,2,6,2); |
|
342 | gclbl.anchor=GridBagConstraints.WEST; |
|
343 | gcval.anchor=GridBagConstraints.EAST; |
|
344 | gclbl.weightx=1; |
|
345 | gcval.weightx=0.9; |
|
346 | gclbl.gridy = 0; |
|
347 | gcval.gridy = 0; |
|
348 | int col = 0; |
|
349 | for (Iterator iter = contentValues.iterator(); iter.hasNext();) { |
|
350 | String valueName = (String) iter.next(); |
|
351 | JLabel vlbl = (JLabel) valueLabels.get(valueName); |
|
352 | content.add(makeRLabel(valueName), gclbl); |
|
353 | content.add(vlbl, gcval); |
|
354 | col+=2; |
|
355 | if (col % (2 * columns) == 0) { |
|
356 | gcval.gridy++; |
|
357 | gclbl.gridy++; |
|
358 | } |
|
359 | }*/ |
|
360 | 0 | return content; |
361 | } |
|
362 | ||
363 | /** |
|
364 | * Purge a value from the component. Removes all versions of it. |
|
365 | * @param valueName |
|
366 | */ |
|
367 | protected final void removeValueField(String valueName) { |
|
368 | 0 | values.remove(valueName); |
369 | 0 | valueSuffixes.remove(valueName); |
370 | // valueLabels.remove(valueName); |
|
371 | 0 | valueHash.remove(valueName); |
372 | // generateContentPane(); |
|
373 | 0 | } |
374 | ||
375 | /** |
|
376 | * Set a <code>boolean</code> value in the value set. |
|
377 | * @param valueName the name of the value to set. |
|
378 | * @param value the value to set. |
|
379 | */ |
|
380 | public final void setValue(String valueName, boolean value) { |
|
381 | 0 | doSetValue(valueName, Boolean.valueOf(value)); |
382 | 0 | } |
383 | ||
384 | /** |
|
385 | * Set a <code>double</code> value in the value set. |
|
386 | * @param valueName the name of the value to set. |
|
387 | * @param value the value to set. |
|
388 | */ |
|
389 | public final void setValue(String valueName, double value) { |
|
390 | 0 | doSetValue(valueName, new Double(value)); |
391 | 0 | } |
392 | ||
393 | /** |
|
394 | * Set an <code>int</code> value in the value set. |
|
395 | * @param valueName the name of the value to set. |
|
396 | * @param value the value to set. |
|
397 | */ |
|
398 | ||
399 | public final void setValue(String valueName, int value) { |
|
400 | 0 | doSetValue(valueName, new Integer(value)); |
401 | 0 | } |
402 | ||
403 | /** |
|
404 | * Set a <code>String</code> value in the value set. |
|
405 | * @param valueName the name of the value to set. |
|
406 | * @param value the value to set. |
|
407 | */ |
|
408 | public final void setValue(String valueName, String value) { |
|
409 | 0 | doSetValue(valueName, value); |
410 | 0 | } |
411 | ||
412 | } |
This report is generated by jcoverage, Maven and Maven JCoverage Plugin. |