View Javadoc

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