Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
MuleExpressionEvaluator |
|
| 2.0;2 |
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 | ||
14 | /** | |
15 | * This evaluator provide a powerful expression language for querying mule information | |
16 | * at runtime. It provides a unified language for querying message properties, attachments | |
17 | * payload, Mule context information such as the current service or endpoint and access to | |
18 | * the registry. Here are some examples: | |
19 | * | |
20 | * #[mule:message.headers(foo, bar)] - retrieves two headers 'foo' and 'bar' and returns a Map. | |
21 | * | |
22 | * #[mule:message.attachments-list(attach1, attach2*)] - retrieves two named attachments in a List. The star on 'attach2' | |
23 | * indicates that it is optional | |
24 | * | |
25 | * #[mule:message.headers(all)] - retrieves all headers and returns as a Map. | |
26 | * | |
27 | * #[mule:message.payload(org.dom4j.Document)] - return the payload and convert it to a org.dom4j.Document. | |
28 | * | |
29 | * #[mule:message.correlationId] - return the the correlationId on the message | |
30 | * | |
31 | * #[mule:message.map-payload(foo)] - expects a Map payload object and will retrive a property 'foo' from the map. | |
32 | * | |
33 | * #[mule.context.serviceName] - returns the current service Name | |
34 | * | |
35 | * #[mule.context.modelName] - returns the current model Name | |
36 | * | |
37 | * #[mule.context.workingDir] - returns the working Directory | |
38 | * | |
39 | * #[mule.context.serverId] - returns the current server ID | |
40 | * | |
41 | * #[mule.registry.apple] - returns an object called 'apple' from the registry | |
42 | * | |
43 | * #[mule.registry.apple*] - returns an object called 'apple' from the registry but is optional | |
44 | * | |
45 | * #[mule.registry.apple.washed] - returns the property 'washed on an object called 'apple' in the registry | |
46 | * | |
47 | */ | |
48 | 0 | public class MuleExpressionEvaluator implements ExpressionEvaluator, MuleContextAware |
49 | { | |
50 | public static final String NAME = "mule"; | |
51 | ||
52 | private MuleContext muleContext; | |
53 | ||
54 | public void setMuleContext(MuleContext context) | |
55 | { | |
56 | 0 | this.muleContext = context; |
57 | 0 | } |
58 | ||
59 | public Object evaluate(String expression, MuleMessage message) | |
60 | { | |
61 | 0 | if(expression==null) |
62 | { | |
63 | 0 | return message; |
64 | } | |
65 | 0 | int i = expression.indexOf("."); |
66 | ||
67 | 0 | ExpressionConfig config = getExpressionConfig(expression.substring(0, i), expression.substring(i+1)); |
68 | 0 | String fullExpression = config.getFullExpression(muleContext.getExpressionManager()); |
69 | 0 | return muleContext.getExpressionManager().evaluate(fullExpression, message); |
70 | } | |
71 | ||
72 | ||
73 | protected ExpressionConfig getExpressionConfig(String eval, String expression) | |
74 | { | |
75 | ||
76 | 0 | int i = expression.indexOf("("); |
77 | 0 | int x = expression.indexOf("."); |
78 | 0 | if(x > 0 && x < i) |
79 | { | |
80 | 0 | eval = expression.substring(0, x); |
81 | 0 | expression = expression.substring(x+1); |
82 | } | |
83 | ||
84 | 0 | if(i > 0) |
85 | { | |
86 | 0 | eval = expression.substring(0, i); |
87 | 0 | expression=expression.substring(i+1, expression.length()-1); |
88 | } | |
89 | 0 | return new ExpressionConfig(expression, eval, null); |
90 | } | |
91 | ||
92 | public void setName(String name) | |
93 | { | |
94 | 0 | throw new UnsupportedOperationException(); |
95 | } | |
96 | ||
97 | public String getName() | |
98 | { | |
99 | 0 | return NAME; |
100 | } | |
101 | } |