1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.spring.factories;
12
13 import org.mule.api.MuleContext;
14 import org.mule.api.context.MuleContextAware;
15 import org.mule.api.processor.MessageProcessor;
16 import org.mule.api.processor.MessageProcessorBuilder;
17 import org.mule.api.processor.MessageProcessorChainBuilder;
18 import org.mule.api.routing.filter.Filter;
19 import org.mule.processor.chain.DefaultMessageProcessorChainBuilder;
20 import org.mule.routing.MessageProcessorFilterPair;
21 import org.mule.routing.filters.AcceptAllFilter;
22 import org.mule.routing.filters.ExpressionFilter;
23
24 import java.util.List;
25
26 import org.springframework.beans.factory.FactoryBean;
27
28 public class MessageProcessorFilterPairFactoryBean implements FactoryBean, MuleContextAware
29 {
30 private List<MessageProcessor> messageProcessors;
31 private Filter filter = new ExpressionFilter();
32
33 public void setFilter(Filter filter)
34 {
35 this.filter = filter;
36 }
37
38 public void setMessageProcessors(List<MessageProcessor> messageProcessors)
39 {
40 this.messageProcessors = messageProcessors;
41 }
42
43 public void setExpression(String expression)
44 {
45 ((ExpressionFilter) filter).setExpression(expression);
46 }
47
48 public void setEvaluator(String evaluator)
49 {
50 ((ExpressionFilter) filter).setEvaluator(evaluator);
51 }
52
53 public void setCustomEvaluator(String customEvaluator)
54 {
55 ((ExpressionFilter) filter).setCustomEvaluator(customEvaluator);
56 }
57
58 public Object getObject() throws Exception
59 {
60 MessageProcessorChainBuilder builder = new DefaultMessageProcessorChainBuilder();
61 for (Object processor : messageProcessors)
62 {
63 if (processor instanceof MessageProcessor)
64 {
65 builder.chain((MessageProcessor) processor);
66 }
67 else if (processor instanceof MessageProcessorBuilder)
68 {
69 builder.chain((MessageProcessorBuilder) processor);
70 }
71 else
72 {
73 throw new IllegalArgumentException(
74 "MessageProcessorBuilder should only have MessageProcessor's or MessageProcessorBuilder's configured");
75 }
76 }
77 return filter == null
78 ? new MessageProcessorFilterPair(builder.build(), AcceptAllFilter.INSTANCE)
79 : new MessageProcessorFilterPair(builder.build(), filter);
80 }
81
82 public Class<?> getObjectType()
83 {
84 return MessageProcessorFilterPair.class;
85 }
86
87 public boolean isSingleton()
88 {
89 return true;
90 }
91
92 public void setMuleContext(MuleContext context)
93 {
94 if (filter != null && filter instanceof MuleContextAware)
95 {
96 ((MuleContextAware) filter).setMuleContext(context);
97 }
98 }
99
100 }