1
2
3
4
5
6
7
8
9
10
11 package org.mule.enricher;
12
13 import org.mule.RequestContext;
14 import org.mule.api.MuleEvent;
15 import org.mule.api.MuleException;
16 import org.mule.api.MuleMessage;
17 import org.mule.api.expression.ExpressionManager;
18 import org.mule.api.processor.MessageProcessor;
19 import org.mule.processor.AbstractMessageProcessorOwner;
20 import org.mule.util.StringUtils;
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25
26 public class MessageEnricher extends AbstractMessageProcessorOwner implements MessageProcessor
27 {
28
29 private List<EnrichExpressionPair> enrichExpressionPairs = new ArrayList<EnrichExpressionPair>();
30
31 private MessageProcessor enrichmentProcessor;
32
33 public MuleEvent process(MuleEvent event) throws MuleException
34 {
35 ExpressionManager expressionManager = event.getMuleContext().getExpressionManager();
36 MuleMessage enrichmentMessage = enrichmentProcessor.process(
37 RequestContext.cloneAndUpdateEventEndpoint(event, enrichmentProcessor)).getMessage();
38
39 if (enrichmentMessage != null)
40 {
41 for (EnrichExpressionPair pair : enrichExpressionPairs)
42 {
43 enrich(event.getMessage(), enrichmentMessage, pair.getSource(), pair.getTarget(),
44 expressionManager);
45 }
46 }
47 return event;
48 }
49
50 protected void enrich(MuleMessage currentMessage,
51 MuleMessage enrichmentMessage,
52 String sourceExpressionArg,
53 String targetExpressionArg,
54 ExpressionManager expressionManager)
55 {
56 if (StringUtils.isEmpty(sourceExpressionArg))
57 {
58 sourceExpressionArg = "#[payload]";
59 }
60
61 Object enrichmentObject = expressionManager.evaluate(sourceExpressionArg, enrichmentMessage);
62 if (enrichmentObject instanceof MuleMessage)
63 {
64 enrichmentObject = ((MuleMessage) enrichmentObject).getPayload();
65 }
66
67 if (!StringUtils.isEmpty(targetExpressionArg))
68 {
69 expressionManager.enrich(targetExpressionArg, currentMessage, enrichmentObject);
70 }
71 else
72 {
73 currentMessage.setPayload(enrichmentObject);
74 }
75 }
76
77 public void setEnrichmentMessageProcessor(MessageProcessor enrichmentProcessor)
78 {
79 this.enrichmentProcessor = enrichmentProcessor;
80 }
81
82
83
84
85 public void setMessageProcessor(MessageProcessor enrichmentProcessor)
86 {
87 this.enrichmentProcessor = enrichmentProcessor;
88 }
89
90 public void setEnrichExpressionPairs(List<EnrichExpressionPair> enrichExpressionPairs)
91 {
92 this.enrichExpressionPairs = enrichExpressionPairs;
93 }
94
95 public void addEnrichExpressionPair(EnrichExpressionPair pair)
96 {
97 this.enrichExpressionPairs.add(pair);
98 }
99
100 public static class EnrichExpressionPair
101 {
102
103 private String source;
104 private String target;
105
106 public EnrichExpressionPair()
107 {
108
109 }
110
111 public EnrichExpressionPair(String target)
112 {
113 this.target = target;
114 }
115
116 public EnrichExpressionPair(String source, String target)
117 {
118 this.source = source;
119 this.target = target;
120 }
121
122 public String getSource()
123 {
124 return source;
125 }
126
127 public void setSource(String source)
128 {
129 this.source = source;
130 }
131
132 public String getTarget()
133 {
134 return target;
135 }
136
137 public void setTarget(String target)
138 {
139 this.target = target;
140 }
141 }
142
143 @Override
144 protected List<MessageProcessor> getOwnedMessageProcessors()
145 {
146 return Collections.singletonList(enrichmentProcessor);
147 }
148 }