1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.chainsaw;
19
20 import java.beans.PropertyChangeEvent;
21 import java.beans.PropertyChangeListener;
22 import java.util.Map;
23
24 import org.apache.log4j.rule.AbstractRule;
25 import org.apache.log4j.rule.Rule;
26 import org.apache.log4j.spi.LoggingEvent;
27
28
29
30
31
32
33
34
35
36
37
38
39 public class RuleMediator extends AbstractRule {
40 private Rule loggerRule;
41 private Rule filterRule;
42 private Rule findRule;
43 private final PropertyChangeListener ruleChangerNotifier = new RuleChangerNotifier();
44 private boolean findRuleRequired;
45
46 public RuleMediator(boolean findRuleRequired) {
47 this.findRuleRequired = findRuleRequired;
48 }
49
50
51
52 public boolean evaluate(LoggingEvent e, Map matches) {
53 if (findRuleRequired) {
54 if (findRule == null) {
55 return false;
56 }
57 if (!findRule.evaluate(e, null)) {
58 return false;
59 }
60 }
61
62 if (loggerRule != null && !loggerRule.evaluate(e, null)) {
63 return false;
64 }
65
66 if (filterRule != null && !filterRule.evaluate(e, null)) {
67 return false;
68 }
69
70 return true;
71 }
72
73 public boolean isFindRuleRequired() {
74 return findRuleRequired;
75 }
76
77 public void setFilterRule(Rule r) {
78 Rule oldFilterRule = this.filterRule;
79 this.filterRule = r;
80 firePropertyChange("filterRule", oldFilterRule, this.filterRule);
81 }
82
83 public void setFindRule(Rule r) {
84 Rule oldFindRule = this.findRule;
85 this.findRule = r;
86 firePropertyChange("findRule", oldFindRule, this.findRule);
87 }
88
89 public void setLoggerRule(Rule r) {
90 Rule oldLoggerRule = this.loggerRule;
91 this.loggerRule = r;
92 if(oldLoggerRule!=null){
93 oldLoggerRule.removePropertyChangeListener(ruleChangerNotifier);
94 }
95 this.loggerRule.addPropertyChangeListener(ruleChangerNotifier);
96 firePropertyChange("loggerRule", oldLoggerRule, this.loggerRule);
97 }
98
99
100
101
102
103
104 private class RuleChangerNotifier implements PropertyChangeListener {
105
106
107
108 public void propertyChange(PropertyChangeEvent evt) {
109 RuleMediator.this.firePropertyChange(evt);
110 }
111 }
112 }