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]

Reply via email to