psmith      2003/09/04 23:11:11

  Modified:    src/java/org/apache/log4j/chainsaw
                        ReceiverTreeCellRenderer.java ReceiversPanel.java
                        ReceiversTreeModel.java
  Log:
  Changed the way Receivers and thresholds are displayed/managed
  within the Receiver panel.
  
  The Threshold of the receiver is displayed via an icon, and
  can be modified directly via a popup menu.
  
  Revision  Changes    Path
  1.3       +53 -15    
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiverTreeCellRenderer.java
  
  Index: ReceiverTreeCellRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiverTreeCellRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ReceiverTreeCellRenderer.java     28 Aug 2003 23:56:57 -0000      1.2
  +++ ReceiverTreeCellRenderer.java     5 Sep 2003 06:11:11 -0000       1.3
  @@ -49,20 +49,25 @@
   
   package org.apache.log4j.chainsaw;
   
  -import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  -import org.apache.log4j.net.AddressBased;
  -import org.apache.log4j.net.NetworkBased;
  -import org.apache.log4j.net.PortBased;
  -import org.apache.log4j.plugins.Pauseable;
  -
  +import java.awt.BorderLayout;
   import java.awt.Component;
   
   import javax.swing.Icon;
   import javax.swing.ImageIcon;
  +import javax.swing.JLabel;
  +import javax.swing.JPanel;
   import javax.swing.JTree;
   import javax.swing.tree.DefaultMutableTreeNode;
   import javax.swing.tree.DefaultTreeCellRenderer;
   
  +import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  +import org.apache.log4j.chainsaw.icons.LevelIconFactory;
  +import org.apache.log4j.net.AddressBased;
  +import org.apache.log4j.net.NetworkBased;
  +import org.apache.log4j.net.PortBased;
  +import org.apache.log4j.plugins.Pauseable;
  +import org.apache.log4j.spi.Thresholdable;
  +
   
   /**
    * A TreeCellRenderer that can format the information of Receivers
  @@ -76,9 +81,15 @@
     private Icon inactiveReceiverIcon =
       new ImageIcon(ChainsawIcons.ICON_INACTIVE_RECEIVER);
     private Icon rootIcon = new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT);
  +  private JPanel panel = new JPanel();
  +  private JLabel levelLabel = new JLabel();
   
     public ReceiverTreeCellRenderer() {
       super();
  +    panel.setOpaque(false);
  +    panel.setLayout(new BorderLayout());
  +    panel.add(this, BorderLayout.CENTER);
  +    panel.add(levelLabel, BorderLayout.WEST);
     }
   
     public Component getTreeCellRendererComponent(
  @@ -90,8 +101,9 @@
       DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
       Object o = node.getUserObject();
       setText(o.toString());
  +
       String tooltip = "";
  -    
  +
       /**
        * Deal with Text
        */
  @@ -110,9 +122,18 @@
           buf.append("::").append(portBased.getPort());
         }
   
  -      buf.append(" ").append("(")
  -         .append(networkBased.isActive() ? "active" : "inactive").append(")");
  +      buf.append("\n ").append("(").append(
  +        networkBased.isActive() ? "active" : "inactive");
   
  +      if (o instanceof Thresholdable) {
  +        Thresholdable t = (Thresholdable) o;
  +
  +        if (t.getThreshold() != null) {
  +          buf.append(",").append(t.getThreshold());
  +        }
  +      }
  +
  +      buf.append(")");
         setText(buf.toString());
       } else if (
         o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) {
  @@ -133,13 +154,11 @@
         if (networkBased.isActive()) {
           if ((o instanceof Pauseable) && !((Pauseable) o).isPaused()) {
             setIcon(activeReceiverIcon);
  -          tooltip +="This item is active, and can be paused";
  -        } 
  -        else if ((o instanceof Pauseable) && ((Pauseable) o).isPaused()) {
  +          tooltip += "This item is active, and can be paused";
  +        } else if ((o instanceof Pauseable) && ((Pauseable) o).isPaused()) {
             setIcon(inactiveReceiverIcon);
             tooltip += "This item is paused, and can be resumed";
  -        }
  -        else {
  +        } else {
             setIcon(null);
             tooltip += " This item cannot be Paused/Resumed";
           }
  @@ -149,7 +168,26 @@
         o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) {
         setIcon(rootIcon);
       }
  +
  +    levelLabel.setText(null);
  +    levelLabel.setIcon(null);
  +
  +    if (o instanceof Thresholdable) {
  +      Thresholdable t = (Thresholdable) o;
  +
  +      if (t.getThreshold() != null) {
  +        levelLabel.setIcon(
  +          (Icon) LevelIconFactory.getInstance().getLevelToIconMap().get(
  +            t.getThreshold().toString()));
  +
  +        if (levelLabel.getIcon() == null) {
  +          levelLabel.setText(t.getThreshold().toString());
  +        }
  +      }
  +    }
  +
       setToolTipText(tooltip);
  -    return this;
  +
  +    return panel;
     }
   }
  
  
  
  1.10      +92 -92    
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java
  
  Index: ReceiversPanel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ReceiversPanel.java       3 Sep 2003 23:22:09 -0000       1.9
  +++ ReceiversPanel.java       5 Sep 2003 06:11:11 -0000       1.10
  @@ -49,6 +49,23 @@
   
   package org.apache.log4j.chainsaw;
   
  +import org.apache.log4j.Level;
  +import org.apache.log4j.LogManager;
  +import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  +import org.apache.log4j.chainsaw.icons.LevelIconFactory;
  +import org.apache.log4j.chainsaw.icons.LineIconFactory;
  +import org.apache.log4j.helpers.LogLog;
  +import org.apache.log4j.net.SocketAppender;
  +import org.apache.log4j.net.SocketHubAppender;
  +import org.apache.log4j.net.SocketHubReceiver;
  +import org.apache.log4j.net.SocketNodeEventListener;
  +import org.apache.log4j.net.SocketReceiver;
  +import org.apache.log4j.net.UDPAppender;
  +import org.apache.log4j.net.UDPReceiver;
  +import org.apache.log4j.plugins.Pauseable;
  +import org.apache.log4j.plugins.PluginRegistry;
  +import org.apache.log4j.plugins.Receiver;
  +
   import java.awt.BorderLayout;
   import java.awt.Color;
   import java.awt.Component;
  @@ -60,11 +77,16 @@
   import java.awt.event.ActionEvent;
   import java.awt.event.KeyEvent;
   import java.awt.event.KeyListener;
  +
   import java.beans.PropertyChangeEvent;
   import java.beans.PropertyChangeListener;
  +
   import java.io.IOException;
  +
   import java.lang.reflect.Method;
  +
   import java.net.URL;
  +
   import java.util.ArrayList;
   import java.util.Collection;
   import java.util.Collections;
  @@ -79,9 +101,11 @@
   import javax.swing.Action;
   import javax.swing.BorderFactory;
   import javax.swing.Box;
  +import javax.swing.Icon;
   import javax.swing.ImageIcon;
   import javax.swing.InputVerifier;
   import javax.swing.JButton;
  +import javax.swing.JCheckBoxMenuItem;
   import javax.swing.JComponent;
   import javax.swing.JDialog;
   import javax.swing.JEditorPane;
  @@ -104,22 +128,6 @@
   import javax.swing.event.TreeSelectionListener;
   import javax.swing.tree.DefaultMutableTreeNode;
   
  -import org.apache.log4j.Level;
  -import org.apache.log4j.LogManager;
  -import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  -import org.apache.log4j.chainsaw.icons.LineIconFactory;
  -import org.apache.log4j.helpers.LogLog;
  -import org.apache.log4j.net.SocketAppender;
  -import org.apache.log4j.net.SocketHubAppender;
  -import org.apache.log4j.net.SocketHubReceiver;
  -import org.apache.log4j.net.SocketNodeEventListener;
  -import org.apache.log4j.net.SocketReceiver;
  -import org.apache.log4j.net.UDPAppender;
  -import org.apache.log4j.net.UDPReceiver;
  -import org.apache.log4j.plugins.Pauseable;
  -import org.apache.log4j.plugins.PluginRegistry;
  -import org.apache.log4j.plugins.Receiver;
  -
   
   /**
    * This panel is used to manage all the Receivers configured within Log4j
  @@ -478,7 +486,7 @@
     }
   
     /**
  -   * Sets the state of actions depending on certain conditions (i.e what is 
  +   * Sets the state of actions depending on certain conditions (i.e what is
      * currently selected etc.)
      */
     private void updateActions() {
  @@ -534,34 +542,34 @@
     class NewReceiverPopupMenu extends JPopupMenu {
       NewReceiverPopupMenu() {
         try {
  -
           final List dialogMapEntryList = createSortedDialogMapEntryList();
           String separatorCheck = null;
  +
           for (Iterator iter = dialogMapEntryList.iterator(); iter.hasNext();) {
             final Map.Entry entry = (Entry) iter.next();
             final Class toCreate = (Class) entry.getKey();
             Package thePackage = toCreate.getPackage();
             final String name =
               toCreate.getName().substring(thePackage.getName().length() + 1);
  -            
  -          if(separatorCheck==null)
  -          {
  -            separatorCheck = name.substring(0,1);
  -          }else{
  -            String current = name.substring(0,1);
  -            if(!current.equals(separatorCheck))
  -            {
  +
  +          if (separatorCheck == null) {
  +            separatorCheck = name.substring(0, 1);
  +          } else {
  +            String current = name.substring(0, 1);
  +
  +            if (!current.equals(separatorCheck)) {
                 addSeparator();
                 separatorCheck = current;
               }
             }
  +
             add(
               new AbstractAction("New " + name + "...") {
                 public void actionPerformed(ActionEvent e) {
  -                  JDialog dialog = (JDialog) entry.getValue();
  -                  dialog.pack();
  -                  dialog.setLocationRelativeTo(logui);
  -                  dialog.show();
  +                JDialog dialog = (JDialog) entry.getValue();
  +                dialog.pack();
  +                dialog.setLocationRelativeTo(logui);
  +                dialog.show();
                 }
               });
           }
  @@ -583,60 +591,56 @@
         }
       }
   
  -  /**
  -   * Creates a Map of Class->CreateReceiverDialog instances
  -   * which are all the Receivers that can be created via the GUI
  -   * @return
  -   * @throws IOException
  -   */
  -    private List createSortedDialogMapEntryList() throws IOException
  -    {
  +    /**
  +     * Creates a Map of Class->CreateReceiverDialog instances
  +     * which are all the Receivers that can be created via the GUI
  +     * @return
  +     * @throws IOException
  +     */
  +    private List createSortedDialogMapEntryList() throws IOException {
         final Map dialogMap = new HashMap();
         dialogMap.put(
           SocketReceiver.class,
           new CreateReceiverDialog(
             SocketReceiver.class, "SocketReceiver", "Socket Receiver",
             new SimplePortBasedReceiverDialogPanel(
  -            SocketReceiver.class, "SocketReceiver",
  -            SocketAppender.DEFAULT_PORT)));
  +            SocketReceiver.class, "SocketReceiver", SocketAppender.DEFAULT_PORT)));
   
         dialogMap.put(
           SocketHubReceiver.class,
           new CreateReceiverDialog(
  -        SocketHubReceiver.class, "SocketHubReceiver", "Socket Hub Receiver",
  +          SocketHubReceiver.class, "SocketHubReceiver", "Socket Hub Receiver",
             new SimplePortBasedReceiverDialogPanel(
  -      SocketHubReceiver.class, "SocketHubReceiver",
  +            SocketHubReceiver.class, "SocketHubReceiver",
               SocketHubAppender.DEFAULT_PORT)));
  -      
  +
         dialogMap.put(
           UDPReceiver.class,
           new CreateReceiverDialog(
             UDPReceiver.class, "UDPReceiver", "UDP Receiver",
             new SimplePortBasedReceiverDialogPanel(
               UDPReceiver.class, "UDPReceiver", UDPAppender.DEFAULT_PORT)));
  -      
  +
         List dialogMapEntryList = new ArrayList();
  -      
  -      for (Iterator iter = dialogMap.entrySet().iterator(); iter.hasNext();)
  -      {
  +
  +      for (Iterator iter = dialogMap.entrySet().iterator(); iter.hasNext();) {
           dialogMapEntryList.add(iter.next());
         }
   
         /**
          * Sort so it's in Alpha order by map.entry key
  -       */      
  -      Collections.sort(dialogMapEntryList, new Comparator(){
  +       */
  +      Collections.sort(
  +        dialogMapEntryList,
  +        new Comparator() {
  +          public int compare(Object o1, Object o2) {
  +            Comparable c1 = ((Class) ((Entry) o1).getKey()).getName();
  +            Comparable c2 = ((Class) ((Entry) o2).getKey()).getName();
   
  -        public int compare(Object o1, Object o2)
  -        {
  -          Comparable c1 = ((Class)((Entry) o1).getKey()).getName();
  -          Comparable c2 = ((Class)((Entry) o2).getKey()).getName();
  -          
  -          return c1.compareTo(c2);
  +            return c1.compareTo(c2);
  +          }
  +        });
   
  -        }
  -        
  -      });
         return dialogMapEntryList;
       }
     }
  @@ -703,8 +707,37 @@
         add(shutdownReceiverButtonAction);
         addSeparator();
         add(editReceiverButtonAction);
  +     addSeparator();
  +     
  +       final Receiver r = getCurrentlySelectedReceiver();
  +       add(createLevelCheckBoxMenuItem(r, Level.DEBUG));
  +       add(createLevelCheckBoxMenuItem(r, Level.INFO));
  +       add(createLevelCheckBoxMenuItem(r, Level.WARN));
  +       add(createLevelCheckBoxMenuItem(r, Level.ERROR));
  +       addSeparator();
  +       add(createLevelCheckBoxMenuItem(r, Level.OFF));
  +       add(createLevelCheckBoxMenuItem(r, Level.ALL));
  +       
       }
   
  +
  +     private JCheckBoxMenuItem createLevelCheckBoxMenuItem(final Receiver r, final 
Level l) {
  +             Map levelIconMap = LevelIconFactory.getInstance().getLevelToIconMap();
  +
  +             Action action = new 
AbstractAction(l.toString(),(Icon)levelIconMap.get(l.toString())){
  +
  +                             public void actionPerformed(ActionEvent e) {
  +                                     if(r!=null){
  +                                             r.setThreshold(l);
  +                                             
updateCurrentlySelectedNodeInDispatchThread();
  +                                     }
  +                             }
  +             };
  +             JCheckBoxMenuItem item = new JCheckBoxMenuItem(action);
  +             item.setSelected(r.getThreshold() == l);
  +             return item;
  +     }
  +     
       /**
        * Builds a relevant set of menus for when the Root node in the Receiver
        * tree has been selected
  @@ -718,40 +751,6 @@
   
         addSeparator();
         add(startAll);
  -
  -      final JDialog dialog = new JDialog(logui, "Set Threshold", true);
  -      Container container = dialog.getContentPane();
  -      final ThresholdSlider thresholdSlider = new ThresholdSlider();
  -      thresholdSlider.getModel().addChangeListener(
  -        new ChangeListener() {
  -          public void stateChanged(ChangeEvent e) {
  -            if (thresholdSlider.getValueIsAdjusting()) {
  -              return;
  -            }
  -
  -            Level level = thresholdSlider.getSelectedLevel();
  -            LogManager.getLoggerRepository().setThreshold(level);
  -            logui.getStatusBar().setMessage(
  -              "Adjusted Log4j repository threshold to " + level);
  -            getReceiverTreeModel().updateRootDisplay();
  -          }
  -        });
  -
  -      container.add(thresholdSlider);
  -      dialog.setResizable(false);
  -      dialog.pack();
  -
  -      Action setThresholdAction =
  -        new AbstractAction("Set Threshold...") {
  -          public void actionPerformed(ActionEvent e) {
  -            thresholdSlider.setChosenLevel(
  -              LogManager.getLoggerRepository().getThreshold());
  -            dialog.setLocationRelativeTo(receiversTree);
  -            dialog.show();
  -          }
  -        };
  -
  -      add(setThresholdAction);
       }
   
       private JMenuItem createNotDoneYet() {
  @@ -1148,6 +1147,7 @@
         }
   
         receiver.setName(name + suffix);
  +      receiver.setThreshold(Level.DEBUG);
         PluginRegistry.startPlugin(receiver);
         updateReceiverTreeInDispatchThread();
       }
  
  
  
  1.3       +6 -7      
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversTreeModel.java
  
  Index: ReceiversTreeModel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversTreeModel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ReceiversTreeModel.java   27 Jun 2003 03:25:23 -0000      1.2
  +++ ReceiversTreeModel.java   5 Sep 2003 06:11:11 -0000       1.3
  @@ -49,17 +49,17 @@
   
   package org.apache.log4j.chainsaw;
   
  -import org.apache.log4j.LogManager;
  -import org.apache.log4j.net.SocketReceiver;
  -import org.apache.log4j.plugins.PluginRegistry;
  -import org.apache.log4j.plugins.Receiver;
  -
   import java.util.Collection;
   import java.util.Iterator;
   
   import javax.swing.tree.DefaultMutableTreeNode;
   import javax.swing.tree.DefaultTreeModel;
   
  +import org.apache.log4j.LogManager;
  +import org.apache.log4j.net.SocketReceiver;
  +import org.apache.log4j.plugins.PluginRegistry;
  +import org.apache.log4j.plugins.Receiver;
  +
   
   /**
    * A TreeModel that encapsulates the details of all the Receivers and their
  @@ -126,8 +126,7 @@
      */
     void updateRootDisplay() {
       getRootNode().setUserObject(
  -      ROOTNODE_LABEL + " (" + LogManager.getLoggerRepository().getThreshold()
  -      + ")");
  +      ROOTNODE_LABEL );
       nodeChanged(getRootNode());
     }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to