psmith 2003/10/09 15:06:51 Modified: src/java/org/apache/log4j/chainsaw RuleMediator.java Log: When the LoggerRule is set, this class now listens for the Rule changing, and propagates this internal rule change event to external parties. When an internal rule changes, it effectively means this outter rule changes. Revision Changes Path 1.3 +136 -100 jakarta-log4j/src/java/org/apache/log4j/chainsaw/RuleMediator.java Index: RuleMediator.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/RuleMediator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- RuleMediator.java 17 Sep 2003 01:21:17 -0000 1.2 +++ RuleMediator.java 9 Oct 2003 22:06:51 -0000 1.3 @@ -46,124 +46,160 @@ * Apache Software Foundation, please see <http://www.apache.org/>. * */ + package org.apache.log4j.chainsaw; import org.apache.log4j.chainsaw.rule.AbstractRule; import org.apache.log4j.chainsaw.rule.Rule; import org.apache.log4j.spi.LoggingEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + /** * A mediator class that implements the Rule interface, by combining several optional * rules used by Chainsaw's filtering GUI's into a single Rule. - * - * This class is based upon the concept of Inclusion, Exclusion and Refinement. + * + * This class is based upon the concept of Inclusion, Exclusion and Refinement. * By default, this class accepts all events by returning true as part of the Rule interface, unless * the Inclusion/Exclusion/Refinement sub-rules have been configured. - * + * * The sub-rules are queried in this order: Inclusion, Refinement, Exclusion. If any are null, that particular * sub-rule is not queried. If any of the sub-rules returns false, this mediator returns false immediately, otherwise * they are queried in that order to ensure the overall rule evaluates. - * + * * Setting the individual sub-rules propagates a PropertyChangeEvent as per standard Java beans principles. - * + * * @author Paul Smith <[EMAIL PROTECTED]> * @author Scott Deboy <[EMAIL PROTECTED]> */ public class RuleMediator extends AbstractRule implements Rule { - - private Rule inclusionRule; - private Rule loggerRule; - private Rule refinementRule; - private Rule exclusionRule; - - /* (non-Javadoc) - * @see org.apache.log4j.chainsaw.rule.Rule#evaluate(org.apache.log4j.spi.LoggingEvent) - */ - public boolean evaluate(LoggingEvent e) { - boolean accepts = true; - - if(inclusionRule!=null) { - accepts = inclusionRule.evaluate(e); - } - if(!accepts) return false; - if(loggerRule!=null) { - accepts = loggerRule.evaluate(e); - } - if(!accepts) return false; - if(refinementRule!=null) { - accepts = refinementRule.evaluate(e); - } - if(!accepts) return false; - - if(exclusionRule!=null) { - accepts = exclusionRule.evaluate(e); - } - return accepts; - } - - /** - * Sets the Inclusion rule to be used, and fires a PropertyChangeEvent to listeners - * @param r - */ - public void setInclusionRule(Rule r) { - Rule oldRule = this.inclusionRule; - this.inclusionRule = r; - firePropertyChange("inclusionRule", oldRule, this.inclusionRule); - } - - /** - * Sets the Refinement rule to be used, and fires a PropertyChangeEvent to listeners - * @param r - */ - public void setRefinementRule(Rule r) { - Rule oldRefinementRule = this.refinementRule; - this.refinementRule = r; - firePropertyChange("refinementRule", oldRefinementRule, this.refinementRule); - } - - public void setLoggerRule(Rule r) { - Rule oldLoggerRule = this.loggerRule; - this.loggerRule = r; - firePropertyChange("loggerRule", oldLoggerRule, this.loggerRule); - } - - /** - * Sets the Exclusion rule to be used, and fires a PropertyChangeEvent to listeners. - * - * @param r - */ - public void setExclusionRule(Rule r) { - Rule oldExclusionRule = this.exclusionRule; - this.exclusionRule = r; - firePropertyChange("exclusionRule", oldExclusionRule, this.exclusionRule); - } - /** - * @return - */ - public final Rule getExclusionRule() { - return exclusionRule; - } - - /** - * @return - */ - public final Rule getInclusionRule() { - return inclusionRule; - } - - /** - * @return - */ - public final Rule getLoggerRule() { - return loggerRule; - } - - /** - * @return - */ - public final Rule getRefinementRule() { - return refinementRule; - } - + private Rule inclusionRule; + private Rule loggerRule; + private Rule refinementRule; + private Rule exclusionRule; + private final PropertyChangeListener ruleChangerNotifier = + new RuleChangerNotifier(); + + /* (non-Javadoc) + * @see org.apache.log4j.chainsaw.rule.Rule#evaluate(org.apache.log4j.spi.LoggingEvent) + */ + public boolean evaluate(LoggingEvent e) { + boolean accepts = true; + + if (inclusionRule != null) { + accepts = inclusionRule.evaluate(e); + } + + if (!accepts) { + return false; + } + + if (loggerRule != null) { + accepts = loggerRule.evaluate(e); + } + + if (!accepts) { + return false; + } + + if (refinementRule != null) { + accepts = refinementRule.evaluate(e); + } + + if (!accepts) { + return false; + } + + if (exclusionRule != null) { + accepts = exclusionRule.evaluate(e); + } + + return accepts; + } + + /** + * Sets the Inclusion rule to be used, and fires a PropertyChangeEvent to listeners + * @param r + */ + public void setInclusionRule(Rule r) { + Rule oldRule = this.inclusionRule; + this.inclusionRule = r; + firePropertyChange("inclusionRule", oldRule, this.inclusionRule); + } + + /** + * Sets the Refinement rule to be used, and fires a PropertyChangeEvent to listeners + * @param r + */ + public void setRefinementRule(Rule r) { + Rule oldRefinementRule = this.refinementRule; + this.refinementRule = r; + firePropertyChange( + "refinementRule", oldRefinementRule, this.refinementRule); + } + + public void setLoggerRule(Rule r) { + Rule oldLoggerRule = this.loggerRule; + this.loggerRule = r; + if(oldLoggerRule!=null){ + oldLoggerRule.removePropertyChangeListener(ruleChangerNotifier); + } + this.loggerRule.addPropertyChangeListener(ruleChangerNotifier); + firePropertyChange("loggerRule", oldLoggerRule, this.loggerRule); + } + + /** + * Sets the Exclusion rule to be used, and fires a PropertyChangeEvent to listeners. + * + * @param r + */ + public void setExclusionRule(Rule r) { + Rule oldExclusionRule = this.exclusionRule; + this.exclusionRule = r; + firePropertyChange("exclusionRule", oldExclusionRule, this.exclusionRule); + } + + /** + * @return + */ + public final Rule getExclusionRule() { + return exclusionRule; + } + + /** + * @return + */ + public final Rule getInclusionRule() { + return inclusionRule; + } + + /** + * @return + */ + public final Rule getLoggerRule() { + return loggerRule; + } + + /** + * @return + */ + public final Rule getRefinementRule() { + return refinementRule; + } + + /** + * Helper class that propagates internal Rules propertyChange events + * to external parties, since an internal rule changing really means + * this outter rule is going to change too. + */ + private class RuleChangerNotifier implements PropertyChangeListener { + /* (non-Javadoc) + * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) + */ + public void propertyChange(PropertyChangeEvent evt) { + RuleMediator.this.firePropertyChange(evt); + } + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]