View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.expression;
8   
9   import org.mule.api.MuleContext;
10  import org.mule.api.MuleMessage;
11  import org.mule.api.context.MuleContextAware;
12  import org.mule.api.expression.ExpressionEvaluator;
13  import org.mule.config.i18n.CoreMessages;
14  import org.mule.endpoint.AbstractEndpointBuilder;
15  
16  import org.apache.commons.logging.Log;
17  import org.apache.commons.logging.LogFactory;
18  
19  /**
20   * Looks up information about a global endpoint
21   *
22   * @see org.mule.api.expression.ExpressionEvaluator
23   * @see DefaultExpressionManager
24   */
25  public class EndpointInfoExpressionEvaluator implements ExpressionEvaluator, MuleContextAware
26  {
27      public static final String NAME = "endpoint";
28  
29      /**
30       * logger used by this class
31       */
32      protected transient final Log logger = LogFactory.getLog(EndpointInfoExpressionEvaluator.class);
33  
34      protected MuleContext muleContext;
35  
36      public void setMuleContext(MuleContext context)
37      {
38          this.muleContext = context;
39      }
40  
41      public Object evaluate(String expression, MuleMessage message)
42      {
43          int i = expression.indexOf(".");
44          String endpointName;
45          String property;
46          if(i > 0)
47          {
48              endpointName = expression.substring(0, i);
49              property = expression.substring(i + 1);
50          }
51          else
52          {
53              throw new IllegalArgumentException(CoreMessages.expressionMalformed(expression, getName()).getMessage());
54          }
55  
56          AbstractEndpointBuilder eb = (AbstractEndpointBuilder)muleContext.getRegistry().lookupEndpointBuilder(endpointName);
57          if(eb!=null)
58          {
59  
60              if(property.equalsIgnoreCase("address"))
61              {
62                  return eb.getEndpointBuilder().getEndpoint().getAddress();
63              }
64              else //TODO more properties
65              {
66                  throw new IllegalArgumentException(CoreMessages.expressionInvalidForProperty(property, expression).getMessage());
67              }
68          }
69          else
70          {
71              logger.warn("There is no endpoint registered with name: " + endpointName);
72              return null;
73          }
74      }
75  
76      /** {@inheritDoc} */
77      public String getName()
78      {
79          return NAME;
80      }
81  
82      /** {@inheritDoc} */
83      public void setName(String name)
84      {
85          throw new UnsupportedOperationException();
86      }
87  }