KickJava   Java API By Example, From Geeks To Geeks.

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


1 package org.sape.carbon.services.console;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Point JavaDoc;
5 import java.util.Enumeration JavaDoc;
6 import java.util.HashSet JavaDoc;
7 import java.util.Iterator JavaDoc;
8 import java.util.Set JavaDoc;
9 import java.util.TreeSet JavaDoc;
10
11 import javax.management.MBeanServer JavaDoc;
12 import javax.management.ObjectInstance JavaDoc;
13 import javax.management.ObjectName JavaDoc;
14 import javax.management.QueryExp JavaDoc;
15 import javax.swing.DefaultListModel JavaDoc;
16 import javax.swing.JDesktopPane JavaDoc;
17 import javax.swing.JProgressBar JavaDoc;
18 import javax.swing.tree.DefaultMutableTreeNode JavaDoc;
19 import javax.swing.tree.DefaultTreeModel JavaDoc;
20 import javax.swing.tree.TreePath JavaDoc;
21
22 /**
23  *
24  * Copyright 2002 Sapient
25  * @since carbon 1.0
26  * @author Greg Hinkle, January 2002
27  * @version $Revision: 1.3 $($Author: ghinkl $ / $Date: 2003/04/04 01:11:49 $)
28  */

29 public abstract class ServerConnectionPane extends javax.swing.JPanel JavaDoc {
30
31     protected JDesktopPane JavaDoc desktop;
32     protected TreeSet JavaDoc orderedMBeans = new TreeSet JavaDoc();
33     
34     protected String JavaDoc initialContextFactory;
35     protected String JavaDoc serverURL;
36     
37     protected Set JavaDoc openMBeanFrames = new HashSet JavaDoc();
38     
39     
40     public ServerConnectionPane(JDesktopPane JavaDoc desktop, String JavaDoc initialContextFactory, String JavaDoc 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 JavaDoc root = new DefaultMutableTreeNode JavaDoc("Loading components...");
50         DefaultTreeModel JavaDoc model = new DefaultTreeModel JavaDoc(root);
51         this.componentTree.setModel(model);
52         repaint();
53     }
54     
55     protected abstract MBeanServer JavaDoc getMBeanServer();
56     
57     public void disconnect() {
58         
59         Iterator JavaDoc 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 JavaDoc server = getMBeanServer();
73             
74             DefaultTreeModel JavaDoc model = (DefaultTreeModel JavaDoc) this.componentTree.getModel();
75             DefaultMutableTreeNode JavaDoc root = new DefaultMutableTreeNode JavaDoc(serverURL);
76
77
78             Set JavaDoc mbeans = server.queryMBeans(null,null);
79
80             int count = server.getMBeanCount().intValue();
81             JProgressBar JavaDoc progressBar = new JProgressBar JavaDoc(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 JavaDoc iter = mbeans.iterator();
90             while (iter.hasNext()) {
91                 Object JavaDoc obj = iter.next();
92                 System.out.println("Bean: " + obj + " [" + obj.getClass().getName() + "]");
93                 ObjectInstance JavaDoc mbean = (ObjectInstance JavaDoc) 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 JavaDoc e) {
105             SingletonExceptionViewer.getInstance().addException(e);
106         }
107     }
108
109     
110     
111     protected void addMBean(DefaultMutableTreeNode JavaDoc base, ObjectName JavaDoc objectName) {
112         this.orderedMBeans.add(objectName.getCanonicalName());
113         
114         String JavaDoc domain = objectName.getDomain();
115         
116         DefaultMutableTreeNode JavaDoc domainNode = findChild(base, domain);
117         if (domainNode == null) {
118             domainNode = new DefaultMutableTreeNode JavaDoc(domain);
119             base.add(domainNode);
120         }
121         
122         domainNode.add(new DefaultMutableTreeNode JavaDoc(new MBeanLabel(objectName)));
123     }
124     
125     protected static class MBeanLabel {
126         private ObjectName JavaDoc objectName;
127         public MBeanLabel(ObjectName JavaDoc objectName) {
128             this.objectName = objectName;
129         }
130         public String JavaDoc toString() {
131             return this.objectName.getCanonicalKeyPropertyListString();
132         }
133         public ObjectName JavaDoc getObjectName() {
134             return this.objectName;
135         }
136     }
137     
138     private DefaultMutableTreeNode JavaDoc findChild(DefaultMutableTreeNode JavaDoc parent, Object JavaDoc childUserObject) {
139      
140         Enumeration JavaDoc children = parent.children();
141         while (children.hasMoreElements()) {
142             
143            DefaultMutableTreeNode JavaDoc node = (DefaultMutableTreeNode JavaDoc) children.nextElement();
144            
145            Object JavaDoc obj = node.getUserObject();
146            
147            if (obj.equals(childUserObject)) {
148                 return node;
149            }
150         }
151         return null;
152     }
153     
154     /** This method is called from within the constructor to
155      * initialize the form.
156      * WARNING: Do NOT modify this code. The content of this method is
157      * always regenerated by the Form Editor.
158      */

159     private void initComponents() {//GEN-BEGIN:initComponents
160
java.awt.GridBagConstraints JavaDoc gridBagConstraints;
161
162         jPanel1 = new javax.swing.JPanel JavaDoc();
163         jLabel1 = new javax.swing.JLabel JavaDoc();
164         serverURLLabel = new javax.swing.JLabel JavaDoc();
165         jTabbedPane1 = new javax.swing.JTabbedPane JavaDoc();
166         componentScrollPane = new javax.swing.JScrollPane JavaDoc();
167         componentTree = new javax.swing.JTree JavaDoc();
168         searchPanel = new javax.swing.JPanel JavaDoc();
169         searchScrollPane = new javax.swing.JScrollPane JavaDoc();
170         searchJList = new javax.swing.JList JavaDoc();
171         searchHeaderPanel = new javax.swing.JPanel JavaDoc();
172         jLabel2 = new javax.swing.JLabel JavaDoc();
173         searchField = new javax.swing.JTextField JavaDoc();
174         searchButton = new javax.swing.JButton JavaDoc();
175
176         setLayout(new java.awt.BorderLayout JavaDoc());
177
178         jPanel1.setLayout(new java.awt.GridBagLayout JavaDoc());
179
180         jLabel1.setText("Server");
181         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
182         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
183         jPanel1.add(jLabel1, gridBagConstraints);
184
185         serverURLLabel.setFont(new java.awt.Font JavaDoc("Dialog", 0, 12));
186         serverURLLabel.setText("jLabel2");
187         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc(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 JavaDoc() {
197             public void mouseClicked(java.awt.event.MouseEvent JavaDoc 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 JavaDoc());
207
208         searchJList.setFont(new java.awt.Font JavaDoc("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 JavaDoc());
214
215         jLabel2.setText("Search");
216         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
217         gridBagConstraints.insets = new java.awt.Insets JavaDoc(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 JavaDoc(50, 20));
223         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
224         gridBagConstraints.insets = new java.awt.Insets JavaDoc(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 JavaDoc("Dialog", 0, 10));
230         searchButton.setText("Go");
231         searchButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
232             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
233                 searchButtonActionPerformed(evt);
234             }
235         });
236
237         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
238         gridBagConstraints.insets = new java.awt.Insets JavaDoc(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     }//GEN-END:initComponents
249

250     private void searchButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_searchButtonActionPerformed
251
// Add your handling code here:
252
String JavaDoc queryText = this.searchField.getText();
253         ObjectName JavaDoc objectName = null;
254         try {
255             objectName = new ObjectName JavaDoc(queryText);
256         } catch (Exception JavaDoc e) {
257             SingletonExceptionViewer.getInstance().addException(e);
258         }
259         
260         Set JavaDoc mbeans = queryMBeans(objectName, null);
261         
262         DefaultListModel JavaDoc model = new DefaultListModel JavaDoc();
263         
264         Iterator JavaDoc mbeansIter = mbeans.iterator();
265         while(mbeansIter.hasNext()) {
266             ObjectInstance JavaDoc objectInstance =
267                 (ObjectInstance JavaDoc) mbeansIter.next();
268             
269             model.addElement(objectInstance.getObjectName());
270         }
271         this.searchJList.setModel(model);
272         this.searchJList.repaint();
273         
274     }//GEN-LAST:event_searchButtonActionPerformed
275

276     protected Set JavaDoc queryMBeans(ObjectName JavaDoc objectName, QueryExp JavaDoc query) {
277         return getMBeanServer().queryMBeans(objectName, query);
278     }
279     
280     
281     private void componentTreeMouseClicked(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_componentTreeMouseClicked
282
// Add your handling code here:
283
ObjectName JavaDoc selectedMBean;
284         
285         int selRow = this.componentTree.getRowForLocation(evt.getX(), evt.getY());
286         TreePath JavaDoc 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 JavaDoc node =
292                     (DefaultMutableTreeNode JavaDoc) this.componentTree.getSelectionPath().getLastPathComponent();
293                 
294                 
295                 try {
296                     selectedMBean =
297                         ((MBeanLabel)node.getUserObject()).getObjectName();
298                     openMBeanFrame(selectedMBean);
299                     
300                 } catch (ClassCastException JavaDoc cce) {
301                     // Only happens on folders
302
} catch (Exception JavaDoc e) {
303                     e.printStackTrace();
304                 }
305              
306              } else if ((evt.getModifiers() & evt.BUTTON3_MASK) > 0) {
307         
308                 Point JavaDoc pt = evt.getPoint();
309
310                 TreePath JavaDoc path =
311                     this.componentTree.getPathForLocation(pt.x,pt.y);
312
313                 this.componentTree.setSelectionPath(path);
314
315                 //objName = this.componentTree.getSelectionPath().getLastPathComponent().toString();
316

317                 // TODO: Open up contextual menu
318
}
319         }
320         
321         
322     }//GEN-LAST:event_componentTreeMouseClicked
323

324
325         
326     protected void openMBeanFrame(ObjectName JavaDoc 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     // Variables declaration - do not modify//GEN-BEGIN:variables
338
private javax.swing.JPanel JavaDoc searchPanel;
339     protected javax.swing.JTree JavaDoc componentTree;
340     private javax.swing.JButton JavaDoc searchButton;
341     private javax.swing.JPanel JavaDoc jPanel1;
342     private javax.swing.JTextField JavaDoc searchField;
343     private javax.swing.JScrollPane JavaDoc componentScrollPane;
344     private javax.swing.JPanel JavaDoc searchHeaderPanel;
345     protected javax.swing.JLabel JavaDoc serverURLLabel;
346     private javax.swing.JList JavaDoc searchJList;
347     private javax.swing.JScrollPane JavaDoc searchScrollPane;
348     private javax.swing.JTabbedPane JavaDoc jTabbedPane1;
349     private javax.swing.JLabel JavaDoc jLabel2;
350     private javax.swing.JLabel JavaDoc jLabel1;
351     // End of variables declaration//GEN-END:variables
352

353 }
354
Popular Tags