Package ognl

Source Code of ognl.ComparisonExpression

/**
*
*/
package ognl;

import ognl.enhance.UnsupportedCompilationException;


/**
*  Base class for types that compare values.
*/
public abstract class ComparisonExpression extends BooleanExpression
{

    public ComparisonExpression(int id) {
        super(id);
    }

    public ComparisonExpression(OgnlParser p, int id) {
        super(p, id);
    }
   
    public abstract String getComparisonFunction();
   
    public String toGetSourceString(OgnlContext context, Object target)
    {
        if (target == null)
            throw new UnsupportedCompilationException("Current target is null, can't compile.");
       
        try {
           
            Object value = getValueBody(context, target);
           
            if (value != null && Boolean.class.isAssignableFrom(value.getClass()))
                _getterClass = Boolean.TYPE;
            else if (value != null)
                _getterClass = value.getClass();
            else
                _getterClass = Boolean.TYPE;
           
            // iterate over children to make numeric type detection work properly
           
            OgnlRuntime.getChildSource(context, target, _children[0]);
            OgnlRuntime.getChildSource(context, target, _children[1]);
           
//            System.out.println("comparison expression currentType: " + context.getCurrentType() + " previousType: " + context.getPreviousType());

            boolean conversion = OgnlRuntime.shouldConvertNumericTypes(context);

            String result = conversion ? "(" + getComparisonFunction() + "( ($w) (" : "(";
           
            result += OgnlRuntime.getChildSource(context, target, _children[0], conversion)
            + " "
            + (conversion ? "), ($w) " : getExpressionOperator(0)) + " "
            + OgnlRuntime.getChildSource(context, target, _children[1], conversion);
           
            result += conversion ? ")" : "";

            context.setCurrentType(Boolean.TYPE);

            result += ")";

            return result;
        } catch (NullPointerException e) {
           
            // expected to happen in some instances
           
            throw new UnsupportedCompilationException("evaluation resulted in null expression.");
        } catch (Throwable t)
        {
            throw OgnlOps.castToRuntime(t);
        }
    }
}
TOP

Related Classes of ognl.ComparisonExpression

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.