KickJava   Java API By Example, From Geeks To Geeks.

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


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.util.ArrayList JavaDoc;
7 import java.util.Map JavaDoc;
8
9 import javax.management.MBeanAttributeInfo JavaDoc;
10 import javax.management.MBeanOperationInfo JavaDoc;
11 import javax.management.MBeanParameterInfo JavaDoc;
12 import javax.swing.DefaultCellEditor JavaDoc;
13 import javax.swing.JButton JavaDoc;
14 import javax.swing.JCheckBox JavaDoc;
15 import javax.swing.JComponent JavaDoc;
16 import javax.swing.JFrame JavaDoc;
17 import javax.swing.JLabel JavaDoc;
18 import javax.swing.JPanel JavaDoc;
19 import javax.swing.JScrollPane JavaDoc;
20 import javax.swing.JTabbedPane JavaDoc;
21 import javax.swing.JTable JavaDoc;
22 import javax.swing.UIManager JavaDoc;
23 import javax.swing.table.AbstractTableModel JavaDoc;
24 import javax.swing.table.TableCellRenderer JavaDoc;
25 import javax.swing.table.TableColumn JavaDoc;
26
27 import net.sf.panoptes.component.jmx.model.MBeanLinkNode;
28 import net.sf.panoptes.component.jmx.model.MBeanWrapper;
29 import net.sf.panoptes.model.node.Node;
30 import net.sf.panoptes.swing.DefaultFormBuilder;
31 import net.sf.panoptes.swing.Operation;
32 import net.sf.panoptes.view.swing.MainWindowSwing;
33 import net.sf.panoptes.view.swing.editors.MBeanInvocationDialog;
34 import net.sf.panoptes.view.swing.editors.MethodInvocationDialog;
35 import net.sf.panoptes.view.swing.tables.ContextTableModel;
36 import net.sf.panoptes.view.swing.tables.DefaultNodeTableCellRenderer;
37
38 import org.apache.commons.logging.Log;
39 import org.apache.commons.logging.LogFactory;
40
41 import com.jgoodies.forms.layout.FormLayout;
42 //import com.sun.org.omg.CORBA.OperationDescription;
43

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

53 public class MBeanInspector implements SwingConfigurator {
54
55     private MBeanLinkNode link = null;
56     private MBeanWrapper mbean = null;
57     JTable JavaDoc opTable;
58     JTable JavaDoc attTable;
59     JPanel JavaDoc panel = null;
60     private ContextTableModel physicalContextModel;
61     private JLabel JavaDoc objectNameLabel = new JLabel JavaDoc();
62     private JLabel JavaDoc mbeanClassLabel = new JLabel JavaDoc();
63     
64     private OperationTableModel operationModel;
65     private AttributeTableModel attributeModel;
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         attributeModel = new AttributeTableModel(mbean);
113         attTable = new JTable JavaDoc(attributeModel);
114         builder.append(new JScrollPane JavaDoc(attTable), 3);
115         builder.nextLine();
116
117         builder.appendSeparator("Operations");
118         operationModel = new OperationTableModel(mbean);
119         opTable = new JTable JavaDoc(operationModel);
120         opTable.getColumnModel().getColumn(3).setCellRenderer(new ButtonRenderer());
121         opTable.getColumnModel().getColumn(3).setCellEditor(new ButtonEditor(new JCheckBox JavaDoc()));
122
123         builder.append(new JScrollPane JavaDoc(opTable), 3);
124         panel = builder.getPanel();
125         return panel;
126
127     }
128
129     public void setNode(Operation op, Node node) throws ConfiguratorException {
130         this.link = (MBeanLinkNode) node;
131         try {
132             mbean = link.getWrapper();
133             
134             attributeModel.setMBean(mbean);
135             operationModel.setMBean(mbean);
136             ((AbstractTableModel JavaDoc) attTable.getModel()).fireTableDataChanged();
137             ((AbstractTableModel JavaDoc) opTable.getModel()).fireTableDataChanged();
138             objectNameLabel.setText(mbean.getObjectName().toString());
139             mbeanClassLabel.setText(mbean.getMBeanInfo().getClassName());
140
141             physicalContextModel.setContext(node.getContext());
142         } catch (Exception JavaDoc e) {
143             throw new ConfiguratorException("Unable to inspect MBean", e);
144         }
145
146     }
147
148     class ButtonRenderer extends JButton JavaDoc implements TableCellRenderer JavaDoc {
149
150         public ButtonRenderer() {
151             setOpaque(true);
152         }
153
154         public Component JavaDoc getTableCellRendererComponent(
155             JTable JavaDoc table,
156             Object JavaDoc value,
157             boolean isSelected,
158             boolean hasFocus,
159             int row,
160             int column) {
161             if (isSelected) {
162                 setForeground(table.getSelectionForeground());
163                 setBackground(table.getSelectionBackground());
164             } else {
165                 setForeground(table.getForeground());
166                 setBackground(UIManager.getColor("Button.background"));
167             }
168             setText("Invoke");
169             return this;
170         }
171     }
172
173     class ButtonEditor extends DefaultCellEditor JavaDoc {
174         protected JButton JavaDoc button;
175         private String JavaDoc label;
176         private boolean isPushed;
177         MBeanOperationInfo JavaDoc op = null;
178
179         public ButtonEditor(JCheckBox JavaDoc checkBox) {
180             super(checkBox);
181             button = new JButton JavaDoc();
182             button.setOpaque(true);
183             button.addActionListener(new ActionListener JavaDoc() {
184                 public void actionPerformed(ActionEvent JavaDoc e) {
185                     fireEditingStopped();
186                 }
187             });
188         }
189
190         public Component JavaDoc getTableCellEditorComponent(
191             JTable JavaDoc table,
192             Object JavaDoc value,
193             boolean isSelected,
194             int row,
195             int column) {
196             if (isSelected) {
197                 button.setForeground(table.getSelectionForeground());
198                 button.setBackground(table.getSelectionBackground());
199             } else {
200                 button.setForeground(table.getForeground());
201                 button.setBackground(table.getBackground());
202             }
203             op = (MBeanOperationInfo JavaDoc) value;
204             label = "Invoke";
205             button.setText(label);
206             isPushed = true;
207             return button;
208         }
209
210         public Object JavaDoc getCellEditorValue() {
211             if (isPushed) {
212                 MBeanInvocationDialog dlg =
213                     new MBeanInvocationDialog(
214                         MainWindowSwing.getInstance(),
215                         "Invoke " + op.getDescription(),
216                         mbean,
217                         op);
218                 dlg.pack();
219                 dlg.show();
220             }
221             isPushed = false;
222             return new String JavaDoc(label);
223         }
224
225         public boolean stopCellEditing() {
226             isPushed = false;
227             return super.stopCellEditing();
228         }
229
230         protected void fireEditingStopped() {
231             super.fireEditingStopped();
232         }
233     }
234 }
235
Popular Tags