org.zkoss.bind.xel.zel.ImplicitObjectELResolver Maven / Gradle / Ivy
/* ImplicitObjectELResolver.java
Purpose:
Description:
History:
Mary 29, 2012 3:18:34 PM, Created by dennis
Copyright (C) 2012 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.bind.xel.zel;
import java.beans.FeatureDescriptor;
import java.util.Iterator;
import java.util.Map;
import org.zkoss.bind.BindContext;
import org.zkoss.zel.ELContext;
import org.zkoss.zel.ELException;
import org.zkoss.zel.ELResolver;
import org.zkoss.zel.PropertyNotFoundException;
import org.zkoss.zel.PropertyNotWritableException;
import org.zkoss.zel.impl.lang.EvaluationContext;
/**
* ELResolver for implicit object that is not supported in zk el
* @author dennis
* @since 6.0.1
*/
public class ImplicitObjectELResolver extends ELResolver {
public static final String IMPLICIT_OBJECTS = "$IMPLICIT_OBJECTS$"; //the implicit objects
@SuppressWarnings("unchecked")
public Object getValue(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException {
if (context == null) {
throw new NullPointerException();
}
BindContext ctx;
if(base==null && (ctx = getBindContext(context)) != null){
Map implicit = (Map)ctx.getAttribute(IMPLICIT_OBJECTS);
if(implicit!=null && implicit.containsKey(property)){
//have to check contains to know it is resolved or not.
context.setPropertyResolved(true);
return implicit.get(property);
}
}
return null;
}
private BindELContext getBindELContext(ELContext context) {
if(context instanceof EvaluationContext){
ELContext ctx = ((EvaluationContext)context).getELContext();
return ctx instanceof BindELContext?(BindELContext)ctx:null;
}
return null;
}
private BindContext getBindContext(ELContext context) {
BindELContext ctx = getBindELContext(context);
return ctx==null?null:ctx.getBindContext();
}
public Class> getType(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException {
//get type is called by setValue,see AstValue#setValue,
//since this is ready only resolver, we don't need to implement it.
return null;
}
public void setValue(ELContext context, Object base, Object property,
Object value) throws NullPointerException,
PropertyNotFoundException, PropertyNotWritableException,
ELException {
}
public boolean isReadOnly(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException {
return true;
}
public Iterator getFeatureDescriptors(ELContext context, Object base) {
return null;
}
public Class> getCommonPropertyType(ELContext context, Object base) {
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy