1
2
3
4
5
6
7
8
9
10
11 package org.mule.util.expression;
12
13 import org.mule.api.transport.MessageAdapter;
14 import org.mule.config.i18n.CoreMessages;
15
16 import java.util.HashMap;
17 import java.util.Map;
18 import java.util.StringTokenizer;
19
20
21
22
23
24
25
26
27
28 public class MessageHeadersExpressionEvaluator implements ExpressionEvaluator
29 {
30 public static final String NAME = "headers";
31 public static final String DELIM = ",";
32
33 public Object evaluate(String expression, Object message)
34 {
35 boolean required = false;
36
37
38 if(expression.endsWith("required"))
39 {
40 required = true;
41 expression = expression.substring(0, expression.length() - 8);
42 }
43
44 if (message instanceof MessageAdapter)
45 {
46 StringTokenizer tokenizer = new StringTokenizer(expression, DELIM);
47 Map result = new HashMap(tokenizer.countTokens());
48 while(tokenizer.hasMoreTokens())
49 {
50 String s = tokenizer.nextToken();
51 s = s.trim();
52 Object val = ((MessageAdapter) message).getProperty(s);
53 if(val!=null)
54 {
55 result.put(s, val);
56 }
57 else if(required)
58 {
59 throw new ExpressionRuntimeException(CoreMessages.expressionEvaluatorReturnedNull(NAME, expression));
60 }
61 }
62 if(result.size()==0)
63 {
64 return null;
65 }
66 else
67 {
68 return result;
69 }
70 }
71 return null;
72 }
73
74
75 public String getName()
76 {
77 return NAME;
78 }
79
80
81 public void setName(String name)
82 {
83 throw new UnsupportedOperationException("setName");
84 }
85 }