View Javadoc

1   /*
2    * $Id: MessageProcessorFilterPairFactoryBean.java 23006 2011-09-22 05:51:15Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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 }