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