/* CDIELContext.java
Purpose:
Description:
History:
Wed Dec 28 11:25:12 2009, Created by henrichen
Copyright (C) 2009 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.zkplus.cdi;
import java.lang.reflect.Method;
import javax.el.ELContext;
import javax.el.ELResolver;
import javax.el.ValueExpression;
import javax.el.VariableMapper;
import org.zkoss.xel.Function;
import org.zkoss.xel.FunctionMapper;
import org.zkoss.xel.XelContext;
/**
* An EL context that is based on XEL context for use with CDI.
* <p>Applicable to CDI version 1.0 or later</p>
* @author henrichen
*/
/*package*/ class CDIELContext extends ELContext {
private final XelContext _xelc;
private final ELResolver _cdiResolver;
private static final VariableMapper EMPTY_VAR_MAPPER = new VariableMapper() {
public ValueExpression resolveVariable(String variable) {
return null;
}
public ValueExpression setVariable(String variable, ValueExpression expression) {
throw new UnsupportedOperationException();
}
};
/*package*/ CDIELContext(final XelContext xelc, ELResolver cdiResolver) {
_xelc = xelc;
_cdiResolver = cdiResolver;
}
public ELResolver getELResolver() {
return _cdiResolver;
}
public javax.el.FunctionMapper getFunctionMapper() {
return _xelc != null ? new XelELMapper(_xelc.getFunctionMapper()) : null;
}
public VariableMapper getVariableMapper() {
return EMPTY_VAR_MAPPER; //not support
}
public XelContext getXelContext() {
return _xelc;
}
private class XelELMapper extends javax.el.FunctionMapper {
private FunctionMapper _mapper;
public XelELMapper(FunctionMapper mapper) {
_mapper = mapper;
}
public Method resolveFunction(String prefix, String name) {
if (_mapper != null) {
final Function f = _mapper.resolveFunction(prefix, name);
if (f != null)
return f.toMethod();
}
return null;
}
}
}