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.ArrayList;
20 import java.util.Collections;
21 import java.util.List;
22 import java.util.StringTokenizer;
23
24 import javax.activation.DataHandler;
25
26 import static org.mule.expression.ExpressionConstants.ALL_ARGUMENT;
27 import static org.mule.expression.ExpressionConstants.DELIM;
28 import static org.mule.expression.ExpressionConstants.OPTIONAL_ARGUMENT;
29
30
31
32
33
34
35
36
37
38
39 public class MessageAttachmentsListExpressionEvaluator implements ExpressionEvaluator
40 {
41 public static final String NAME = "attachments-list";
42
43 public Object evaluate(String expression, MuleMessage message)
44 {
45 boolean required;
46
47 List<DataHandler> result;
48
49 if (expression.contains(ALL_ARGUMENT))
50 {
51 WildcardFilter filter = new WildcardFilter(expression);
52 result = new ArrayList<DataHandler>(message.getInboundAttachmentNames().size());
53 for (String name : message.getInboundAttachmentNames())
54 {
55 if (filter.accept(name))
56 {
57 result.add(message.getInboundAttachment(name));
58 }
59 }
60 }
61 else
62 {
63 StringTokenizer tokenizer = new StringTokenizer(expression, DELIM);
64 result = new ArrayList<DataHandler>(tokenizer.countTokens());
65 while (tokenizer.hasMoreTokens())
66 {
67 String s = tokenizer.nextToken();
68 s = s.trim();
69 if (s.endsWith(OPTIONAL_ARGUMENT))
70 {
71 s = s.substring(0, s.length() - OPTIONAL_ARGUMENT.length());
72 required = false;
73 }
74 else
75 {
76 required = true;
77 }
78 DataHandler val = message.getInboundAttachment(s);
79 if (val != null)
80 {
81 result.add(val);
82 }
83 else if (required)
84 {
85 throw new RequiredValueException(CoreMessages.expressionEvaluatorReturnedNull(NAME, expression));
86 }
87 }
88 }
89 if (result.size() == 0)
90 {
91 return Collections.unmodifiableList(Collections.<DataHandler>emptyList());
92 }
93 else
94 {
95 return Collections.unmodifiableList(result);
96 }
97 }
98
99
100
101
102 public String getName()
103 {
104 return NAME;
105 }
106
107
108
109
110 public void setName(String name)
111 {
112 throw new UnsupportedOperationException("setName");
113 }
114 }