1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.rule;
19
20 import org.apache.log4j.spi.LoggingEvent;
21
22 import java.util.Stack;
23
24 /***
25 * A Rule class implementing logical not.
26 *
27 * @author Scott Deboy (sdeboy@apache.org)
28 */
29 public class NotRule extends AbstractRule {
30 /***
31 * Serialization ID.
32 */
33 static final long serialVersionUID = -6827159473117969306L;
34 /***
35 * Enclosed rule.
36 */
37 private final Rule rule;
38
39 /***
40 * Create new instance.
41 * @param rule enclosed rule.
42 */
43 private NotRule(final Rule rule) {
44 super();
45 this.rule = rule;
46 }
47
48 /***
49 * Create new instance.
50 * @param rule enclosed rule.
51 * @return new rule.
52 */
53 public static Rule getRule(final Rule rule) {
54 return new NotRule(rule);
55 }
56
57 /***
58 * Create new instance from top element of stack.
59 * @param stack stack
60 * @return new rule.
61 */
62 public static Rule getRule(final Stack stack) {
63 if (stack.size() < 1) {
64 throw new IllegalArgumentException(
65 "Invalid NOT rule - expected one rule but received "
66 + stack.size());
67 }
68 Object o1 = stack.pop();
69 if (o1 instanceof Rule) {
70 Rule p1 = (Rule) o1;
71 return new NotRule(p1);
72 }
73 throw new IllegalArgumentException(
74 "Invalid NOT rule: - expected rule but received " + o1);
75 }
76
77 /*** {@inheritDoc} */
78 public boolean evaluate(final LoggingEvent event) {
79 return !(rule.evaluate(event));
80 }
81 }