1
2
3
4
5
6
7
8
9
10
11 package org.mule.expression;
12
13 import org.mule.api.MuleMessage;
14 import org.mule.api.expression.ExpressionEvaluator;
15 import org.mule.api.expression.RequiredValueException;
16 import org.mule.config.i18n.CoreMessages;
17 import org.mule.routing.filters.WildcardFilter;
18
19 import java.util.Collections;
20 import java.util.HashMap;
21 import java.util.Map;
22 import java.util.StringTokenizer;
23
24 import javax.activation.DataHandler;
25
26
27
28
29
30
31
32
33
34
35 public class MessageAttachmentsExpressionEvaluator implements ExpressionEvaluator, ExpressionConstants
36 {
37 public static final String NAME = "attachments";
38
39 public Object evaluate(String expression, MuleMessage message)
40 {
41 boolean required;
42
43 Map<String, DataHandler> result;
44
45 if (expression.contains(ALL_ARGUMENT))
46 {
47 WildcardFilter filter = new WildcardFilter(expression);
48 result = new HashMap<String, DataHandler>(message.getInboundAttachmentNames().size());
49 for (String name : message.getInboundAttachmentNames())
50 {
51 if (filter.accept(name))
52 {
53 result.put(name, message.getInboundAttachment(name));
54 }
55 }
56 }
57 else
58 {
59 StringTokenizer tokenizer = new StringTokenizer(expression, DELIM);
60 result = new HashMap<String, DataHandler>(tokenizer.countTokens());
61 while (tokenizer.hasMoreTokens())
62 {
63 String s = tokenizer.nextToken();
64 s = s.trim();
65 if (s.endsWith(OPTIONAL_ARGUMENT))
66 {
67 s = s.substring(0, s.length() - OPTIONAL_ARGUMENT.length());
68 required = false;
69 }
70 else
71 {
72 required = true;
73 }
74 DataHandler val = message.getInboundAttachment(s);
75 if (val != null)
76 {
77 result.put(s, val);
78 }
79 else if (required)
80 {
81 throw new RequiredValueException(CoreMessages.expressionEvaluatorReturnedNull(NAME, expression));
82 }
83 }
84 }
85 if (result.size() == 0)
86 {
87 return Collections.unmodifiableMap(Collections.<String, DataHandler>emptyMap());
88 }
89 else
90 {
91 return Collections.unmodifiableMap(result);
92 }
93 }
94
95
96
97
98 public String getName()
99 {
100 return NAME;
101 }
102
103
104
105
106 public void setName(String name)
107 {
108 throw new UnsupportedOperationException();
109 }
110 }