psmith 2003/06/17 00:21:19 Modified: src/java/org/apache/log4j/chainsaw ChainsawToolBarAndMenus.java Log: created an internal ReceiverFormatter chain to render specific receivers differently. For those that are PortBased or AddressBased then the format of the node in the tree now looks a lot nicer. Revision Changes Path 1.36 +107 -36 jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java Index: ChainsawToolBarAndMenus.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- ChainsawToolBarAndMenus.java 17 Jun 2003 06:40:17 -0000 1.35 +++ ChainsawToolBarAndMenus.java 17 Jun 2003 07:21:19 -0000 1.36 @@ -55,12 +55,10 @@ package org.apache.log4j.chainsaw; import java.awt.BorderLayout; -import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.Graphics; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -96,7 +94,6 @@ import javax.swing.JScrollPane; import javax.swing.JSlider; import javax.swing.JTabbedPane; -import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.JToolBar; @@ -114,13 +111,10 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.AbstractTableModel; -import javax.swing.table.DefaultTableCellRenderer; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreeModel; -import javax.swing.tree.TreeNode; import org.apache.log4j.LogManager; import org.apache.log4j.chainsaw.icons.ChainsawIcons; import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent; @@ -128,9 +122,9 @@ import org.apache.log4j.chainsaw.prefs.SettingsListener; import org.apache.log4j.chainsaw.prefs.SettingsManager; import org.apache.log4j.helpers.LogLog; -import org.apache.log4j.net.MulticastReceiver; +import org.apache.log4j.net.AddressBased; +import org.apache.log4j.net.PortBased; import org.apache.log4j.net.SocketReceiver; -import org.apache.log4j.net.UDPReceiver; import org.apache.log4j.plugins.PluginRegistry; import org.apache.log4j.plugins.Receiver; @@ -149,6 +143,7 @@ //~ Instance fields ========================================================= + final JDialog receiversWindow; final JTextField findTextField; private final Action clearAction; private final Action closeAction; @@ -182,8 +177,7 @@ private String lastFind = ""; private String levelDisplay = ChainsawConstants.LEVEL_DISPLAY_ICONS; private final Action[] logPanelSpecificActions; - final JDialog receiversWindow; - + //~ Constructors ============================================================ ChainsawToolBarAndMenus(final LogUI logui) @@ -217,9 +211,6 @@ }; } - void lookAndFeelUpdated() { - SwingUtilities.updateComponentTreeUI(receiversWindow); - } //~ Methods ================================================================= /** @@ -477,6 +468,11 @@ return toolbar; } + void lookAndFeelUpdated() + { + SwingUtilities.updateComponentTreeUI(receiversWindow); + } + private Action createClearAction() { final Action action = @@ -931,11 +927,10 @@ */ private Action createShowReceiversAction() { - final JTree tree = new JTree(ReceiversTreeModel.create()); - - tree.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); - + + tree.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + tree.setCellRenderer(new ReceiverTreeCellRenderer()); final Container container = receiversWindow.getContentPane(); @@ -1298,37 +1293,61 @@ /** * DOCUMENT ME! * - * @author $author$ + * @author Paul Smith <[EMAIL PROTECTED]> * @version $Revision$ */ public static class ReceiverTreeCellRenderer extends DefaultTreeCellRenderer { //~ Instance fields ======================================================= - protected Color m_bkNonSelectionColor; - protected Color m_bkSelectionColor; - protected Color m_borderSelectionColor; - protected Color m_textNonSelectionColor; - protected Color m_textSelectionColor; private Icon activeReceiverIcon = new ImageIcon(ChainsawIcons.ICON_ACTIVE_RECEIVER); private Icon inactiveReceiverIcon = new ImageIcon(ChainsawIcons.ICON_INACTIVE_RECEIVER); private Icon rootIcon = new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT); - private boolean m_selected; + private ReceiverFormatterChain chain; //~ Constructors ========================================================== public ReceiverTreeCellRenderer() { super(); + chain = new ReceiverFormatterChain(); + chain.add( + new ReceiverFormatter() + { + public String formatDetail(Receiver receiver) + { + if (!(receiver instanceof PortBased)) + { + return null; + } + + PortBased portBased = (PortBased) receiver; + + StringBuffer buf = new StringBuffer(receiver.getName()); + + if (receiver instanceof AddressBased) + { + buf.append("::").append(((AddressBased) receiver).getAddress()); + } - // m_textSelectionColor = UIManager.getColor("Tree.selectionForeground"); - // m_textNonSelectionColor = UIManager.getColor("Tree.textForeground"); - // m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground"); - // m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground"); - // m_borderSelectionColor = UIManager.getColor("Tree.selectionBorderColor"); - // setOpaque(false); + buf.append("::").append(portBased.getPort()).append(" ").append( + "(").append(receiver.isActive() ? "running" : "inactive").append( + ")"); + + return buf.toString(); + } + }); + + chain.add( + new ReceiverFormatter() + { + public String formatDetail(Receiver receiver) + { + return "(Unknown Type) :: " + receiver; + } + }); } //~ Methods =============================================================== @@ -1361,10 +1380,10 @@ { setIcon(rootIcon); } - else if (obj instanceof SocketReceiver) + else if (obj instanceof Receiver) { - SocketReceiver receiver = (SocketReceiver) obj; - setText(receiver.getName() + "::" + receiver.getPort()); + Receiver receiver = (Receiver) obj; + setText(chain.formatDetail(receiver)); if (receiver.isActive()) { @@ -1377,6 +1396,58 @@ } return this; + } + + //~ Inner Interfaces ====================================================== + + private static interface ReceiverFormatter + { + //~ Methods ============================================================= + + /** + * Returns a formatted string for the receiver or null if it cannot. + * @param receiver + * @return + */ + public String formatDetail(Receiver receiver); + } + + //~ Inner Classes ========================================================= + + private static class ReceiverFormatterChain implements ReceiverFormatter + { + //~ Instance fields ===================================================== + + private Collection collection = new ArrayList(); + + //~ Methods ============================================================= + + /** + * @param formatter + */ + public void add(ReceiverFormatter formatter) + { + collection.add(formatter); + } + + /* (non-Javadoc) + * @see org.apache.log4j.chainsaw.ChainsawToolBarAndMenus.ReceiverTreeCellRenderer.ReceiverFormatter#formatDetail(org.apache.log4j.plugins.Receiver) + */ + public String formatDetail(Receiver receiver) + { + for (Iterator iter = collection.iterator(); iter.hasNext();) + { + ReceiverFormatter item = (ReceiverFormatter) iter.next(); + String detail = item.formatDetail(receiver); + + if (detail != null) + { + return detail; + } + } + + return null; + } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]