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]