1
2
3
4
5
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.InterceptingMessageProcessor;
12 import org.mule.api.processor.MessageProcessor;
13 import org.mule.api.processor.MessageProcessorBuilder;
14 import org.mule.api.processor.MessageProcessorChain;
15
16 import java.util.ArrayList;
17 import java.util.Collections;
18 import java.util.LinkedList;
19 import java.util.List;
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public class DefaultMessageProcessorChainBuilder extends AbstractMessageProcessorChainBuilder
34 {
35
36 public DefaultMessageProcessorChainBuilder()
37 {
38
39 }
40
41 public DefaultMessageProcessorChainBuilder(FlowConstruct flowConstruct)
42 {
43 this.flowConstruct = flowConstruct;
44 }
45
46
47
48
49
50
51
52
53
54
55
56
57 public MessageProcessorChain build() throws MuleException
58 {
59 LinkedList<MessageProcessor> tempList = new LinkedList<MessageProcessor>();
60
61
62 for (int i = processors.size() - 1; i >= 0; i--)
63 {
64 MessageProcessor processor = initializeMessageProcessor(processors.get(i));
65 if (processor instanceof InterceptingMessageProcessor)
66 {
67 InterceptingMessageProcessor interceptingProcessor = (InterceptingMessageProcessor) processor;
68
69 if (i + 1 < processors.size())
70 {
71
72 if (tempList.isEmpty())
73 {
74 interceptingProcessor.setListener(initializeMessageProcessor(processors.get(i + 1)));
75 }
76 else if (tempList.size() == 1)
77 {
78 interceptingProcessor.setListener(tempList.get(0));
79 }
80 else
81 {
82 final DefaultMessageProcessorChain chain = new DefaultMessageProcessorChain(
83 "(inner iterating chain) of " + name, new ArrayList<MessageProcessor>(tempList));
84 interceptingProcessor.setListener(chain);
85 }
86 }
87 tempList = new LinkedList<MessageProcessor>(Collections.singletonList(processor));
88 }
89 else
90 {
91
92
93 tempList.addFirst(initializeMessageProcessor(processor));
94 }
95 }
96
97
98
99 final DefaultMessageProcessorChain chain = new DefaultMessageProcessorChain(name,
100 new ArrayList<MessageProcessor>(tempList));
101
102
103
104 return new InterceptingChainLifecycleWrapper(chain, processors, "wrapper for " + name);
105 }
106
107 public DefaultMessageProcessorChainBuilder chain(MessageProcessor... processors)
108 {
109 for (MessageProcessor messageProcessor : processors)
110 {
111 this.processors.add(messageProcessor);
112 }
113 return this;
114 }
115
116 public DefaultMessageProcessorChainBuilder chain(List<MessageProcessor> processors)
117 {
118 if (processors != null)
119 {
120 this.processors.addAll(processors);
121 }
122 return this;
123 }
124
125 public DefaultMessageProcessorChainBuilder chain(MessageProcessorBuilder... builders)
126 {
127 for (MessageProcessorBuilder messageProcessorBuilder : builders)
128 {
129 this.processors.add(messageProcessorBuilder);
130 }
131 return this;
132 }
133
134 public DefaultMessageProcessorChainBuilder chainBefore(MessageProcessor processor)
135 {
136 this.processors.add(0, processor);
137 return this;
138 }
139
140 public DefaultMessageProcessorChainBuilder chainBefore(MessageProcessorBuilder builder)
141 {
142 this.processors.add(0, builder);
143 return this;
144 }
145 }