KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > panoptes > view > swing > configurator > JavaBeanInspector


1 package net.sf.panoptes.view.swing.configurator;
2
3 import java.awt.Component JavaDoc;
4 import java.awt.event.ActionEvent JavaDoc;
5 import java.awt.event.ActionListener JavaDoc;
6 import java.beans.BeanInfo JavaDoc;
7 import java.beans.Introspector JavaDoc;
8 import java.beans.MethodDescriptor JavaDoc;
9 import java.beans.PropertyDescriptor JavaDoc;
10 import java.lang.reflect.Method JavaDoc;
11 import java.util.ArrayList JavaDoc;
12 import java.util.Map JavaDoc;
13
14 import javax.management.MBeanOperationInfo JavaDoc;
15 import javax.swing.DefaultCellEditor JavaDoc;
16 import javax.swing.JButton JavaDoc;
17 import javax.swing.JCheckBox JavaDoc;
18 import javax.swing.JComponent JavaDoc;
19 import javax.swing.JFrame JavaDoc;
20 import javax.swing.JLabel JavaDoc;
21 import javax.swing.JPanel JavaDoc;
22 import javax.swing.JScrollPane JavaDoc;
23 import javax.swing.JTabbedPane JavaDoc;
24 import javax.swing.JTable JavaDoc;
25 import javax.swing.UIManager JavaDoc;
26 import javax.swing.table.AbstractTableModel JavaDoc;
27 import javax.swing.table.TableCellRenderer JavaDoc;
28 import javax.swing.table.TableColumn JavaDoc;
29
30 import net.sf.panoptes.component.jmx.model.MBeanLinkNode;
31 import net.sf.panoptes.model.node.Node;
32 import net.sf.panoptes.swing.DefaultFormBuilder;
33 import net.sf.panoptes.swing.Operation;
34 import net.sf.panoptes.view.swing.MainWindowSwing;
35 import net.sf.panoptes.view.swing.editors.MethodInvocationDialog;
36 import net.sf.panoptes.view.swing.tables.ContextTableModel;
37 import net.sf.panoptes.view.swing.tables.DefaultNodeTableCellRenderer;
38
39 import org.apache.commons.beanutils.PropertyUtils;
40 import org.apache.commons.logging.Log;
41 import org.apache.commons.logging.LogFactory;
42
43 import com.jgoodies.forms.layout.FormLayout;
44 //import com.sun.org.omg.CORBA.OperationDescription;
45

46 /**
47  * MBeanInspector.java
48  *
49  * Simple NodeConfigurator for MBeanComponent introspection.
50  *
51  * @see net.sf.panoptes.module.jmx.MBeanComponent
52  * @author Dag Liodden
53  * @version 0.1
54  */

