psmith      2003/10/09 15:07:13

  Modified:    src/java/org/apache/log4j/chainsaw LoggerNameTreePanel.java
  Log:
  Made this visual and model component class be a Rule and
  notify parties of change.
  
  Revision  Changes    Path
  1.14      +88 -35    
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
  
  Index: LoggerNameTreePanel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- LoggerNameTreePanel.java  23 Sep 2003 23:11:32 -0000      1.13
  +++ LoggerNameTreePanel.java  9 Oct 2003 22:07:12 -0000       1.14
  @@ -53,7 +53,10 @@
   
   import org.apache.log4j.chainsaw.icons.ChainsawIcons;
   import org.apache.log4j.chainsaw.icons.LineIconFactory;
  +import org.apache.log4j.chainsaw.rule.AbstractRule;
  +import org.apache.log4j.chainsaw.rule.Rule;
   import org.apache.log4j.helpers.LogLog;
  +import org.apache.log4j.spi.LoggingEvent;
   
   import java.awt.BorderLayout;
   import java.awt.Component;
  @@ -108,10 +111,12 @@
   
   /**
    * A panel that encapsulates the Logger Name tree, with associated actions
  + * and implements the Rule interface so that it can filter in/out events
  + * that do not match the users request for refining the view based on Loggers.
    *
    * @author Paul Smith <[EMAIL PROTECTED]>
    */
  -final class LoggerNameTreePanel extends JPanel {
  +final class LoggerNameTreePanel extends JPanel implements Rule {
     private static final int WARN_DEPTH = 4;
     private final JTree logTree;
     private final JScrollPane scrollTree;
  @@ -140,6 +145,12 @@
     private final PopupListener popupListener;
     private final Set hiddenSet = new HashSet();
     private final EventListenerList listenerList = new EventListenerList();
  +  private Rule ruleDelegate =
  +    new AbstractRule() {
  +      public boolean evaluate(LoggingEvent e) {
  +        return true;
  +      }
  +    };
   
     /**
      * @param logTreeModel
  @@ -459,12 +470,12 @@
               (path != null) && (node != null) && (node.getParent() != null)
               && !hiddenSet.contains(logger));
             hideAction.setEnabled(
  -            (path != null) && (node != null) && (node.getParent() != null) && 
!isFocusOnSelected());
  +            (path != null) && (node != null) && (node.getParent() != null)
  +            && !isFocusOnSelected());
   
             if (!focusOnAction.isEnabled()) {
               setFocusOnSelected(false);
  -          }else{
  -              
  +          } else {
             }
   
             expandAction.setEnabled(path != null);
  @@ -502,18 +513,18 @@
             fireChangeEvent();
           }
         });
  -      
  -      hideAction.addPropertyChangeListener(new PropertyChangeListener(){
   
  -             public void propertyChange(PropertyChangeEvent evt) {
  -            if (logTree.getSelectionPath() != null) {
  -              logTreeModel.nodeChanged(
  -                (TreeNode) logTree.getSelectionPath().getLastPathComponent());
  -            }
  +    hideAction.addPropertyChangeListener(
  +      new PropertyChangeListener() {
  +        public void propertyChange(PropertyChangeEvent evt) {
  +          if (logTree.getSelectionPath() != null) {
  +            logTreeModel.nodeChanged(
  +              (TreeNode) logTree.getSelectionPath().getLastPathComponent());
  +          }
   
  -            fireChangeEvent();
  -                     
  -             }});
  +          fireChangeEvent();
  +        }
  +      });
   
       /**
        * Now add a MouseListener that fires the expansion
  @@ -534,6 +545,37 @@
             }
           }
         });
  +
  +    /**
  +     * We listen for when the FocusOn action changes, and then  translate
  +     * that to a RuleChange
  +     */
  +    addChangeListener(
  +      new ChangeListener() {
  +        public void stateChanged(ChangeEvent evt) {
  +          final String currentlySelectedLoggerName =
  +            getCurrentlySelectedLoggerName();
  +
  +          ruleDelegate =
  +            new AbstractRule() {
  +                public boolean evaluate(LoggingEvent e) {
  +                  boolean isHidden =
  +                    getHiddenSet().contains(e.getLoggerName());
  +                  boolean result = !isHidden;
  +
  +                  if (result && isFocusOnSelected()) {
  +                    result =
  +                      result
  +                      && e.getLoggerName().startsWith(
  +                        currentlySelectedLoggerName);
  +                  }
  +
  +                  return result;
  +                }
  +              };
  +              firePropertyChange("rule", null, null);
  +        }
  +      });
     }
   
     private void reconfigureMenuText() {
  @@ -786,18 +828,27 @@
      */
     public void setFocusOn(String logger) {
       DefaultMutableTreeNode node = logTreeModel.lookupLogger(logger);
  -    if(node!=null){
  -             TreeNode[] nodes = node.getPath();
  -             TreePath treePath = new TreePath(nodes);
  -     logTree.setSelectionPath(treePath);
  -     if(!focusOnLoggerButton.isSelected()){
  -             focusOnLoggerButton.doClick();
  -     }
  -    }else{
  -     LogLog.error("failed to lookup logger " + logger);
  +
  +    if (node != null) {
  +      TreeNode[] nodes = node.getPath();
  +      TreePath treePath = new TreePath(nodes);
  +      logTree.setSelectionPath(treePath);
  +
  +      if (!focusOnLoggerButton.isSelected()) {
  +        focusOnLoggerButton.doClick();
  +      }
  +    } else {
  +      LogLog.error("failed to lookup logger " + logger);
       }
     }
   
  +  /* (non-Javadoc)
  +   * @see 
org.apache.log4j.chainsaw.rule.Rule#evaluate(org.apache.log4j.spi.LoggingEvent)
  +   */
  +  public boolean evaluate(LoggingEvent e) {
  +    return ruleDelegate.evaluate(e);
  +  }
  +
     /**
           *
           * @author Paul Smith <[EMAIL PROTECTED]>
  @@ -830,26 +881,28 @@
   
         Font originalFont = component.getFont();
   
  -     int style = Font.PLAIN;
  -      if (sel && focusOnLoggerButton.isSelected()) {
  -          style = style | Font.BOLD;
  -      } 
  +      int style = Font.PLAIN;
   
  +      if (sel && focusOnLoggerButton.isSelected()) {
  +        style = style | Font.BOLD;
  +      }
   
  -      
  -      String logger = getLoggerName(new TreePath(((DefaultMutableTreeNode) 
value).getPath()));
  +      String logger =
  +        getLoggerName(
  +          new TreePath(((DefaultMutableTreeNode) value).getPath()));
   
         if (hiddenSet.contains(logger)) {
  -//        component.setEnabled(false);
  -//        component.setIcon(leaf?null:getDefaultOpenIcon());
  +        //        component.setEnabled(false);
  +        //        component.setIcon(leaf?null:getDefaultOpenIcon());
           style = style | Font.ITALIC;
  -//        LogLog.debug("TreeRenderer: '" + logger + "' is in hiddenSet, 
italicizing");
  +
  +        //        LogLog.debug("TreeRenderer: '" + logger + "' is in hiddenSet, 
italicizing");
         } else {
  -//          LogLog.debug("TreeRenderer: '" + logger + "' is NOT in hiddenSet, 
leaving plain");
  -//        component.setEnabled(true);
  +        //          LogLog.debug("TreeRenderer: '" + logger + "' is NOT in 
hiddenSet, leaving plain");
  +        //        component.setEnabled(true);
         }
  +
         component.setFont(originalFont.deriveFont(style));
  -      
   
         return component;
       }
  
  
  

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

Reply via email to