View Javadoc

1   /*
2    * $Id: MessageHeadersListExpressionEvaluator.java 11297 2008-03-09 20:11:02Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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.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 ExpressionEvaluator
29  {
30      public static final String NAME = "headers-list";
31      public static final String DELIM = ",";
32  
33      public Object evaluate(String expression, Object message)
34      {
35          boolean required = false;
36  
37          //This is a bit of a hack to manage required headers
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              List result = new ArrayList(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.add(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      /** {@inheritDoc} */
75      public String getName()
76      {
77          return NAME;
78      }
79  
80      /** {@inheritDoc} */
81      public void setName(String name)
82      {
83          throw new UnsupportedOperationException("setName");
84      }
85  }