All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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