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.processor.chain;
8   
9   import org.mule.api.MuleException;
10  import org.mule.api.construct.FlowConstruct;
11  import org.mule.api.processor.MessageProcessor;
12  import org.mule.api.processor.MessageProcessorBuilder;
13  import org.mule.api.processor.MessageProcessorChainBuilder;
14  
15  import java.util.ArrayList;
16  import java.util.List;
17  
18  /**
19   * <p>
20   * Constructs a chain of {@link MessageProcessor}s and wraps the invocation of the chain in a composite
21   * MessageProcessor. Both MessageProcessors and InterceptingMessageProcessor's can be chained together
22   * arbitrarily in a single chain. InterceptingMessageProcessors simply intercept the next MessageProcessor in
23   * the chain. When other non-intercepting MessageProcessors are used an adapter is used internally to chain
24   * the MessageProcessor with the next in the chain.
25   * </p>
26   * <p>
27   * The MessageProcessor instance that this builder builds can be nested in other chains as required.
28   * </p>
29   */
30  public abstract class AbstractMessageProcessorChainBuilder implements MessageProcessorChainBuilder
31  {
32  
33      protected List processors = new ArrayList();
34      protected String name;
35      protected FlowConstruct flowConstruct;
36  
37      public AbstractMessageProcessorChainBuilder()
38      {
39          // empty
40      }
41  
42      public AbstractMessageProcessorChainBuilder(FlowConstruct flowConstruct)
43      {
44          this.flowConstruct = flowConstruct;
45      }
46  
47      // Argument is of type Object because it could be a MessageProcessor or a MessageProcessorBuilder
48      protected MessageProcessor initializeMessageProcessor(Object processor) throws MuleException
49      {
50          // TODO DF: FlowConstuct should be injected here but there is an issue with spring not have reference
51          // to it. For now we inject it once the MessageProcessor is built and this works, but
52          // MessageProcessorBuilders should have FlowConstuct available when building really.
53  
54          if (processor instanceof MessageProcessorBuilder)
55          {
56              return ((MessageProcessorBuilder) processor).build();
57          }
58          else
59          {
60              return (MessageProcessor) processor;
61          }
62      }
63  
64      public void setName(String name)
65      {
66          this.name = name;
67      }
68  
69  }