[Ubermq-commits] jms/src/com/ubermq/jms/ui/viewer MessageController.java,1.1,1.2 MessageViewer.java,
Brought to you by:
jimmyp
From: <ji...@us...> - 2002-10-11 21:19:24
|
Update of /cvsroot/ubermq/jms/src/com/ubermq/jms/ui/viewer In directory usw-pr-cvs1:/tmp/cvs-serv24103/src/com/ubermq/jms/ui/viewer Modified Files: MessageController.java MessageViewer.java Log Message: GUI tweaks. Index: MessageController.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/ui/viewer/MessageController.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MessageController.java 11 Oct 2002 17:44:33 -0000 1.1 --- MessageController.java 11 Oct 2002 21:19:20 -0000 1.2 *************** *** 1,5 **** package com.ubermq.jms.ui.viewer; ! import java.text.*; import java.util.*; import javax.jms.*; --- 1,6 ---- package com.ubermq.jms.ui.viewer; ! import EDU.oswego.cs.dl.util.concurrent.*; ! import com.ubermq.jms.client.impl.*; import java.util.*; import javax.jms.*; *************** *** 7,14 **** import javax.swing.tree.*; ! import com.ubermq.jms.client.impl.LocalMessage; /** ! * Controller for message viewer application, containing * tree and table models. */ --- 8,17 ---- import javax.swing.tree.*; ! import javax.jms.Session; ! import javax.jms.TopicConnection; ! import javax.jms.TopicSession; /** ! * The controller for message viewer application, containing * tree and table models. */ *************** *** 19,38 **** private final MessageTreeNode root; ! private final ImmutableTableModel listModel; private static final Object[] columns = new Object[] { ! "Date", "Sender ID", "Sequence", "Type" }; ! private static final int COL_TIMESTAMP = 0, ! COL_SENDER_ID = 1, ! COL_SEQUENCE = 2, ! COL_TYPE = 3; ! ! /** ! * Date formatter for date output. ! */ ! private static final DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss.SSS"); /** --- 22,45 ---- private final MessageTreeNode root; ! private final ReadOnlyTableModel listModel; private static final Object[] columns = new Object[] { ! "Msg #", ! "Received", "Sender ID", "Sequence", "Type" }; ! private static final Class[] columnTypes = new Class[] { ! Integer.class, ! Date.class, ! Long.class, ! Integer.class, ! Class.class ! }; ! private static final int COL_MSG_NUMBER = 0, ! COL_TIMESTAMP = 1, ! COL_SENDER_ID = 2, ! COL_SEQUENCE = 3, ! COL_TYPE = 4; /** *************** *** 49,58 **** model = new DefaultTreeModel(root); ! listModel = new ImmutableTableModel(); listModel.setColumnIdentifiers(columns); allMessages = new HashMap(250); } public TreeModel getTreeModel() {return model;} public TableModel getTableModel() {return listModel;} --- 56,92 ---- model = new DefaultTreeModel(root); ! listModel = new ReadOnlyTableModel(); listModel.setColumnIdentifiers(columns); + listModel.setColumnClasses(columnTypes); allMessages = new HashMap(250); } + /** + * Connects to the server as specified by the connection + * factory, and begins to process messages. + * + * @param f the connection factory + * @param subscription the subscription + */ + void connect(TopicConnectionFactory f, + String subscription) + { + // do it + try + { + TopicConnection cxn = f.createTopicConnection(); + TopicSession session = cxn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); + TopicSubscriber sub = session.createSubscriber(session.createTopic(subscription)); + sub.setMessageListener(this); + + cxn.start(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + public TreeModel getTreeModel() {return model;} public TableModel getTableModel() {return listModel;} *************** *** 67,71 **** // get messages ! Collection c = (Collection)allMessages.get(selection.topic); if (c == null) c = Collections.EMPTY_LIST; --- 101,105 ---- // get messages ! Collection c = (Collection)allMessages.get(selection.getTopic()); if (c == null) c = Collections.EMPTY_LIST; *************** *** 80,111 **** int i=0; while (iter.hasNext() && ! i < n) { ! try ! { ! Message m = (Message)iter.next(); ! x[i][COL_TIMESTAMP] = df.format(new Date(m.getJMSTimestamp())); if (m instanceof BytesMessage) { ! x[i][COL_TYPE] = "BytesMessage"; } else if (m instanceof ObjectMessage) { ! x[i][COL_TYPE] = "ObjectMessage"; } else if (m instanceof StreamMessage) { ! x[i][COL_TYPE] = "StreamMessage"; } else if (m instanceof TextMessage) { ! x[i][COL_TYPE] = "TextMessage"; } else { ! x[i][COL_TYPE] = "No Body"; } ! LocalMessage lm = (LocalMessage)m; ! x[i][COL_SENDER_ID] = new Long(lm.getSenderId()); ! x[i][COL_SEQUENCE] = new Integer(lm.getSequence()); ! // save the message object in the user block. ! user[i] = m; } catch (Exception e) { ! x[i][1] = "Non UberMQ message"; } --- 114,154 ---- int i=0; while (iter.hasNext() && ! i < n) { ! try { ! MessageHolder mh = (MessageHolder)iter.next(); ! Message m = mh.getMessage(); ! ! x[i][COL_MSG_NUMBER] = new Integer(mh.getMessageNumber()); ! x[i][COL_TIMESTAMP] = new Date(mh.getTimestamp()); if (m instanceof BytesMessage) { ! x[i][COL_TYPE] = BytesMessage.class; } else if (m instanceof ObjectMessage) { ! x[i][COL_TYPE] = ObjectMessage.class; } else if (m instanceof StreamMessage) { ! x[i][COL_TYPE] = StreamMessage.class; } else if (m instanceof TextMessage) { ! x[i][COL_TYPE] = TextMessage.class; } else { ! x[i][COL_TYPE] = Message.class; } ! try ! { ! LocalMessage lm = (LocalMessage)m; ! x[i][COL_SENDER_ID] = new Long(lm.getSenderId()); ! x[i][COL_SEQUENCE] = new Integer(lm.getSequence()); ! // save the message object in the user block. ! user[i] = m; ! } ! catch (ClassCastException cce) ! { ! x[i][COL_SENDER_ID] = x[i][COL_SEQUENCE] = "?"; ! } } catch (Exception e) { ! com.ubermq.Utility.getLogger().throwing("","",e); } *************** *** 144,148 **** allMessages.put(topic, c); } ! c.add(p0); return topic; --- 187,191 ---- allMessages.put(topic, c); } ! c.add(new MessageHolder(p0)); return topic; *************** *** 196,278 **** } } - } - - private static class ImmutableTableModel - extends DefaultTableModel - { - private Object[] user; - - public ImmutableTableModel() - { - super(); - } - - public boolean isCellEditable(int row, int col) - { - return false; - } - - public void setRows(Object[][] data) - { - this.dataVector = convertToVector(data); - fireTableDataChanged(); - } - - public void setUserData(Object[] user) - { - this.user = user; - } ! public Object getUserData(int row) ! { ! return user[row]; ! } } ! private static class MessageTreeNode ! extends DefaultMutableTreeNode { ! private String topic; ! private String friendlyValue; ! ! public MessageTreeNode(String fullTopic, ! String friendlyValue) ! { ! this.topic = fullTopic; ! this.friendlyValue = friendlyValue; ! } ! ! /** ! * Finds a child that equals the prototype node. ! * ! * @return a node, or null if the node was not present. ! */ ! public MessageTreeNode findChild(MessageTreeNode mtn) ! { ! // go thru the kids ! Enumeration enum = children(); ! while (enum.hasMoreElements()) ! { ! DefaultMutableTreeNode child = (DefaultMutableTreeNode)enum.nextElement(); ! if (child.equals(mtn)) { ! return (MessageTreeNode)child; ! } ! } ! return null; ! } ! public boolean equals(Object o) { ! if (o instanceof MessageTreeNode) { ! return (((MessageTreeNode)o).topic.equals(topic)); ! } else { ! return false; ! } } ! public int hashCode() {return topic.hashCode();} ! public String toString() {return friendlyValue;} } } --- 239,267 ---- } } ! // tell the leaf there was a new message ! mine.newMessage(); } ! private static class MessageHolder { ! private Message m; ! private long timestamp; ! private int number; ! private static final SynchronizedInt nextNumber = new SynchronizedInt(0); ! private MessageHolder(Message m) { ! this.m = m; ! this.timestamp = System.currentTimeMillis(); ! this.number = nextNumber.increment(); } ! public Message getMessage() {return m;} ! public long getTimestamp() {return timestamp;} ! public int getMessageNumber() {return number;} } + } Index: MessageViewer.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/ui/viewer/MessageViewer.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MessageViewer.java 11 Oct 2002 17:44:33 -0000 1.1 --- MessageViewer.java 11 Oct 2002 21:19:20 -0000 1.2 *************** *** 1,7 **** package com.ubermq.jms.ui.viewer; import java.awt.event.*; import java.text.*; ! import javax.jms.*; import javax.swing.*; import javax.swing.event.*; --- 1,9 ---- package com.ubermq.jms.ui.viewer; + import com.ubermq.jms.client.*; + import java.awt.*; import java.awt.event.*; import java.text.*; ! import java.util.*; import javax.swing.*; import javax.swing.event.*; *************** *** 9,16 **** import javax.swing.tree.*; - import com.ubermq.jms.client.UnicastTopicConnectionFactory; - import java.awt.BorderLayout; - import java.util.Date; - /** * A Swing-based message viewer window that handles incoming --- 11,14 ---- *************** *** 36,39 **** --- 34,38 ---- topicTree.expandRow(0); topicTree.setScrollsOnExpand(true); + topicTree.setCellRenderer(new MyTreeCellRenderer(topicTree.getFont())); final TreeSelectionModel tsm = new DefaultTreeSelectionModel(); *************** *** 74,79 **** public void valueChanged(javax.swing.event.TreeSelectionEvent e) { ! TreeNode mtn = (TreeNode)tsm.getLeadSelectionPath().getLastPathComponent(); c.populateList(mtn); } --- 73,79 ---- public void valueChanged(javax.swing.event.TreeSelectionEvent e) { ! MessageTreeNode mtn = (MessageTreeNode)tsm.getLeadSelectionPath().getLastPathComponent(); c.populateList(mtn); + mtn.viewed(); } *************** *** 113,117 **** { private static final DateFormat df = ! new SimpleDateFormat("dd MMM yy hh:mm:ss.SSS"); public java.awt.Component getTableCellRendererComponent(JTable table, --- 113,117 ---- { private static final DateFormat df = ! new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS"); public java.awt.Component getTableCellRendererComponent(JTable table, *************** *** 129,132 **** --- 129,183 ---- column); } + } + + private static class MyTreeCellRenderer + extends DefaultTreeCellRenderer + implements TreeCellRenderer + { + private final Font plainFont, newMessageFont; + + public MyTreeCellRenderer(Font plainFont) + { + super(); + this.plainFont = plainFont; + this.newMessageFont = plainFont.deriveFont(Font.BOLD); + } + + /** + * Sets the value of the current tree cell to <code>value</code>. + * If <code>selected</code> is true, the cell will be drawn as if + * selected. If <code>expanded</code> is true the node is currently + * expanded and if <code>leaf</code> is true the node represets a + * leaf and if <code>hasFocus</code> is true the node currently has + * focus. <code>tree</code> is the <code>JTree</code> the receiver is being + * configured for. Returns the <code>Component</code> that the renderer + * uses to draw the value. + * + * @return the <code>Component</code> that the renderer uses to draw the value + */ + public Component getTreeCellRendererComponent(JTree tree, + Object value, + boolean selected, + boolean expanded, + boolean leaf, + int row, + boolean hasFocus) + { + TreePath path = tree.getPathForRow(row); + if (path != null) { + MessageTreeNode mtn = (MessageTreeNode)path.getLastPathComponent(); + + if (mtn.hasNewMessages()) { + setFont(newMessageFont); + } else { + setFont(plainFont); + } + } else { + setFont(plainFont); + } + + super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + return this; + } } *************** *** 139,156 **** MessageController c = new MessageController(); ! // connect ! try ! { ! TopicConnection cxn = new UnicastTopicConnectionFactory("localhost", 3999).createTopicConnection(); ! TopicSession session = cxn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); ! TopicSubscriber sub = session.createSubscriber(session.createTopic("#")); ! sub.setMessageListener(c); ! ! cxn.start(); ! } ! catch (Exception e) ! { ! e.printStackTrace(); ! } // display --- 190,195 ---- MessageController c = new MessageController(); ! // for now, connect locally ! c.connect(new UnicastTopicConnectionFactory("localhost", 3999), "#"); // display |