01: /*
02: * $Id: MessageHeadersExpressionEvaluator.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.api.transformer.TransformerException;
15: import org.mule.config.i18n.CoreMessages;
16:
17: import java.util.HashMap;
18: import java.util.Map;
19: import java.util.StringTokenizer;
20:
21: /**
22: * Looks up the property on the message using the expression given. The expression can contain a comma-separated list
23: * of header names to lookup. A {@link java.util.Map} of key value pairs is returned.
24: *
25: * @see org.mule.util.expression.MessageHeadersListExpressionEvaluator
26: * @see org.mule.util.expression.ExpressionEvaluator
27: * @see org.mule.util.expression.ExpressionEvaluatorManager
28: */
29: public class MessageHeadersExpressionEvaluator implements
30: ExpressionEvaluator {
31: public static final String NAME = "headers";
32: public static final String DELIM = ",";
33:
34: public Object evaluate(String expression, Object message) {
35: boolean required = false;
36:
37: //This is a bit of a hack to manage required headers
38: if (expression.endsWith("required")) {
39: required = true;
40: expression = expression.substring(0,
41: expression.length() - 8);
42: }
43:
44: if (message instanceof MessageAdapter) {
45: StringTokenizer tokenizer = new StringTokenizer(expression,
46: DELIM);
47: Map result = new HashMap(tokenizer.countTokens());
48: while (tokenizer.hasMoreTokens()) {
49: String s = tokenizer.nextToken();
50: s = s.trim();
51: Object val = ((MessageAdapter) message).getProperty(s);
52: if (val != null) {
53: result.put(s, val);
54: } else if (required) {
55: throw new ExpressionRuntimeException(CoreMessages
56: .expressionEvaluatorReturnedNull(NAME,
57: expression));
58: }
59: }
60: if (result.size() == 0) {
61: return null;
62: } else {
63: return result;
64: }
65: }
66: return null;
67: }
68:
69: /** {@inheritDoc} */
70: public String getName() {
71: return NAME;
72: }
73:
74: /** {@inheritDoc} */
75: public void setName(String name) {
76: throw new UnsupportedOperationException("setName");
77: }
78: }
|