1 package net.sf.panoptes.view.swing.configurator; 2 3 import java.awt.Component ; 4 import java.awt.event.ActionEvent ; 5 import java.awt.event.ActionListener ; 6 import java.util.ArrayList ; 7 import java.util.Map ; 8 9 import javax.management.MBeanAttributeInfo ; 10 import javax.management.MBeanOperationInfo ; 11 import javax.management.MBeanParameterInfo ; 12 import javax.swing.DefaultCellEditor ; 13 import javax.swing.JButton ; 14 import javax.swing.JCheckBox ; 15 import javax.swing.JComponent ; 16 import javax.swing.JFrame ; 17 import javax.swing.JLabel ; 18 import javax.swing.JPanel ; 19 import javax.swing.JScrollPane ; 20 import javax.swing.JTabbedPane ; 21 import javax.swing.JTable ; 22 import javax.swing.UIManager ; 23 import javax.swing.table.AbstractTableModel ; 24 import javax.swing.table.TableCellRenderer ; 25 import javax.swing.table.TableColumn ; 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 44 53 public class MBeanInspector implements SwingConfigurator { 54 55 private MBeanLinkNode link = null; 56 private MBeanWrapper mbean = null; 57 JTable opTable; 58 JTable attTable; 59 JPanel panel = null; 60 private ContextTableModel physicalContextModel; 61 private JLabel objectNameLabel = new JLabel (); 62 private JLabel mbeanClassLabel = new JLabel (); 63 64 private OperationTableModel operationModel; 65 private AttributeTableModel attributeModel; 66 67 private ArrayList contextKeys = new ArrayList (); 68 69 private Log log = LogFactory.getLog(getClass()); 70 private JFrame frame; 71 72 public JComponent build(ConfiguratorFrame frame, Map attributes) { 73 JTabbedPane tabs = new JTabbedPane (); 74 tabs.addTab("Inspection", createAttOpPanel()); 75 tabs.addTab("Context", createContextPanel()); 76 return tabs; 77 78 } 79 80 private JPanel 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 contextTable = new JTable (physicalContextModel); 88 89 contextTable.getColumnModel().getColumn(1).setCellRenderer( 90 new DefaultNodeTableCellRenderer()); 91 contextTable.sizeColumnsToFit(1); 92 builder.append(new JScrollPane (contextTable)); 93 return builder.getPanel(); 94 95 } 96 97 private JPanel 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 tc; 110 111 builder.appendSeparator("Attributes"); 112 attributeModel = new AttributeTableModel(mbean); 113 attTable = new JTable (attributeModel); 114 builder.append(new JScrollPane (attTable), 3); 115 builder.nextLine(); 116 117 builder.appendSeparator("Operations"); 118 operationModel = new OperationTableModel(mbean); 119 opTable = new JTable (operationModel); 120 opTable.getColumnModel().getColumn(3).setCellRenderer(new ButtonRenderer()); 121 opTable.getColumnModel().getColumn(3).setCellEditor(new ButtonEditor(new JCheckBox ())); 122 123 builder.append(new JScrollPane (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 ) attTable.getModel()).fireTableDataChanged(); 137 ((AbstractTableModel ) opTable.getModel()).fireTableDataChanged(); 138 objectNameLabel.setText(mbean.getObjectName().toString()); 139 mbeanClassLabel.setText(mbean.getMBeanInfo().getClassName()); 140 141 physicalContextModel.setContext(node.getContext()); 142 } catch (Exception e) { 143 throw new ConfiguratorException("Unable to inspect MBean", e); 144 } 145 146 } 147 148 class ButtonRenderer extends JButton implements TableCellRenderer { 149 150 public ButtonRenderer() { 151 setOpaque(true); 152 } 153 154 public Component getTableCellRendererComponent( 155 JTable table, 156 Object 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 { 174 protected JButton button; 175 private String label; 176 private boolean isPushed; 177 MBeanOperationInfo op = null; 178 179 public ButtonEditor(JCheckBox checkBox) { 180 super(checkBox); 181 button = new JButton (); 182 button.setOpaque(true); 183 button.addActionListener(new ActionListener () { 184 public void actionPerformed(ActionEvent e) { 185 fireEditingStopped(); 186 } 187 }); 188 } 189 190 public Component getTableCellEditorComponent( 191 JTable table, 192 Object 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 ) value; 204 label = "Invoke"; 205 button.setText(label); 206 isPushed = true; 207 return button; 208 } 209 210 public Object 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 (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 |