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<MessageProcessorFilterPair>,
29 MuleContextAware
30 {
31 private List<MessageProcessor> messageProcessors;
32 private Filter filter = new ExpressionFilter();
33
34 public void setFilter(Filter filter)
35 {
36 this.filter = filter;
37 }
38
39 public void setMessageProcessors(List<MessageProcessor> messageProcessors)
40 {
41 this.messageProcessors = messageProcessors;
42 }
43
44 public void setExpression(String expression)
45 {
46 ((ExpressionFilter) filter).setExpression(expression);
47 }
48
49 public void setEvaluator(String evaluator)
50 {
51 ((ExpressionFilter) filter).setEvaluator(evaluator);
52 }
53
54 public void setCustomEvaluator(String customEvaluator)
55 {
56 ((ExpressionFilter) filter).setCustomEvaluator(customEvaluator);
57 }
58
59 @Override
60 public MessageProcessorFilterPair getObject() throws Exception
61 {
62 MessageProcessorChainBuilder builder = new DefaultMessageProcessorChainBuilder();
63 for (Object processor : messageProcessors)
64 {
65 if (processor instanceof MessageProcessor)
66 {
67 builder.chain((MessageProcessor) processor);
68 }
69 else if (processor instanceof MessageProcessorBuilder)
70 {
71 builder.chain((MessageProcessorBuilder) processor);
72 }
73 else
74 {
75 throw new IllegalArgumentException(
76 "MessageProcessorBuilder should only have MessageProcessors or MessageProcessorBuilders configured");
77 }
78 }
79
80 return createFilterPair(builder);
81 }
82
83 private MessageProcessorFilterPair createFilterPair(MessageProcessorChainBuilder builder) throws Exception
84 {
85 if (filter == null)
86 {
87 return new MessageProcessorFilterPair(builder.build(), AcceptAllFilter.INSTANCE);
88 }
89 else
90 {
91 return new MessageProcessorFilterPair(builder.build(), filter);
92 }
93 }
94
95 @Override
96 public Class<MessageProcessorFilterPair> getObjectType()
97 {
98 return MessageProcessorFilterPair.class;
99 }
100
101 @Override
102 public boolean isSingleton()
103 {
104 return true;
105 }
106
107 @Override
108 public void setMuleContext(MuleContext context)
109 {
110 if (filter != null && filter instanceof MuleContextAware)
111 {
112 ((MuleContextAware) filter).setMuleContext(context);
113 }
114 }
115 }