KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sape > carbon > services > console > AttributePanel


1 package org.sape.carbon.services.console;
2
3 import java.beans.PropertyChangeEvent JavaDoc;
4 import java.math.BigDecimal JavaDoc;
5 import java.math.BigInteger JavaDoc;
6 import java.util.HashMap JavaDoc;
7 import java.util.HashSet JavaDoc;
8 import java.util.Map JavaDoc;
9 import java.util.Set JavaDoc;
10
11 import javax.management.Attribute JavaDoc;
12 import javax.management.MBeanAttributeInfo JavaDoc;
13 import javax.management.MBeanServer JavaDoc;
14 import javax.management.ObjectName JavaDoc;
15 import javax.swing.JButton JavaDoc;
16 import javax.swing.JLabel JavaDoc;
17 import javax.swing.JPanel JavaDoc;
18 import javax.swing.JTextArea JavaDoc;
19 import javax.swing.JTextField JavaDoc;
20 import javax.swing.border.CompoundBorder JavaDoc;
21 import javax.swing.border.TitledBorder JavaDoc;
22 import javax.swing.event.CellEditorListener JavaDoc;
23 import javax.swing.event.ChangeEvent JavaDoc;
24
25 import org.sape.carbon.core.config.type.ConfigurationTypeException;
26 import org.sape.carbon.core.config.type.ConfigurationTypeService;
27 import org.sape.carbon.core.config.type.ConfigurationTypeServiceFactory;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31
32 /**
33  * <P>This class represents one actionable attribute on an MBean. It provides
34  * a view into its metadata and a mechanism for altering the attribute value.
35  * </P>
36  *
37  * Copyright 2002 Sapient
38  * @since carbon 1.0
39  * @author Greg Hinkle, March 2002
40  * @version $Revision: 1.6 $($Author: atayal $ / $Date: 2003/04/29 13:40:31 $)
41  */

