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 private final Action connectAction, 24 disconnectAction, 25 refreshAction, 26 exitAction, 27 viewRefreshAction; 28 29 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 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 messagePane = new JEditorPane("text/html", ""); 76 messagePane.setEditable(false); 77 78 Component right = new JScrollPane(messagePane); 80 81 splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, 83 new JScrollPane(serverTree), 84 right); 85 86 getContentPane().add(splitter, BorderLayout.CENTER); 88 89 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 setJMenuBar(setupMenuBar()); 101 102 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 SwingUtilities.invokeLater(new Runnable () { 118 public void run() 119 { 120 serverTree.expandPath(e.getTreePath()); 121 } 122 }); 123 } 124 }); 125 126 serverTree.addTreeSelectionListener(new TreeSelectionListener() { 130 131 135 public void valueChanged(javax.swing.event.TreeSelectionEvent e) 136 { 137 TreeNode selection = null; 138 if (!tsm.isSelectionEmpty()) { 139 selection = (TreeNode)tsm.getSelectionPath().getLastPathComponent(); 140 setMessageFromNode(selection); 141 } 142 143 viewRefreshAction.setEnabled(!tsm.isSelectionEmpty()); 145 disconnectAction.setEnabled(selection instanceof ServerTreeNode); 146 refreshAction.setEnabled(selection instanceof ServerTreeNode); 147 } 148 149 }); 150 151 MouseListener popupListener = new PopupListener(); 153 serverTree.addMouseListener(popupListener); 154 } 155 156 private void setMessageFromNode(TreeNode selection) 157 { 158 String 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 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 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 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 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 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 JMenu viewMenu = new JMenu("View"); 266 viewMenu.add(viewRefreshAction); 267 268 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 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 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 getTableCellRendererComponent(JTable table, 335 Object 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 )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 356 public static void main(String [] args) 357 { 358 AdminController c = new AdminController(); 359 360 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 |