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 MuleEvent enrichmentEvent = enrichmentProcessor.process(RequestContext.setEvent(event));
37
38 if (enrichmentEvent != null)
39 {
40 for (EnrichExpressionPair pair : enrichExpressionPairs)
41 {
42 enrich(event.getMessage(), enrichmentEvent.getMessage(), pair.getSource(), pair.getTarget(),
43 expressionManager);
44 }
45 }
46 return event;
47 }
48
49 protected void enrich(MuleMessage currentMessage,
50 MuleMessage enrichmentMessage,
51 String sourceExpressionArg,
52 String targetExpressionArg,
53 ExpressionManager expressionManager)
54 {
55 if (StringUtils.isEmpty(sourceExpressionArg))
56 {
57 sourceExpressionArg = "#[payload]";
58 }
59
60 Object enrichmentObject = expressionManager.evaluate(sourceExpressionArg, enrichmentMessage);
61 if (enrichmentObject instanceof MuleMessage)
62 {
63 enrichmentObject = ((MuleMessage) enrichmentObject).getPayload();
64 }
65
66 if (!StringUtils.isEmpty(targetExpressionArg))
67 {
68 expressionManager.enrich(targetExpressionArg, currentMessage, enrichmentObject);
69 }
70 else
71 {
72 currentMessage.setPayload(enrichmentObject);
73 }
74 }
75
76 public void setEnrichmentMessageProcessor(MessageProcessor enrichmentProcessor)
77 {
78 this.enrichmentProcessor = enrichmentProcessor;
79 }
80
81
82
83
84 public void setMessageProcessor(MessageProcessor enrichmentProcessor)
85 {
86 this.enrichmentProcessor = enrichmentProcessor;
87 }
88
89 public void setEnrichExpressionPairs(List<EnrichExpressionPair> enrichExpressionPairs)
90 {
91 this.enrichExpressionPairs = enrichExpressionPairs;
92 }
93
94 public void addEnrichExpressionPair(EnrichExpressionPair pair)
95 {
96 this.enrichExpressionPairs.add(pair);
97 }
98
99 public static class EnrichExpressionPair
100 {
101
102 private String source;
103 private String target;
104
105 public EnrichExpressionPair()
106 {
107
108 }
109
110 public EnrichExpressionPair(String target)
111 {
112 this.target = target;
113 }
114
115 public EnrichExpressionPair(String source, String target)
116 {
117 this.source = source;
118 this.target = target;
119 }
120
121 public String getSource()
122 {
123 return source;
124 }
125
126 public void setSource(String source)
127 {
128 this.source = source;
129 }
130
131 public String getTarget()
132 {
133 return target;
134 }
135
136 public void setTarget(String target)
137 {
138 this.target = target;
139 }
140 }
141
142 @Override
143 protected List<MessageProcessor> getOwnedMessageProcessors()
144 {
145 return Collections.singletonList(enrichmentProcessor);
146 }
147 }