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