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.expression.ExpressionManager;
10  import org.mule.config.i18n.CoreMessages;
11  import org.mule.util.StringUtils;
12  
13  /**
14   * A simple configuration object for holding the common Expression evaluator configuration.
15   * The {@link #getFullExpression(ExpressionManager)} will return the evaluator and expression 
16   * information in a format that can be passed into the {@link DefaultExpressionManager}
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 }