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

org.mvel2.optimizers.impl.refl.nodes.PropertyHandlerAccessor Maven / Gradle / Ivy

package org.mvel2.optimizers.impl.refl.nodes;

import org.mvel2.MVEL;
import org.mvel2.integration.PropertyHandler;
import org.mvel2.integration.VariableResolverFactory;

public class PropertyHandlerAccessor extends BaseAccessor {

    private String propertyName;
    private PropertyHandler propertyHandler;
    private Class conversionType;

    public PropertyHandlerAccessor(String propertyName, Class conversionType, PropertyHandler propertyHandler) {
        this.propertyName = propertyName;
        this.conversionType = conversionType;
        this.propertyHandler = propertyHandler;
    }

    public Object getValue(Object ctx, Object elCtx, VariableResolverFactory variableFactory) {
        if (!conversionType.isAssignableFrom(ctx.getClass())) {
            if (nextNode != null) {
                return nextNode.getValue(MVEL.getProperty(propertyName, ctx), elCtx, variableFactory);
            } else {
                return MVEL.getProperty(propertyName, ctx);
            }
        }
        try {
            if (nextNode != null) {
                return nextNode.getValue(propertyHandler.getProperty(propertyName, ctx, variableFactory), elCtx, variableFactory);
            } else {
                return propertyHandler.getProperty(propertyName, ctx, variableFactory);
            }
        } catch (Exception e) {
            throw new RuntimeException("unable to access field", e);
        }
    }

    public Object setValue(Object ctx, Object elCtx, VariableResolverFactory variableFactory, Object value) {
        if (nextNode != null) {
            return nextNode.setValue(propertyHandler.getProperty(propertyName, ctx, variableFactory), ctx, variableFactory, value);
        } else {
            return propertyHandler.setProperty(propertyName, ctx, variableFactory, value);
        }
    }

    public Class getKnownEgressType() {
        return Object.class;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy