View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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 }