55 public class JavaBeanInspector implements SwingConfigurator {
56
57     private Object JavaDoc bean = null;
58     private BeanInfo JavaDoc beanInfo;
59     
60     JTable JavaDoc opTable;
61     JTable JavaDoc attTable;
62     JPanel JavaDoc panel = null;
63     private ContextTableModel physicalContextModel;
64     private JLabel JavaDoc objectNameLabel = new JLabel JavaDoc();
65     private JLabel JavaDoc mbeanClassLabel = new JLabel JavaDoc();
66
67     private ArrayList JavaDoc contextKeys = new ArrayList JavaDoc();
68
69     private Log log = LogFactory.getLog(getClass());
70     private JFrame JavaDoc frame;
71
72     public JComponent JavaDoc build(ConfiguratorFrame frame, Map JavaDoc attributes) {
73         JTabbedPane JavaDoc tabs = new JTabbedPane JavaDoc();
74         tabs.addTab("Inspection", createAttOpPanel());
75         tabs.addTab("Context", createContextPanel());
76         return tabs;
77
78     }
79
80     private JPanel JavaDoc createContextPanel() {
81
82         DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("pref:grow", ""));
83         builder.setDefaultDialogBorder();
84         builder.appendSeparator("Context information");
85
86         physicalContextModel = new ContextTableModel();
87         JTable JavaDoc contextTable = new JTable JavaDoc(physicalContextModel);
88
89         contextTable.getColumnModel().getColumn(1).setCellRenderer(
90             new DefaultNodeTableCellRenderer());
91         contextTable.sizeColumnsToFit(1);
92         builder.append(new JScrollPane JavaDoc(contextTable));
93         return builder.getPanel();
94
95     }
96
97     private JPanel JavaDoc createAttOpPanel() {
98         FormLayout layout =
99             new FormLayout(
100                 "left:max(40dlu;pref), 3dlu, left:10dlu:grow",
101                 "pref, pref, pref, 20dlu, 80dlu:grow, pref, 80dlu:grow");
102         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
103         builder.setDefaultDialogBorder();
104
105         builder.appendSeparator("MBean Information");
106         builder.append("ObjectName:", objectNameLabel);
107         builder.append("MBean Class:", mbeanClassLabel);
108
109         TableColumn JavaDoc tc;
110
111         builder.appendSeparator("Attributes");
112         attTable = new JTable JavaDoc(new AbstractTableModel JavaDoc() {
113             public int getColumnCount() {
114                 return 3;
115             }
116
117             public int getRowCount() {
118                 if (bean == null)
119                     return 0;
120                 else
121                     return beanInfo.getPropertyDescriptors().length;
122             }
123
124             public String JavaDoc getColumnName(int columnIndex) {
125                 switch (columnIndex) {
126                     case 0 :
127                         return "Name";
128                     case 1 :
129                         return "Value";
130                     case 2 :
131                         return "Type";
132                     default :
133                         return "Uknown column";
134                 }
135
136             }
137
138             public Object JavaDoc getValueAt(int rowIndex, int columnIndex) {
139                 PropertyDescriptor JavaDoc property = beanInfo.getPropertyDescriptors()[rowIndex];
140                 switch (columnIndex) {
141                     case 0 :
142                         return property.getName();
143                     case 1 :
144                         Object JavaDoc val;
145                         try {
146                             val = PropertyUtils.getProperty(bean, property.getName());
147                         } catch (Exception JavaDoc e) {
148                             log.error("Unable to get property", e);
149                             return "Unable to get value";
150                         }
151                         return val == null ? "null" : val.toString();
152                     case 2 :
153                         return "";
154                     default :
155                         return "Unknown column";
156                 }
157             }
158         });
159
160         builder.append(new JScrollPane JavaDoc(attTable), 3);
161         builder.nextLine();
162
163         builder.appendSeparator("Operations");
164         opTable = new JTable JavaDoc(new AbstractTableModel JavaDoc() {
165             public int getColumnCount() {
166                 return 4;
167             }
168
169             public boolean isCellEditable(int rowIndex, int columnIndex) {
170                 return columnIndex == 3;
171             }
172
173             public int getRowCount() {
174                 if (bean == null)
175                     return 0;
176                 else
177                     return beanInfo.getMethodDescriptors().length;
178             }
179
180             public String JavaDoc getColumnName(int columnIndex) {
181                 switch (columnIndex) {
182                     case 0 :
183                         return "Name";
184                     case 1 :
185                         return "Parameters";
186                     case 2 :
187                         return "Return type";
188                     case 3 :
189                         return "";
190                     default :
191                         return "Uknown column";
192                 }
193
194             }
195
196             public Object JavaDoc getValueAt(int rowIndex, int columnIndex) {
197                 MethodDescriptor JavaDoc method = beanInfo.getMethodDescriptors()[rowIndex];
198                 switch (columnIndex) {
199                     case 0 :
200                         return method.getName();
201                     case 1 :
202                         Class JavaDoc[] params = method.getMethod().getParameterTypes();
203                         StringBuffer JavaDoc s = new StringBuffer JavaDoc();
204                         if (params.length == 0)
205                             s = new StringBuffer JavaDoc("void");
206                         else
207                             for (int j = 0; j < params.length; j++) {
208                                 s.append(params[j].toString() + ", ");
209                             }
210                         return s.toString();
211
212                     case 2 :
213                         return method.getMethod().getReturnType().toString();
214                     case 3 :
215                         return method.getMethod();
216                     default :
217                         return "Unknown column";
218                 }
219             }
220         });
221         opTable.getColumnModel().getColumn(3).setCellRenderer(new ButtonRenderer());
222         opTable.getColumnModel().getColumn(3).setCellEditor(new ButtonEditor(new JCheckBox JavaDoc()));
223
224         builder.append(new JScrollPane JavaDoc(opTable), 3);
225         panel = builder.getPanel();
226         return panel;
227
228     }
229
230     public void setNode(Operation op, Node node) throws ConfiguratorException {
231         try {
232             bean = node.getBean();
233             beanInfo = Introspector.getBeanInfo(bean.getClass());
234             
235             ((AbstractTableModel JavaDoc) attTable.getModel()).fireTableDataChanged();
236             ((AbstractTableModel JavaDoc) opTable.getModel()).fireTableDataChanged();
237
238             physicalContextModel.setContext(node.getContext());
239         } catch (Exception JavaDoc e) {
240             throw new ConfiguratorException("Unable to inspect MBean", e);
241         }
242
243     }
244
245     class ButtonRenderer extends JButton JavaDoc implements TableCellRenderer JavaDoc {
246
247         public ButtonRenderer() {
248             setOpaque(true);
249         }
250
251         public Component JavaDoc getTableCellRendererComponent(
252             JTable JavaDoc table,
253             Object JavaDoc value,
254             boolean isSelected,
255             boolean hasFocus,
256             int row,
257             int column) {
258             if (isSelected) {
259                 setForeground(table.getSelectionForeground());
260                 setBackground(table.getSelectionBackground());
261             } else {
262                 setForeground(table.getForeground());
263                 setBackground(UIManager.getColor("Button.background"));
264             }
265             setText("Invoke");
266             return this;
267         }
268     }
269
270     class ButtonEditor extends DefaultCellEditor JavaDoc {
271         protected JButton JavaDoc button;
272         private String JavaDoc label;
273         private boolean isPushed;
274         Method JavaDoc op = null;
275
276         public ButtonEditor(JCheckBox JavaDoc checkBox) {
277             super(checkBox);
278             button = new JButton JavaDoc();
279             button.setOpaque(true);
280             button.addActionListener(new ActionListener JavaDoc() {
281                 public void actionPerformed(ActionEvent JavaDoc e) {
282                     fireEditingStopped();
283                 }
284             });
285         }
286
287         public Component JavaDoc getTableCellEditorComponent(
288             JTable JavaDoc table,
289             Object JavaDoc value,
290             boolean isSelected,
291             int row,
292             int column) {
293             if (isSelected) {
294                 button.setForeground(table.getSelectionForeground());
295                 button.setBackground(table.getSelectionBackground());
296             } else {
297                 button.setForeground(table.getForeground());
298                 button.setBackground(table.getBackground());
299             }
300             op = (Method JavaDoc) value;
301             label = "Invoke";
302             button.setText(label);
303             isPushed = true;
304             return button;
305         }
306
307         public Object JavaDoc getCellEditorValue() {
308             if (isPushed) {
309                 MethodInvocationDialog dlg =
310                     new MethodInvocationDialog(
311                         MainWindowSwing.getInstance(),
312                         "Invoke " + op.getName(),
313                         bean,
314                         op);
315                 dlg.pack();
316                 dlg.show();
317             }
318             isPushed = false;
319             return new String JavaDoc(label);
320         }
321
322         public boolean stopCellEditing() {
323             isPushed = false;
324             return super.stopCellEditing();
325         }
326
327         protected void fireEditingStopped() {
328             super.fireEditingStopped();
329         }
330     }
331 }
332
Popular Tags