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