42 public class AttributePanel extends JPanel JavaDoc {
43
44     public Log log = LogFactory.getLog(this.getClass());
45
46     private ObjectName JavaDoc objectName;
47     private MBeanAttributeInfo JavaDoc attributeInfo;
48     private MBeanServer JavaDoc server;
49
50     private boolean dirty = false;
51     private Throwable JavaDoc currentError;
52
53     private AttributeCellEditor editor;
54
55     public AttributePanel(ObjectName JavaDoc objectName, MBeanAttributeInfo JavaDoc attributeInfo, MBeanServer JavaDoc server) {
56         this.objectName = objectName;
57         this.attributeInfo = attributeInfo;
58         this.server = server;
59
60         initComponents();
61
62         ((TitledBorder JavaDoc)((CompoundBorder JavaDoc)this.getBorder()).getInsideBorder()).setTitle(this.attributeInfo.getName());
63
64         refresh();
65     }
66
67     public void refresh() {
68         Object JavaDoc value = null;
69         try {
70             this.descriptionValue.setText(this.attributeInfo.getDescription());
71             value = this.server.getAttribute(objectName,this.attributeInfo.getName());
72
73             ConfigurationTypeService typeService =
74                 ConfigurationTypeServiceFactory.getInstance();
75
76             Class JavaDoc typeClass = AttributePanel.findType(this.attributeInfo.getType());
77
78             this.typeValue.setText(getTypeName(typeClass));
79
80             AttributeCellEditor typeEditor =
81                 new AttributeCellEditor(typeClass, value, attributeInfo.isWritable()); //getTypeEditor(typeClass, value, attributeInfo.isWritable());
82

83             if (typeEditor != null) {
84                 this.editor = typeEditor;
85                 typeEditor.addCellEditorListener(new CellEditorListener JavaDoc() {
86                     public void editingStopped(ChangeEvent JavaDoc e) {
87                         System.out.println("Stopped editing " + attributeInfo.getName());
88                         dirty = true;
89                         updateInfoStatus();
90                     }
91                     public void editingCanceled(ChangeEvent JavaDoc e) { }
92                 });
93
94                 this.editingPanel.add(typeEditor.getComponent());
95             }
96
97             if (AttributePanel.GRAPH_TYPES.contains(typeClass)) {
98                 this.graphButton.setEnabled(true);
99                 this.shouldGraphCheckbox.setEnabled(true);
100             } else {
101                 this.graphingPanel.setVisible(false);
102                 this.graphButton.setEnabled(false);
103                 this.shouldGraphCheckbox.setEnabled(false);
104             }
105
106             updateInfoStatus();
107
108         } catch (UnsupportedOperationException JavaDoc uoe) {
109             this.editingPanel.add(new JTextField JavaDoc((value==null)?"null":value.toString()));
110         } catch (Exception JavaDoc e) {
111             SingletonExceptionViewer.getInstance().addException(e);
112         }
113     }
114
115
116     public String JavaDoc getTypeName(Class JavaDoc typeClass) {
117
118         if (typeClass.isArray()) {
119             return "Array of (" + getTypeName(typeClass.getComponentType()) + ")";
120         } else {
121             String JavaDoc name = typeClass.getName();
122             return name.substring(name.lastIndexOf('.')+1);
123         }
124     }
125
126     private static final Set JavaDoc GRAPH_TYPES = new HashSet JavaDoc();
127     static {
128         GRAPH_TYPES.add(Short.TYPE);
129         GRAPH_TYPES.add(Short JavaDoc.class);
130         GRAPH_TYPES.add(Integer.TYPE);
131         GRAPH_TYPES.add(Integer JavaDoc.class);
132         GRAPH_TYPES.add(Long.TYPE);
133         GRAPH_TYPES.add(Long JavaDoc.class);
134         GRAPH_TYPES.add(Float.TYPE);
135         GRAPH_TYPES.add(Float JavaDoc.class);
136         GRAPH_TYPES.add(Double.TYPE);
137         GRAPH_TYPES.add(Double JavaDoc.class);
138         GRAPH_TYPES.add(BigInteger JavaDoc.class);
139         GRAPH_TYPES.add(BigDecimal JavaDoc.class);
140     }
141
142     private static final Map JavaDoc TYPES = new HashMap JavaDoc();
143     static {
144         TYPES.put(Boolean.TYPE.getName(), Boolean.TYPE);
145         TYPES.put(Character.TYPE.getName(), Character.TYPE);
146         TYPES.put(Byte.TYPE.getName(), Byte.TYPE);
147         TYPES.put(Short.TYPE.getName(), Short.TYPE);
148         TYPES.put(Integer.TYPE.getName(), Integer.TYPE);
149         TYPES.put(Long.TYPE.getName(), Long.TYPE);
150         TYPES.put(Float.TYPE.getName(), Float.TYPE);
151         TYPES.put(Double.TYPE.getName(), Double.TYPE);
152         TYPES.put(Void.TYPE.getClass(), Void.TYPE);
153     }
154
155     private static Class JavaDoc findType(String JavaDoc className) throws ClassNotFoundException JavaDoc {
156
157         if (TYPES.containsKey(className)) {
158             return (Class JavaDoc) TYPES.get(className);
159         } else {
160             return Class.forName(className, true, AttributePanel.class.getClassLoader());
161         }
162     }
163
164     public MBeanAttributeInfo JavaDoc getAttributeInfo() {
165         return this.attributeInfo;
166     }
167
168     public String JavaDoc getFieldValue() {
169         return this.editor.getCellEditorValue().toString();
170     }
171
172     public boolean isShouldGraph() {
173         return this.shouldGraphCheckbox.isSelected();
174     }
175
176     private void updateInfoStatus() {
177         this.infoPanel.removeAll();
178         if (!this.attributeInfo.isWritable()) {
179             JLabel JavaDoc lock = new JLabel JavaDoc();
180             try {
181                 lock.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/rsrc/icons/Lock24.gif")));
182             } catch (Exception JavaDoc e) { e.printStackTrace(); }
183             this.infoPanel.add(lock);
184         }
185
186         if (this.dirty) {
187             this.infoPanel.add(
188                 new JLabel JavaDoc("Dirty"));
189
190             JButton JavaDoc setAttributeButton = new JButton JavaDoc("Set");
191             setAttributeButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
192                 public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
193                     setValueButtonActionPerformed(evt);
194                 }
195             });
196             this.infoPanel.add(setAttributeButton);
197
198         }
199         if (this.currentError!=null) {
200             this.infoPanel.add(
201                 new JTextArea JavaDoc(this.currentError.toString()));
202         }
203         doLayout();
204         this.repaint();
205
206     }
207
208     /** This method is called from within the constructor to
209      * initialize the form.
210      * WARNING: Do NOT modify this code. The content of this method is
211      * always regenerated by the Form Editor.
212      */

