1
2
3
4
5
6
7
8
9
10
11 package org.mule.api.processor.policy;
12
13 import org.mule.api.MuleEvent;
14 import org.mule.api.MuleException;
15 import org.mule.api.processor.MessageProcessor;
16
17 import java.util.LinkedList;
18 import java.util.List;
19
20
21
22
23 public class PolicyInvocation
24 {
25 private MuleEvent event;
26 private List<AroundPolicy> policies = new LinkedList<AroundPolicy>();
27 private volatile int currentPolicyIndex = 0;
28 private MessageProcessor messageProcessor;
29
30 public PolicyInvocation(MuleEvent event, List<AroundPolicy> policies, MessageProcessor processor)
31 {
32 this.event = event;
33 this.policies = policies;
34 this.messageProcessor = processor;
35 }
36
37
38
39
40
41
42 public MuleEvent proceed() throws MuleException
43 {
44 currentPolicyIndex++;
45 if (currentPolicyIndex == policies.size())
46 {
47
48 return messageProcessor.process(event);
49 }
50 final AroundPolicy currentPolicy = getCurrentPolicy();
51 final MuleEvent result = currentPolicy.invoke(this);
52 setEvent(result);
53 return event;
54 }
55
56 public MuleEvent getEvent()
57 {
58 return event;
59 }
60
61
62
63
64
65
66
67 public void setEvent(MuleEvent event)
68 {
69 this.event = event;
70 }
71
72
73
74
75 public AroundPolicy getCurrentPolicy()
76 {
77 return policies.get(currentPolicyIndex);
78 }
79
80 public MessageProcessor getMessageProcessor()
81 {
82 return messageProcessor;
83 }
84
85 public List<AroundPolicy> getPolicies()
86 {
87 return policies;
88 }
89 }