01: /*
02: * $Id: MessageHeadersListExpressionEvaluator.java 11297 2008-03-09 20:11:02Z rossmason $
03: * --------------------------------------------------------------------------------------
04: * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
05: *
06: * The software in this package is published under the terms of the CPAL v1.0
07: * license, a copy of which has been included with this distribution in the
08: * LICENSE.txt file.
09: */
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.ArrayList;
17: import java.util.List;
18: import java.util.StringTokenizer;
19:
20: /**
21: * Looks up the property on the message using the expression given. The expression can contain a comma-separated list
22: * of header names to lookup. A {@link java.util.List} of values is returned.
23: *
24: * @see org.mule.util.expression.MessageHeadersExpressionEvaluator
25: * @see org.mule.util.expression.ExpressionEvaluator
26: * @see org.mule.util.expression.ExpressionEvaluatorManager
27: */
28: public class MessageHeadersListExpressionEvaluator implements
29: ExpressionEvaluator {
30: public static final String NAME = "headers-list";
31: public static final String DELIM = ",";
32:
33: public Object evaluate(String expression, Object message) {
34: boolean required = false;
35:
36: //This is a bit of a hack to manage required headers
37: if (expression.endsWith("required")) {
38: required = true;
39: expression = expression.substring(0,
40: expression.length() - 8);
41: }
42:
43: if (message instanceof MessageAdapter) {
44: StringTokenizer tokenizer = new StringTokenizer(expression,
45: DELIM);
46: List result = new ArrayList(tokenizer.countTokens());
47: while (tokenizer.hasMoreTokens()) {
48: String s = tokenizer.nextToken();
49: s = s.trim();
50: Object val = ((MessageAdapter) message).getProperty(s);
51: if (val != null) {
52: result.add(val);
53: } else if (required) {
54: throw new ExpressionRuntimeException(CoreMessages
55: .expressionEvaluatorReturnedNull(NAME,
56: expression));
57: }
58: }
59: if (result.size() == 0) {
60: return null;
61: } else {
62: return result;
63: }
64: }
65: return null;
66: }
67:
68: /** {@inheritDoc} */
69: public String getName() {
70: return NAME;
71: }
72:
73: /** {@inheritDoc} */
74: public void setName(String name) {
75: throw new UnsupportedOperationException("setName");
76: }
77: }
|