/* ELXelExpression.java Purpose: Description: History: Wed Jul 20 10:42:35 2011, Created by henrichen Copyright (C) 2011 Potix Corporation. All Rights Reserved. {{IS_RIGHT }}IS_RIGHT */ package org.zkoss.xel.zel; import org.zkoss.xel.ExpressionX; import org.zkoss.xel.ValueReference; import org.zkoss.xel.XelContext; import org.zkoss.xel.XelException; import org.zkoss.zel.ELContext; import org.zkoss.zel.StandardELContext; import org.zkoss.zel.ValueExpression; /** * An XEL Expression that is based on ZEL ValueExpression. * * @author henrichen * @since 6.0.0 */ public class ELXelExpression implements ExpressionX, java.io.Serializable { private static final long serialVersionUID = 5843639871525015820L; protected final ValueExpression _expr; public ELXelExpression(ValueExpression expr) { _expr = expr; } public Object evaluate(XelContext xelc) throws XelException { return _expr.getValue(newELContext(xelc)); } public boolean isReadOnly(XelContext xelc) throws XelException { return _expr.isReadOnly(newELContext(xelc)); } public void setValue(XelContext xelc, Object value) throws XelException { _expr.setValue(newELContext(xelc), value); } public String getExpressionString() { return _expr.getExpressionString(); } public Class getType(XelContext xelc) { return _expr.getType(newELContext(xelc)); } public ValueReference getValueReference(XelContext xelc) { final org.zkoss.zel.ValueReference vr = _expr.getValueReference(newELContext(xelc)); return vr==null?null:new ValueReferenceImpl(vr.getBase(), vr.getProperty()); } protected ELContext newELContext(XelContext xelc) { return new StandardELContext(new XelELContext(xelc)); } public static class ValueReferenceImpl implements ValueReference, java.io.Serializable { private static final long serialVersionUID = 201109141039L; private final Object _base; private final Object _property; public ValueReferenceImpl(Object base, Object property) { this._base = base; this._property = property; } public Object getBase() { return _base; } public Object getProperty() { return _property; } } }