/* ELXelExpression100.java
Purpose:
Description:
History:
Fri Aug 31 17:12:56 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.Objects;
import org.zkoss.xel.Expression;
import org.zkoss.xel.XelContext;
import org.zkoss.xel.FunctionMapper;
import org.zkforge.apache.commons.el.ExpressionApi;
/**
* A XEL expression based on zcommons-el 1.0.1 or 1.0.0.
*
* @author tomyeh
*/
/*package*/ class ELXelExpression100 implements Expression {
private final ExpressionApi _expr;
private final String _rawexpr;
private final FunctionMapper _mapper;
private final Class _expected;
/**
* @param expr the expression. It cannot be null.
*/
public ELXelExpression100(ExpressionApi expr,
String rawexpr, FunctionMapper mapper, Class expectedType) {
if (expr == null)
throw new IllegalArgumentException();
_rawexpr = rawexpr;
_expr = expr;
_mapper = mapper;
_expected = expectedType;
}
public Object evaluate(XelContext ctx) {
//Test case: B30-1957661.zul where a function mapper is created
//by zscript so it is different from one page to page
//In this case, we cannot reuse parsed expression.
final FunctionMapper nfm = ctx.getFunctionMapper();
if (!Objects.equals(_mapper, nfm))
return new ELFactory().evaluate(ctx, _rawexpr, _expected);
return _expr.evaluate(ctx.getVariableResolver());
}
//Object//
public boolean equals(Object o) {
if (this == o) return true;
return o instanceof ELXelExpression100 &&
((ELXelExpression100)o)._expr.equals(_expr);
}
public int hashCode() {
return _expr.hashCode();
}
public String toString() {
return _expr.toString();
}
}