/* ELFactory.java
Purpose:
Description:
History:
Fri Aug 31 17:00:40 2007, Created by tomyeh
Copyright (C) 2007 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.xel.el;
import org.zkoss.lang.Classes;
import org.zkoss.xel.Expression;
import org.zkoss.xel.ExpressionFactory;
import org.zkoss.xel.XelContext;
import org.zkoss.xel.FunctionMapper;
import org.zkoss.xel.XelException;
import org.zkforge.apache.commons.el.ExpressionEvaluatorImpl;
/**
* An implementation based on ZK Commons EL (zcommons-el.jar:
* org.zkforge.apache.commons.el.ExpressionEvaluatorImpl).
* ZK commons-EL is a performance enhancement version of Apache Commons EL.
* It is also independent of JSP 2.0.
*
* @author tomyeh
* @since 3.0.0
*/
public class ELFactory implements ExpressionFactory {
/** Used to denote the version of zcommons-el. */
private static final boolean _v102, _v103;
private final ExpressionEvaluatorImpl _eval;
public ELFactory() {
_eval = new ExpressionEvaluatorImpl();
}
//ExpressionFactory//
public boolean isSupported(int feature) {
return feature == FEATURE_FUNCTION;
}
public Expression parseExpression(XelContext xelc, String expression,
Class expectedType)
throws XelException {
if (_v103)
return new ELXelExpression(
_eval.parseExpression(expression, expectedType));
if (_v102)
return new ELXelExpression102(
_eval.parseExpression(expression, expectedType));
FunctionMapper mapper = xelc != null ? xelc.getFunctionMapper(): null;
return new ELXelExpression100(
_eval.parseExpression(expression, expectedType, mapper),
expression, mapper, expectedType);
}
public Object evaluate(XelContext xelc, String expression,
Class expectedType)
throws XelException {
return _eval.evaluate(expression, expectedType,
xelc != null ? xelc.getVariableResolver(): null,
xelc != null ? xelc.getFunctionMapper(): null);
}
static {
boolean v103 = false;
try {
Classes.forNameByThread("org.zkforge.apache.commons.el.Resolvers");
v103 = true;
} catch (Throwable e) {
}
if ((_v103 = v103)) {
_v102 = true;
} else {
boolean v102 = false;
try {
Classes.forNameByThread("org.zkforge.apache.commons.el.ELExpression");
v102 = true;
} catch (Throwable e) {
}
_v102 = v102;
}
}
}