1
2
3
4
5
6
7 package org.mule.expression;
8
9 import org.mule.api.expression.ExpressionManager;
10 import org.mule.config.i18n.CoreMessages;
11 import org.mule.util.StringUtils;
12
13
14
15
16
17
18 public class ExpressionConfig
19 {
20 public static final String CUSTOM_EVALUATOR = "custom";
21 public static final String EXPRESSION_SEPARATOR = ":";
22 private String expression;
23
24 private String evaluator;
25
26 private String customEvaluator;
27
28 private String fullExpression;
29
30 private String expressionPrefix = ExpressionManager.DEFAULT_EXPRESSION_PREFIX;
31 private String expressionPostfix = ExpressionManager.DEFAULT_EXPRESSION_POSTFIX;
32
33 public ExpressionConfig()
34 {
35 super();
36 }
37
38 public ExpressionConfig(String expression, String evaluator, String customEvaluator)
39 {
40 this(expression, evaluator, customEvaluator,
41 ExpressionManager.DEFAULT_EXPRESSION_PREFIX,
42 ExpressionManager.DEFAULT_EXPRESSION_POSTFIX);
43
44 }
45
46 public ExpressionConfig(String expression, String evaluator, String customEvaluator, String expressionPrefix, String expressionPostfix)
47 {
48 setCustomEvaluator(customEvaluator);
49 setEvaluator(evaluator);
50 setExpression(expression);
51 this.expressionPostfix = expressionPostfix;
52 this.expressionPrefix = expressionPrefix;
53 }
54
55 public void parse(String expressionString)
56 {
57 if(expressionString.startsWith(expressionPrefix))
58 {
59 expressionString = expressionString.substring(expressionPrefix.length());
60 expressionString = expressionString.substring(0, expressionString.length() - expressionPostfix.length());
61 }
62
63 int i = expressionString.indexOf(EXPRESSION_SEPARATOR);
64 if(i < 0)
65 {
66 throw new IllegalArgumentException("Expression is invalid: " + expressionString);
67 }
68 this.evaluator = expressionString.substring(0, i);
69 this.expression = expressionString.substring(i+1);
70 }
71
72 public void validate(ExpressionManager manager)
73 {
74 if (expression == null)
75 {
76 throw new IllegalArgumentException(CoreMessages.objectIsNull("expression").getMessage());
77 }
78 if (evaluator == null)
79 {
80 throw new IllegalArgumentException(CoreMessages.objectIsNull("evaluator").getMessage());
81 }
82 if (CUSTOM_EVALUATOR.equalsIgnoreCase(evaluator))
83 {
84 if (customEvaluator == null)
85 {
86 throw new IllegalArgumentException(CoreMessages.objectIsNull("custom evaluator").getMessage());
87 }
88 else
89 {
90 evaluator = customEvaluator;
91 }
92 }
93
94 if (!manager.isEvaluatorRegistered(evaluator))
95 {
96 throw new IllegalArgumentException(CoreMessages.expressionEvaluatorNotRegistered(evaluator).getMessage());
97 }
98 }
99
100 public String getFullExpression(ExpressionManager manager)
101 {
102 if (fullExpression == null)
103 {
104 validate(manager);
105 fullExpression = expressionPrefix + evaluator + EXPRESSION_SEPARATOR + expression + expressionPostfix;
106 }
107 return fullExpression;
108 }
109
110 public String getCustomEvaluator()
111 {
112 return customEvaluator;
113 }
114
115 public void setCustomEvaluator(String customEvaluator)
116 {
117 this.customEvaluator = StringUtils.trimToNull(customEvaluator);
118 fullExpression=null;
119 }
120
121 public String getEvaluator()
122 {
123 return evaluator;
124 }
125
126 public void setEvaluator(String evaluator)
127 {
128 this.evaluator = StringUtils.trimToNull(evaluator);
129 fullExpression=null;
130 }
131
132 public String getExpression()
133 {
134 return expression;
135 }
136
137 public void setExpression(String expression)
138 {
139 this.expression = StringUtils.trimToEmpty(expression);
140 fullExpression=null;
141 }
142 }