[Ubermq-commits] jms/src/com/ubermq/jms/ui/admin AdminController.java,1.4,1.5 AdminViewer.java,1.5,1
Brought to you by:
jimmyp
From: <ji...@us...> - 2002-12-19 22:36:28
|
Update of /cvsroot/ubermq/jms/src/com/ubermq/jms/ui/admin In directory sc8-pr-cvs1:/tmp/cvs-serv2692/src/com/ubermq/jms/ui/admin Modified Files: AdminController.java AdminViewer.java ServerTreeNode.java Log Message: 1. enhanced administration UI for queues & durable subs 2. bug fix for disconnection Index: AdminController.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/ui/admin/AdminController.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** AdminController.java 30 Oct 2002 19:40:20 -0000 1.4 --- AdminController.java 19 Dec 2002 22:36:24 -0000 1.5 *************** *** 63,67 **** } }, ! false); } --- 63,67 ---- } }, ! true); } Index: AdminViewer.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/ui/admin/AdminViewer.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** AdminViewer.java 6 Dec 2002 15:22:16 -0000 1.5 --- AdminViewer.java 19 Dec 2002 22:36:24 -0000 1.6 *************** *** 45,48 **** --- 45,50 ---- static final ImageIcon stopIcon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/stop.png"))); + static final ImageIcon trashIcon = + new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/trashcan_empty.png"))); static final ImageIcon rightArrowIcon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(AdminViewer.class.getResource("/images/1rightarrow.png"))); Index: ServerTreeNode.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/ui/admin/ServerTreeNode.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ServerTreeNode.java 6 Dec 2002 15:22:16 -0000 1.4 --- ServerTreeNode.java 19 Dec 2002 22:36:24 -0000 1.5 *************** *** 16,23 **** private MySubscriptionsNode subscriptionsNode; private MyConnectionsNode connectionsNode; private static final String SERVER_STATUS = "Server Status", SUBSCRIPTION_TABLE = "Subscription Table", ! CONNECTIONS = "Connections"; ServerTreeNode(MessageServerAdmin admin) --- 16,25 ---- private MySubscriptionsNode subscriptionsNode; private MyConnectionsNode connectionsNode; + private MyPersistentConsumersNode consumersNode; private static final String SERVER_STATUS = "Server Status", SUBSCRIPTION_TABLE = "Subscription Table", ! CONNECTIONS = "Connections", ! CONSUMERS = "Persistent Subscribers"; ServerTreeNode(MessageServerAdmin admin) *************** *** 31,34 **** --- 33,37 ---- this.subscriptionsNode = new MySubscriptionsNode(); this.connectionsNode = new MyConnectionsNode(); + this.consumersNode = new MyPersistentConsumersNode(); // add em *************** *** 36,39 **** --- 39,43 ---- add(subscriptionsNode); add(connectionsNode); + add(consumersNode); } *************** *** 51,54 **** --- 55,59 ---- connectionsNode.refresh(treeModel); serverStatusNode.refresh(treeModel); + consumersNode.refresh(treeModel); } *************** *** 159,165 **** deletions.removeAll(newTree.keySet()); - System.out.println("removing " + deletions); - System.out.println("inserting " + insertions); - // do deletions... iter = deletions.iterator(); --- 164,167 ---- *************** *** 277,280 **** --- 279,496 ---- return AdminViewer.scriptIcon; } + } + + private class MyPersistentConsumersNode + extends DefaultMutableTreeNode + implements AdminTreeNode + { + MyPersistentConsumersNode() + { + super(CONSUMERS, true); + } + + /** + * Gets the image icon for this node, or null to use + * the default. + */ + public ImageIcon getImageIcon() + { + return AdminViewer.envelopeIcon; + } + + /** + * Refreshes the node. + * @param treeModel the model that the node is contained in. + */ + public void refresh(DefaultTreeModel treeModel) throws RemoteException + { + // get a new set of connections + Collection c = admin.getPersistentConsumers(); + + // build a map of the new tree by name. + Map newTree = new HashMap(); + Iterator iter = c.iterator(); + while (iter.hasNext()) + { + PersistentConsumerAdmin ca = (PersistentConsumerAdmin)iter.next(); + newTree.put(ca.getName(), ca); + } + + // build a map of what we already have, indexed by name. + Map alreadyInTree = new HashMap(); + iter = ((children != null) ? children : Collections.EMPTY_LIST).iterator(); + while (iter.hasNext()) + { + MyPersistentConsumerNode ctn = (MyPersistentConsumerNode)iter.next(); + alreadyInTree.put(ctn.getAdmin().getName(), ctn); + } + + // cross reference to get a set of deletions and additions + Set insertions = new HashSet(), deletions = new HashSet(); + insertions.addAll(newTree.keySet()); + insertions.removeAll(alreadyInTree.keySet()); + deletions.addAll(alreadyInTree.keySet()); + deletions.removeAll(newTree.keySet()); + + // do deletions... + iter = deletions.iterator(); + while (iter.hasNext()) + { + MyPersistentConsumerNode ctn = (MyPersistentConsumerNode)alreadyInTree.get(iter.next()); + treeModel.removeNodeFromParent(ctn); + } + + // do insertions + iter = insertions.iterator(); + while (iter.hasNext()) + { + PersistentConsumerAdmin ca = (PersistentConsumerAdmin)newTree.get(iter.next()); + treeModel.insertNodeInto(new MyPersistentConsumerNode(ca), this, 0); + } + } + + /** + * Returns a context menu for the node, or null if + * no context menu should be created. + */ + public JPopupMenu getContextMenu() + { + return null; + } + + /** + * Returns descriptive text about the node. + */ + public String getDescription() + { + return ""; + } + } + + private class MyPersistentConsumerNode + extends DefaultMutableTreeNode + implements AdminTreeNode + { + private PersistentConsumerAdmin pc; + private String description; + private boolean goingAway; + + private ImageIcon openIcon, closedIcon; + + MyPersistentConsumerNode(PersistentConsumerAdmin pc) + throws RemoteException + { + super(pc.getName(), false); + this.pc = pc; + this.goingAway = false; + + if (pc.isQueue()) + { + this.openIcon = AdminViewer.serverIcon; + this.closedIcon = AdminViewer.serverIcon; + } + else + { + this.openIcon = AdminViewer.scriptIcon; + this.closedIcon = AdminViewer.deleteIcon; + } + + // describe + StringBuffer sb = new StringBuffer(); + sb.append("<P><b>Subscribed to: </b>"); + sb.append(pc.getSubscription()); + this.description = sb.toString(); + } + + public PersistentConsumerAdmin getAdmin() + { + return pc; + } + + /** + * Gets the image icon for this node, or null to use + * the default. + */ + public ImageIcon getImageIcon() + { + if (goingAway) + return AdminViewer.trashIcon; + + try + { + return (pc.isActive() ? openIcon : closedIcon); + } + catch (RemoteException e) { + return AdminViewer.deleteIcon; + } + } + + /** + * Refreshes the node. + * @param treeModel the model that the node is contained in. + */ + public void refresh(DefaultTreeModel treeModel) throws RemoteException + { + } + + /** + * Returns a context menu for the node, or null if + * no context menu should be created. + */ + public JPopupMenu getContextMenu() + { + JPopupMenu pm = new JPopupMenu(); + pm.add(new CloseAction()); + return pm; + } + + /** + * Returns descriptive text about the node. + */ + public String getDescription() + { + try + { + return pc.getDescription() + description; + } + catch (RemoteException e) { + return "Unavailable."; + } + } + + + private class CloseAction + extends AbstractAction + { + public CloseAction() {super("Delete", AdminViewer.trashIcon);} + public boolean isEnabled() + { + try + { + return !pc.isActive(); + } + catch (RemoteException e) { + return false; + } + } + public void actionPerformed(java.awt.event.ActionEvent e) + { + try + { + if (JOptionPane.showConfirmDialog(null, + "Deleting this consumer will permanently delete all stored messages. Are you sure you want to continue?", + "Delete", + JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) + { + pc.close(); + goingAway = true; + } + } + catch (Exception x) { + JOptionPane.showMessageDialog(null, x.getMessage()); + } + } + } + } |