View Javadoc

1   /*
2    * $Id: EndpointInfoExpressionEvaluator.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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.expression;
12  
13  import org.mule.api.MuleContext;
14  import org.mule.api.MuleMessage;
15  import org.mule.api.context.MuleContextAware;
16  import org.mule.api.expression.ExpressionEvaluator;
17  import org.mule.config.i18n.CoreMessages;
18  import org.mule.endpoint.AbstractEndpointBuilder;
19  
20  import org.apache.commons.logging.Log;
21  import org.apache.commons.logging.LogFactory;
22  
23  /**
24   * Looks up information about a global endpoint
25   *
26   * @see org.mule.api.expression.ExpressionEvaluator
27   * @see DefaultExpressionManager
28   */
29  public class EndpointInfoExpressionEvaluator implements ExpressionEvaluator, MuleContextAware
30  {
31      public static final String NAME = "endpoint";
32  
33      /**
34       * logger used by this class
35       */
36      protected transient final Log logger = LogFactory.getLog(EndpointInfoExpressionEvaluator.class);
37  
38      protected MuleContext muleContext;
39  
40      public void setMuleContext(MuleContext context)
41      {
42          this.muleContext = context;
43      }
44  
45      public Object evaluate(String expression, MuleMessage message)
46      {
47          int i = expression.indexOf(".");
48          String endpointName;
49          String property;
50          if(i > 0)
51          {
52              endpointName = expression.substring(0, i);
53              property = expression.substring(i + 1);
54          }
55          else
56          {
57              throw new IllegalArgumentException(CoreMessages.expressionMalformed(expression, getName()).getMessage());
58          }
59  
60          AbstractEndpointBuilder eb = (AbstractEndpointBuilder)muleContext.getRegistry().lookupEndpointBuilder(endpointName);
61          if(eb!=null)
62          {
63  
64              if(property.equalsIgnoreCase("address"))
65              {
66                  return eb.getEndpointBuilder().getEndpoint().getAddress();
67              }
68              else //TODO more properties
69              {
70                  throw new IllegalArgumentException(CoreMessages.expressionInvalidForProperty(property, expression).getMessage());
71              }
72          }
73          else
74          {
75              logger.warn("There is no endpoint registered with name: " + endpointName);
76              return null;
77          }
78      }
79  
80      /** {@inheritDoc} */
81      public String getName()
82      {
83          return NAME;
84      }
85  
86      /** {@inheritDoc} */
87      public void setName(String name)
88      {
89          throw new UnsupportedOperationException();
90      }
91  }