1
2
3
4
5
6
7
8
9
10
11 package org.mule.routing.inbound;
12
13 import org.mule.config.i18n.CoreMessages;
14 import org.mule.impl.MuleMessage;
15 import org.mule.routing.AbstractRouter;
16 import org.mule.umo.MessagingException;
17 import org.mule.umo.UMOEvent;
18 import org.mule.umo.UMOFilter;
19 import org.mule.umo.UMOMessage;
20 import org.mule.umo.routing.RoutingException;
21 import org.mule.umo.routing.UMOInboundRouter;
22 import org.mule.umo.transformer.TransformerException;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27
28
29
30
31
32
33
34
35
36
37 public class SelectiveConsumer extends AbstractRouter implements UMOInboundRouter
38 {
39 protected final Log logger = LogFactory.getLog(getClass());
40
41 private volatile UMOFilter filter;
42 private volatile boolean transformFirst = true;
43
44 public boolean isMatch(UMOEvent event) throws MessagingException
45 {
46 if (logger.isDebugEnabled())
47 {
48 logger.debug("Attempting to route event: " + event.getId());
49 }
50
51 if (filter == null)
52 {
53 return true;
54 }
55
56 UMOMessage message = event.getMessage();
57
58 if (transformFirst)
59 {
60 try
61 {
62 Object payload = event.getTransformedMessage();
63 message = new MuleMessage(payload, message);
64 }
65 catch (TransformerException e)
66 {
67 throw new RoutingException(
68 CoreMessages.transformFailedBeforeFilter(), event.getMessage(),
69 event.getEndpoint(), e);
70 }
71 }
72
73 boolean result = filter.accept(message);
74
75 if (logger.isDebugEnabled())
76 {
77 logger.debug("Event " + event.getId() + (result ? " passed filter " : " did not pass filter ")
78 + filter.getClass().getName());
79 }
80
81 return result;
82 }
83
84 public UMOEvent[] process(UMOEvent event) throws MessagingException
85 {
86 if (this.isMatch(event))
87 {
88 return new UMOEvent[]{event};
89 }
90 else
91 {
92 return null;
93 }
94 }
95
96 public UMOFilter getFilter()
97 {
98 return filter;
99 }
100
101 public void setFilter(UMOFilter filter)
102 {
103 this.filter = filter;
104 }
105
106 public boolean isTransformFirst()
107 {
108 return transformFirst;
109 }
110
111 public void setTransformFirst(boolean transformFirst)
112 {
113 this.transformFirst = transformFirst;
114 }
115 }