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]

Reply via email to