| 1 package org.sape.carbon.services.console; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Point ; 5 import java.util.Enumeration ; 6 import java.util.HashSet ; 7 import java.util.Iterator ; 8 import java.util.Set ; 9 import java.util.TreeSet ; 10 11 import javax.management.MBeanServer ; 12 import javax.management.ObjectInstance ; 13 import javax.management.ObjectName ; 14 import javax.management.QueryExp ; 15 import javax.swing.DefaultListModel ; 16 import javax.swing.JDesktopPane ; 17 import javax.swing.JProgressBar ; 18 import javax.swing.tree.DefaultMutableTreeNode ; 19 import javax.swing.tree.DefaultTreeModel ; 20 import javax.swing.tree.TreePath ; 21 22 29 public abstract class ServerConnectionPane extends javax.swing.JPanel { 30 31 protected JDesktopPane desktop; 32 protected TreeSet orderedMBeans = new TreeSet (); 33 34 protected String initialContextFactory; 35 protected String serverURL; 36 37 protected Set openMBeanFrames = new HashSet (); 38 39 40 public ServerConnectionPane(JDesktopPane desktop, String initialContextFactory, String serverURL) { 41 this.desktop = desktop; 42 this.initialContextFactory = initialContextFactory; 43 this.serverURL = serverURL; 44 45 initComponents(); 46 47 this.serverURLLabel.setText(serverURL); 48 49 DefaultMutableTreeNode root = new DefaultMutableTreeNode ("Loading components..."); 50 DefaultTreeModel model = new DefaultTreeModel (root); 51 this.componentTree.setModel(model); 52 repaint(); 53 } 54 55 protected abstract MBeanServer getMBeanServer(); 56 57 public void disconnect() { 58 59 Iterator iter = this.openMBeanFrames.iterator(); 60 while (iter.hasNext()) { 61 62 MBeanFrame frame = 63 (MBeanFrame) iter.next(); 64 65 66 } 67 68 } 69 70 public void refreshMBeans() { 71 try { 72 MBeanServer server = getMBeanServer(); 73 74 DefaultTreeModel model = (DefaultTreeModel ) this.componentTree.getModel(); 75 DefaultMutableTreeNode root = new DefaultMutableTreeNode (serverURL); 76 77 78 Set mbeans = server.queryMBeans(null,null); 79 80 int count = server.getMBeanCount().intValue(); 81 JProgressBar progressBar = new JProgressBar (0,count); 82 progressBar.setString("Loading MBeans..."); 83 progressBar.setStringPainted(true); 84 add(progressBar,BorderLayout.SOUTH); 85 doLayout(); 86 this.repaint(); 87 88 int i = 0; 89 Iterator iter = mbeans.iterator(); 90 while (iter.hasNext()) { 91 Object obj = iter.next(); 92 System.out.println("Bean: " + obj + " [" + obj.getClass().getName() + "]"); 93 ObjectInstance mbean = (ObjectInstance ) obj; 94 95 addMBean(root, mbean.getObjectName()); 96 progressBar.setValue(i++); 97 progressBar.repaint(); 98 } 99 model.setRoot(root); 100 remove(progressBar); 101 doLayout(); 102 this.repaint(); 103 104 } catch (Exception e) { 105 SingletonExceptionViewer.getInstance().addException(e); 106 } 107 } 108 109 110 111 protected void addMBean(DefaultMutableTreeNode base, ObjectName objectName) { 112 this.orderedMBeans.add(objectName.getCanonicalName()); 113 114 String domain = objectName.getDomain(); 115 116 DefaultMutableTreeNode domainNode = findChild(base, domain); 117 if (domainNode == null) { 118 domainNode = new DefaultMutableTreeNode (domain); 119 base.add(domainNode); 120 } 121 122 domainNode.add(new DefaultMutableTreeNode (new MBeanLabel(objectName))); 123 } 124 125 protected static class MBeanLabel { 126 private ObjectName objectName; 127 public MBeanLabel(ObjectName objectName) { 128 this.objectName = objectName; 129 } 130 public String toString() { 131 return this.objectName.getCanonicalKeyPropertyListString(); 132 } 133 public ObjectName getObjectName() { 134 return this.objectName; 135 } 136 } 137 138 private DefaultMutableTreeNode findChild(DefaultMutableTreeNode parent, Object childUserObject) { 139 140 Enumeration children = parent.children(); 141 while (children.hasMoreElements()) { 142 143 DefaultMutableTreeNode node = (DefaultMutableTreeNode ) children.nextElement(); 144 145 Object obj = node.getUserObject(); 146 147 if (obj.equals(childUserObject)) { 148 return node; 149 } 150 } 151 return null; 152 } 153 154 159 private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; 161 162 jPanel1 = new javax.swing.JPanel (); 163 jLabel1 = new javax.swing.JLabel (); 164 serverURLLabel = new javax.swing.JLabel (); 165 jTabbedPane1 = new javax.swing.JTabbedPane (); 166 componentScrollPane = new javax.swing.JScrollPane (); 167 componentTree = new javax.swing.JTree (); 168 searchPanel = new javax.swing.JPanel (); 169 searchScrollPane = new javax.swing.JScrollPane (); 170 searchJList = new javax.swing.JList (); 171 searchHeaderPanel = new javax.swing.JPanel (); 172 jLabel2 = new javax.swing.JLabel (); 173 searchField = new javax.swing.JTextField (); 174 searchButton = new javax.swing.JButton (); 175 176 setLayout(new java.awt.BorderLayout ()); 177 178 jPanel1.setLayout(new java.awt.GridBagLayout ()); 179 180 jLabel1.setText("Server"); 181 gridBagConstraints = new java.awt.GridBagConstraints (); 182 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 183 jPanel1.add(jLabel1, gridBagConstraints); 184 185 serverURLLabel.setFont(new java.awt.Font ("Dialog", 0, 12)); 186 serverURLLabel.setText("jLabel2"); 187 gridBagConstraints = new java.awt.GridBagConstraints (); 188 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 189 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 190 gridBagConstraints.weightx = 1.0; 191 gridBagConstraints.insets = new java.awt.Insets (0, 6, 0, 0); 192 jPanel1.add(serverURLLabel, gridBagConstraints); 193 194 add(jPanel1, java.awt.BorderLayout.NORTH); 195 196 componentTree.addMouseListener(new java.awt.event.MouseAdapter () { 197 public void mouseClicked(java.awt.event.MouseEvent evt) { 198 componentTreeMouseClicked(evt); 199 } 200 }); 201 202 componentScrollPane.setViewportView(componentTree); 203 204 jTabbedPane1.addTab("MBeans", componentScrollPane); 205 206 searchPanel.setLayout(new java.awt.BorderLayout ()); 207 208 searchJList.setFont(new java.awt.Font ("Courier New", 0, 12)); 209 searchScrollPane.setViewportView(searchJList); 210 211 searchPanel.add(searchScrollPane, java.awt.BorderLayout.CENTER); 212 213 searchHeaderPanel.setLayout(new java.awt.GridBagLayout ()); 214 215 jLabel2.setText("Search"); 216 gridBagConstraints = new java.awt.GridBagConstraints (); 217 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 218 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 219 searchHeaderPanel.add(jLabel2, gridBagConstraints); 220 221 searchField.setColumns(14); 222 searchField.setMinimumSize(new java.awt.Dimension (50, 20)); 223 gridBagConstraints = new java.awt.GridBagConstraints (); 224 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 225 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 226 gridBagConstraints.weightx = 1.0; 227 searchHeaderPanel.add(searchField, gridBagConstraints); 228 229 searchButton.setFont(new java.awt.Font ("Dialog", 0, 10)); 230 searchButton.setText("Go"); 231 searchButton.addActionListener(new java.awt.event.ActionListener () { 232 public void actionPerformed(java.awt.event.ActionEvent evt) { 233 searchButtonActionPerformed(evt); 234 } 235 }); 236 237 gridBagConstraints = new java.awt.GridBagConstraints (); 238 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 239 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 240 searchHeaderPanel.add(searchButton, gridBagConstraints); 241 242 searchPanel.add(searchHeaderPanel, java.awt.BorderLayout.NORTH); 243 244 jTabbedPane1.addTab("Search", searchPanel); 245 246 add(jTabbedPane1, java.awt.BorderLayout.CENTER); 247 248 } 250 private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) { String queryText = this.searchField.getText(); 253 ObjectName objectName = null; 254 try { 255 objectName = new ObjectName (queryText); 256 } catch (Exception e) { 257 SingletonExceptionViewer.getInstance().addException(e); 258 } 259 260 Set mbeans = queryMBeans(objectName, null); 261 262 DefaultListModel model = new DefaultListModel (); 263 264 Iterator mbeansIter = mbeans.iterator(); 265 while(mbeansIter.hasNext()) { 266 ObjectInstance objectInstance = 267 (ObjectInstance ) mbeansIter.next(); 268 269 model.addElement(objectInstance.getObjectName()); 270 } 271 this.searchJList.setModel(model); 272 this.searchJList.repaint(); 273 274 } 276 protected Set queryMBeans(ObjectName objectName, QueryExp query) { 277 return getMBeanServer().queryMBeans(objectName, query); 278 } 279 280 281 private void componentTreeMouseClicked(java.awt.event.MouseEvent evt) { ObjectName selectedMBean; 284 285 int selRow = this.componentTree.getRowForLocation(evt.getX(), evt.getY()); 286 TreePath selPath = this.componentTree.getPathForLocation(evt.getX(), evt.getY()); 287 if(selRow != -1) { 288 if (evt.getClickCount() == 2) { 289 this.componentTree.setSelectionPath(selPath); 290 291 DefaultMutableTreeNode node = 292 (DefaultMutableTreeNode ) this.componentTree.getSelectionPath().getLastPathComponent(); 293 294 295 try { 296 selectedMBean = 297 ((MBeanLabel)node.getUserObject()).getObjectName(); 298 openMBeanFrame(selectedMBean); 299 300 } catch (ClassCastException cce) { 301 } catch (Exception e) { 303 e.printStackTrace(); 304 } 305 306 } else if ((evt.getModifiers() & evt.BUTTON3_MASK) > 0) { 307 308 Point pt = evt.getPoint(); 309 310 TreePath path = 311 this.componentTree.getPathForLocation(pt.x,pt.y); 312 313 this.componentTree.setSelectionPath(path); 314 315 317 } 319 } 320 321 322 } 324 325 326 protected void openMBeanFrame(ObjectName objectName) { 327 328 MBeanFrame view = new MBeanFrame(getMBeanServer(), objectName); 329 this.desktop.add(view); 330 view.setVisible(true); 331 332 this.openMBeanFrames.add(view); 333 } 334 335 336 337 private javax.swing.JPanel searchPanel; 339 protected javax.swing.JTree componentTree; 340 private javax.swing.JButton searchButton; 341 private javax.swing.JPanel jPanel1; 342 private javax.swing.JTextField searchField; 343 private javax.swing.JScrollPane componentScrollPane; 344 private javax.swing.JPanel searchHeaderPanel; 345 protected javax.swing.JLabel serverURLLabel; 346 private javax.swing.JList searchJList; 347 private javax.swing.JScrollPane searchScrollPane; 348 private javax.swing.JTabbedPane jTabbedPane1; 349 private javax.swing.JLabel jLabel2; 350 private javax.swing.JLabel jLabel1; 351 353 } 354 | Popular Tags |