Java tutorial
/* * Copyright (c) 2002-2012 Alibaba Group Holding Limited. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.citrus.expr.jexl; import com.alibaba.citrus.expr.Expression; import com.alibaba.citrus.expr.ExpressionContext; import com.alibaba.citrus.expr.ExpressionFactory; import com.alibaba.citrus.expr.ExpressionParseException; import com.alibaba.citrus.expr.support.ExpressionSupport; import org.apache.commons.jexl2.JexlEngine; /** * <code>JexlExpression</code> * * @author Michael Zhou */ public class JexlExpressionFactory implements ExpressionFactory { private final JexlEngine engine = new JexlEngine(); /** ??context??????? */ private boolean supportContextVariables = true; /** * ??context??????? * * @return ?<code>true</code> */ public boolean isSupportContextVariables() { return supportContextVariables; } /** * ?context?? * * @param supportContextVariables ??context?? */ public void setSupportContextVariables(boolean supportContextVariables) { this.supportContextVariables = supportContextVariables; } /** * ? * * @param expr ? * @return ? */ public Expression createExpression(final String expr) throws ExpressionParseException { final Expression jexlExpression; try { jexlExpression = new JexlExpression(engine.createExpression(expr)); } catch (Exception e) { throw new ExpressionParseException(e); } if (isSupportContextVariables() && isValidContextVariableName(expr)) { return new ExpressionSupport() { /** * ?? * * @return ? */ public String getExpressionText() { return expr; } /** * ? * * @param context <code>ExpressionContext</code> * @return ? */ public Object evaluate(ExpressionContext context) { // jexl? Object value = jexlExpression.evaluate(context); // jexl?nullcontext? if (value == null) { value = context.get(expr); } return value; } }; } return jexlExpression; } /** * ?context?? * * @return <code>true</code> */ protected boolean isValidContextVariableName(String varName) { for (int i = 0; i < varName.length(); i++) { char ch = varName.charAt(i); if (Character.isWhitespace(ch) || ch == '[') { return false; } } return true; } }