KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > ubermq > jms > ui > admin > AdminViewer


1 package com.ubermq.jms.ui.admin;
2
3 import com.ubermq.jms.server.admin.*;
4 import java.awt.*;
5 import java.awt.event.*;
6 import java.rmi.*;
7 import java.text.*;
8 import javax.swing.*;
9 import javax.swing.event.*;
10 import javax.swing.table.*;
11 import javax.swing.tree.*;
12
13 public class AdminViewer
14     extends JFrame
15 {
16     private final AdminController c;
17
18     private final JTree serverTree;
19     private final JEditorPane messagePane;
20     private final JSplitPane splitter;
21
22     // actions
23
private final Action connectAction,
24         disconnectAction,
25         refreshAction,
26         exitAction,
27         viewRefreshAction;
28
29     // SOME IMAGES
30
static final ImageIcon serverIcon =
31         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/network.png")));
32     static final ImageIcon scriptIcon =
33         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/history.png")));
34     static final ImageIcon scriptDeletedIcon =
35         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/history_clear.png")));
36     static final ImageIcon queueIcon =
37         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/queue.png")));
38     static final ImageIcon deleteIcon =
39         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/fileclose.png")));
40     static final ImageIcon refreshIcon =
41         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/refresh.png")));
42     static final ImageIcon socketIcon =
43         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/socket.png")));
44     static final ImageIcon envelopeIcon =
45         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/mail_generic.png")));
46     static final ImageIcon homeIcon =
47         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/gohome.png")));
48     static final ImageIcon okIcon =
49         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/ok.png")));
50     static final ImageIcon stopIcon =
51         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/stop.png")));
52     static final ImageIcon trashIcon =
53         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/trashcan_empty.png")));
54     static final ImageIcon rightArrowIcon =
55         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/1rightarrow.png")));
56     static final ImageIcon downArrowIcon =
57         new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/1downarrow.png")));
58
59     public AdminViewer(final AdminController c)
60     {
61         super("UberMQ Administration");
62         this.c = c;
63
64         // construct the tree
65
serverTree = new JTree(c.getTreeModel());
66         serverTree.expandRow(0);
67         serverTree.setScrollsOnExpand(true);
68         serverTree.setCellRenderer(new MyTreeCellRenderer());
69
70         final TreeSelectionModel tsm = new DefaultTreeSelectionModel();
71         tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
72         serverTree.setSelectionModel(tsm);
73
74         // construct message pane
75
messagePane = new JEditorPane("text/html", "");
76         messagePane.setEditable(false);
77
78         // construct the right hand msg pane
79
Component right = new JScrollPane(messagePane);
80
81         // split em
82
splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
83                                   new JScrollPane(serverTree),
84                                   right);
85
86         // add the split pane to the content pane. done.
87
getContentPane().add(splitter, BorderLayout.CENTER);
88
89         // make actions
90
connectAction = new ConnectAction();
91         disconnectAction = new DisconnectAction();
92         disconnectAction.setEnabled(false);
93         exitAction = new ExitAction();
94         refreshAction = new ServerRefreshAction();
95         refreshAction.setEnabled(false);
96         viewRefreshAction = new ViewRefreshAction();
97         viewRefreshAction.setEnabled(false);
98
99         // create the menu bar, and add it
100
setJMenuBar(setupMenuBar());
101
102         // whenever the tree model gets a new node, we expand the
103
// view so the user can see the new node.
104
c.getTreeModel().addTreeModelListener(new TreeModelListener() {
105                     public void treeNodesRemoved(TreeModelEvent e)
106                     {
107                     }
108                     public void treeNodesChanged(TreeModelEvent e)
109                     {
110                     }
111                     public void treeStructureChanged(final TreeModelEvent e)
112                     {
113                     }
114                     public void treeNodesInserted(final TreeModelEvent e)
115                     {
116                         // make sure the new node is visible.
117
SwingUtilities.invokeLater(new Runnable JavaDoc() {
118                                     public void run()
119                                     {
120                                         serverTree.expandPath(e.getTreePath());
121                                     }
122                                 });
123                     }
124                 });
125
126         // when you select something in the tree,
127
// the controller's populateList method is called to
128
// fill the list with messages from the given node.
129
serverTree.addTreeSelectionListener(new TreeSelectionListener() {
130
131                     /**
132                      * Called whenever the value of the selection changes.
133                      * @param e the event that characterizes the change.
134                      */

135                     public void valueChanged(javax.swing.event.TreeSelectionEvent JavaDoc e)
136                     {
137                         TreeNode selection = null;
138                         if (!tsm.isSelectionEmpty()) {
139                             selection = (TreeNode)tsm.getSelectionPath().getLastPathComponent();
140                             setMessageFromNode(selection);
141                         }
142
143                         // enable/disable
144
viewRefreshAction.setEnabled(!tsm.isSelectionEmpty());
145                         disconnectAction.setEnabled(selection instanceof ServerTreeNode);
146                         refreshAction.setEnabled(selection instanceof ServerTreeNode);
147                     }
148
149                 });
150
151         // add popup menu listener
152
MouseListener popupListener = new PopupListener();
153         serverTree.addMouseListener(popupListener);
154     }
155
156     private void setMessageFromNode(TreeNode selection)
157     {
158         // set content pane
159
String JavaDoc text = "";
160         if (selection instanceof AdminTreeNode)
161             text = ((AdminTreeNode)selection).getDescription();
162         messagePane.setText(text);
163     }
164
165     private class ViewRefreshAction extends AbstractAction
166     {
167         public ViewRefreshAction()
168         {
169             super("Refresh", refreshIcon);
170             putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, 0));
171         }
172
173         public void actionPerformed(ActionEvent e)
174         {
175             setMessageFromNode((TreeNode)serverTree.getSelectionPath().getLastPathComponent());
176         }
177     }
178
179     private class ConnectAction extends AbstractAction
180     {
181         public ConnectAction()
182         {
183             super("Connect...", serverIcon);
184             putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, KeyEvent.ALT_DOWN_MASK));
185         }
186
187         public void actionPerformed(ActionEvent e)
188         {
189             String JavaDoc uri =
190                 JOptionPane.showInputDialog(AdminViewer.this,
191                                             "Please enter the URI of the server to connect to.",
192                                             "//localhost:3998/UberMQAdmin");
193             if (uri == null ||
194                 uri.length() == 0)
195                 return;
196
197             try
198             {
199                 c.connect((MessageServerAdmin)Naming.lookup(uri));
200             }
201             catch (Exception JavaDoc x) {
202                 JOptionPane.showMessageDialog(AdminViewer.this, x.getMessage());
203             }
204         }
205     }
206
207     private class DisconnectAction extends AbstractAction
208     {
209         public DisconnectAction() {super("Disconnect", stopIcon);}
210         public void actionPerformed(ActionEvent e)
211         {
212             if (!serverTree.isSelectionEmpty())
213             {
214                 try
215                 {
216                     ServerTreeNode stn = (ServerTreeNode)serverTree.getSelectionPath().getLastPathComponent();
217                     c.disconnect(stn);
218                 }
219                 catch (java.rmi.RemoteException JavaDoc x) {
220                     JOptionPane.showMessageDialog(null, x.getMessage());
221                 }
222             }
223         }
224     }
225
226     private class ServerRefreshAction extends AbstractAction
227     {
228         public ServerRefreshAction() {super("Refresh", refreshIcon);}
229         public void actionPerformed(ActionEvent e)
230         {
231             try
232             {
233                 ServerTreeNode stn = (ServerTreeNode)serverTree.getSelectionPath().getLastPathComponent();
234                 stn.refresh(c.getTreeModel());
235             }
236             catch (java.rmi.RemoteException JavaDoc x) {
237                 JOptionPane.showMessageDialog(null, x.getMessage());
238             }
239         }
240     }
241
242     private class ExitAction extends AbstractAction
243     {
244         public ExitAction() {super("Exit");}
245         public void actionPerformed(ActionEvent e)
246         {
247             System.exit(0);
248         }
249     }
250
251     JMenuBar setupMenuBar()
252     {
253         JMenuBar menuBar = new JMenuBar();
254
255         // Server |
256
JMenu serverMenu = new JMenu("Server");
257         serverMenu.add(connectAction);
258         serverMenu.add(disconnectAction);
259         serverMenu.addSeparator();
260         serverMenu.add(refreshAction);
261         serverMenu.addSeparator();
262         serverMenu.add(exitAction);
263
264         // View |
265
JMenu viewMenu = new JMenu("View");
266         viewMenu.add(viewRefreshAction);
267
268         // add menus
269
menuBar.add(serverMenu);
270         menuBar.add(viewMenu);
271         return menuBar;
272     }
273
274     private class PopupListener extends MouseAdapter {
275         public void mousePressed(MouseEvent e) {
276             maybeShowPopup(e);
277         }
278
279         public void mouseReleased(MouseEvent e) {
280             maybeShowPopup(e);
281         }
282
283         private void maybeShowPopup(MouseEvent e) {
284             if (e.isPopupTrigger()) {
285                 TreePath tp = serverTree.getPathForLocation(e.getPoint().x, e.getPoint().y);
286                 Object JavaDoc o = tp.getLastPathComponent();
287                 if (o instanceof AdminTreeNode)
288                 {
289                     JPopupMenu popup = ((AdminTreeNode)o).getContextMenu();
290                     if (popup != null)
291                         popup.show(e.getComponent(),
292                                    e.getX(), e.getY());
293                 }
294             }
295         }
296     }
297
298     private class MyTreeCellRenderer
299         extends DefaultTreeCellRenderer
300     {
301         public Component getTreeCellRendererComponent(
302             JTree tree,
303             Object JavaDoc value,
304             boolean sel,
305             boolean expanded,
306             boolean leaf,
307             int row,
308             boolean hasFocus)
309         {
310             super.getTreeCellRendererComponent(
311                 tree, value, sel,
312                 expanded, leaf, row,
313                 hasFocus);
314
315             ImageIcon icon = null;
316             if (value instanceof AdminTreeNode)
317                 icon = ((AdminTreeNode)value).getImageIcon();
318             else if (value == c.getTreeModel().getRoot())
319                 icon = AdminViewer.homeIcon;
320             if (icon != null)
321                 setIcon(icon);
322
323             return this;
324         }
325     }
326
327     private static class MyDateRenderer
328         extends DefaultTableCellRenderer
329         implements TableCellRenderer
330     {
331         private static final DateFormat df =
332             new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
333
334         public java.awt.Component JavaDoc getTableCellRendererComponent(JTable table,
335                                                                 Object JavaDoc value,
336                                                                 boolean isSelected,
337                                                                 boolean hasFocus,
338                                                                 int row,
339                                                                 int column)
340         {
341             return super.getTableCellRendererComponent(table,
342                                                        df.format((java.util.Date JavaDoc)value),
343                                                        isSelected,
344                                                        hasFocus,
345                                                        row,
346                                                        column);
347         }
348     }
349
350     private static final Dimension INITIAL_SIZE = new Dimension(600, 400);
351     private static final double DIVIDER_PROPORTION = 0.4;
352
353     /**
354      * Constructs the message viewer application window.
355      */

356     public static void main(String JavaDoc[] args)
357     {
358         AdminController c = new AdminController();
359
360         // display
361
AdminViewer frame = new AdminViewer(c);
362
363         frame.addWindowListener(new WindowAdapter() {
364                     public void windowClosing(WindowEvent e) {System.exit(0);}
365                 });
366
367
368         frame.pack();
369         frame.setSize(INITIAL_SIZE);
370         frame.setVisible(true);
371         frame.splitter.setDividerLocation(DIVIDER_PROPORTION);
372     }
373
374 }
375
376
Popular Tags