213     private void initComponents() {//GEN-BEGIN:initComponents
214
java.awt.GridBagConstraints JavaDoc gridBagConstraints;
215
216         typeLabel = new javax.swing.JLabel JavaDoc();
217         typeValue = new javax.swing.JLabel JavaDoc();
218         valueLabel = new javax.swing.JLabel JavaDoc();
219         descriptionValue = new javax.swing.JTextArea JavaDoc();
220         graphingPanel = new javax.swing.JPanel JavaDoc();
221         graphButton = new javax.swing.JButton JavaDoc();
222         shouldGraphCheckbox = new javax.swing.JCheckBox JavaDoc();
223         infoPanel = new javax.swing.JPanel JavaDoc();
224         editingPanel = new javax.swing.JPanel JavaDoc();
225
226         setLayout(new java.awt.GridBagLayout JavaDoc());
227
228         setBorder(new javax.swing.border.CompoundBorder JavaDoc(new javax.swing.border.EmptyBorder JavaDoc(new java.awt.Insets JavaDoc(4, 4, 4, 4)), new javax.swing.border.TitledBorder JavaDoc("Attribute Name")));
229         typeLabel.setText("Type");
230         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
231         gridBagConstraints.gridx = 0;
232         gridBagConstraints.gridy = 2;
233         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
234         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 8, 0, 3);
235         add(typeLabel, gridBagConstraints);
236
237         typeValue.setFont(new java.awt.Font JavaDoc("Courier New", 0, 12));
238         typeValue.setText("jLabel4");
239         typeValue.setMaximumSize(new java.awt.Dimension JavaDoc(400, 16));
240         typeValue.setMinimumSize(new java.awt.Dimension JavaDoc(49, 16));
241         typeValue.setPreferredSize(new java.awt.Dimension JavaDoc(220, 16));
242         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
243         gridBagConstraints.gridx = 1;
244         gridBagConstraints.gridy = 2;
245         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
246         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
247         gridBagConstraints.weightx = 1.0;
248         gridBagConstraints.insets = new java.awt.Insets JavaDoc(1, 2, 1, 2);
249         add(typeValue, gridBagConstraints);
250
251         valueLabel.setText("Value");
252         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
253         gridBagConstraints.gridx = 0;
254         gridBagConstraints.gridy = 3;
255         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
256         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 8, 4, 3);
257         add(valueLabel, gridBagConstraints);
258
259         descriptionValue.setBackground(new java.awt.Color JavaDoc(204, 204, 204));
260         descriptionValue.setEditable(false);
261         descriptionValue.setLineWrap(true);
262         descriptionValue.setText("The attribute description goes here");
263         descriptionValue.setToolTipText("The attribute description goes here");
264         descriptionValue.setWrapStyleWord(true);
265         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
266         gridBagConstraints.gridx = 0;
267         gridBagConstraints.gridy = 1;
268         gridBagConstraints.gridwidth = 2;
269         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
270         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
271         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 11, 0, 0);
272         add(descriptionValue, gridBagConstraints);
273
274         graphingPanel.setBorder(new javax.swing.border.TitledBorder JavaDoc("Graphing"));
275         graphButton.setFont(new java.awt.Font JavaDoc("Dialog", 0, 8));
276         graphButton.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/rsrc/icons/Graph24.gif")));
277         graphButton.setMargin(new java.awt.Insets JavaDoc(2, 2, 2, 2));
278         graphButton.setMaximumSize(new java.awt.Dimension JavaDoc(43, 28));
279         graphButton.setMinimumSize(new java.awt.Dimension JavaDoc(43, 20));
280         graphButton.setPreferredSize(new java.awt.Dimension JavaDoc(26, 26));
281         graphButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
282             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
283                 graphButtonActionPerformed(evt);
284             }
285         });
286
287         graphingPanel.add(graphButton);
288
289         shouldGraphCheckbox.setFont(new java.awt.Font JavaDoc("Dialog", 0, 12));
290         shouldGraphCheckbox.setText("Multi");
291         shouldGraphCheckbox.addActionListener(new java.awt.event.ActionListener JavaDoc() {
292             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
293                 shouldGraphCheckboxActionPerformed(evt);
294             }
295         });
296
297         graphingPanel.add(shouldGraphCheckbox);
298
299         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
300         gridBagConstraints.gridx = 2;
301         gridBagConstraints.gridy = 0;
302         gridBagConstraints.gridheight = 4;
303         gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
304         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
305         add(graphingPanel, gridBagConstraints);
306
307         infoPanel.setLayout(new java.awt.FlowLayout JavaDoc(java.awt.FlowLayout.LEFT));
308
309         infoPanel.setBackground(new java.awt.Color JavaDoc(204, 204, 204));
310         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
311         gridBagConstraints.gridx = 1;
312         gridBagConstraints.gridy = 0;
313         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
314         add(infoPanel, gridBagConstraints);
315
316         editingPanel.setLayout(new java.awt.BorderLayout JavaDoc());
317
318         editingPanel.setMinimumSize(null);
319         editingPanel.setPreferredSize(null);
320         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
321         gridBagConstraints.gridx = 1;
322         gridBagConstraints.gridy = 3;
323         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
324         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
325         gridBagConstraints.insets = new java.awt.Insets JavaDoc(1, 3, 3, 0);
326         add(editingPanel, gridBagConstraints);
327
328     }//GEN-END:initComponents
329

