1
2
3
4
5
6
7 package org.mule.module.sxc;
8
9 import org.mule.api.MuleMessage;
10 import org.mule.api.routing.filter.Filter;
11
12 import com.envoisolutions.sxc.xpath.XPathBuilder;
13
14 import org.apache.commons.logging.Log;
15 import org.apache.commons.logging.LogFactory;
16
17 import static org.mule.util.ClassUtils.equal;
18 import static org.mule.util.ClassUtils.hash;
19
20 public class SxcFilter implements Filter
21 {
22 protected transient Log logger = LogFactory.getLog(getClass());
23
24 private String pattern;
25
26 public SxcFilter()
27 {
28 super();
29 }
30
31 public SxcFilter(String pattern)
32 {
33 this.pattern = pattern;
34 }
35
36 public boolean accept(MuleMessage msg)
37 {
38 Object accept = msg.getInvocationProperty(toString());
39
40 if (accept == null && SxcFilteringOutboundRouter.getCurrentMessage() == null)
41 {
42 return false;
43 }
44 else if (accept == null)
45 {
46 throw new UndefinedMatchException();
47 }
48
49 return (Boolean) accept;
50 }
51
52
53 public String getPattern()
54 {
55 return pattern;
56 }
57
58
59 public void setPattern(String pattern)
60 {
61 this.pattern = pattern;
62 }
63
64 public void addEventHandler(SxcFilteringOutboundRouter router, XPathBuilder builder)
65 {
66 builder.listen(pattern, new FilterEventHandler(router, this));
67 }
68
69 public boolean equals(Object obj)
70 {
71 if (this == obj) return true;
72 if (obj == null || getClass() != obj.getClass()) return false;
73
74 final SxcFilter other = (SxcFilter) obj;
75 return equal(pattern, other.pattern);
76 }
77
78 public int hashCode()
79 {
80 return hash(new Object[]{this.getClass(), pattern});
81 }
82 }
83
84