330     private void setValueButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_setValueButtonActionPerformed
331
// Add your handling code here:
332
String JavaDoc value = getFieldValue();
333
334         try {
335             this.currentError = null;
336             Class JavaDoc type =
337                 AttributePanel.findType(this.attributeInfo.getType());
338                 //Class.forName(this.attributeInfo.getType());
339

340             ConfigurationTypeService typeService =
341                 ConfigurationTypeServiceFactory.getInstance();
342
343             Object JavaDoc objValue = typeService.toObject(type,value);
344
345             this.server.setAttribute(this.objectName,
346                 new Attribute JavaDoc(this.attributeInfo.getName(), objValue));
347
348             this.dirty = false;
349             this.updateInfoStatus();
350             log.trace(
351                 "MBean Attribute [" +
352                 this.attributeInfo.getName() +
353                 "] set to [" +
354                 objValue + "]");
355         } catch (ClassNotFoundException JavaDoc cnfe) {
356             cnfe.printStackTrace();
357         } catch (ConfigurationTypeException cte) {
358             cte.printStackTrace();
359             this.currentError = cte;
360         } catch (Exception JavaDoc e) {
361             e.printStackTrace();
362             this.currentError = e;
363         }
364         doLayout();
365     }//GEN-LAST:event_setValueButtonActionPerformed
366

367     public void valueTextFieldPropertyChange(PropertyChangeEvent JavaDoc evt) {
368         this.dirty = true;
369         updateInfoStatus();
370         doLayout();
371         repaint();
372     }
373
374     private void shouldGraphCheckboxActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_shouldGraphCheckboxActionPerformed
375
// Add your handling code here:
376
}//GEN-LAST:event_shouldGraphCheckboxActionPerformed
377

378     private void graphButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_graphButtonActionPerformed
379
// Add your handling code here:
380
AttributeGraph attrGraph =
381             new AttributeGraph(this.objectName, this.attributeInfo, this.server);
382         attrGraph.show();
383
384     }//GEN-LAST:event_graphButtonActionPerformed
385

386
387     // Variables declaration - do not modify//GEN-BEGIN:variables
388
private javax.swing.JCheckBox JavaDoc shouldGraphCheckbox;
389     private javax.swing.JPanel JavaDoc infoPanel;
390     private javax.swing.JButton JavaDoc graphButton;
391     private javax.swing.JLabel JavaDoc typeLabel;
392     private javax.swing.JLabel JavaDoc typeValue;
393     private javax.swing.JTextArea JavaDoc descriptionValue;
394     private javax.swing.JPanel JavaDoc graphingPanel;
395     private javax.swing.JPanel JavaDoc editingPanel;
396     private javax.swing.JLabel JavaDoc valueLabel;
397     // End of variables declaration//GEN-END:variables
398

399 }
400
Popular Tags