/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.builder; import org.apache.commons.lang.StringUtils; import com.enonic.cms.core.content.index.queryexpression.ArrayExpr; import com.enonic.cms.core.content.index.queryexpression.Expression; import com.enonic.cms.core.content.index.queryexpression.FunctionEvaluator; import com.enonic.cms.core.content.index.queryexpression.FunctionExpr; import com.enonic.cms.core.content.index.queryexpression.ValueExpr; /** * Created by IntelliJ IDEA. * User: rmh * Date: 11/23/11 * Time: 12:26 PM */ public final class ExpressionValueResolver { public static Object[] toValues( final Expression expr ) { if ( expr instanceof ArrayExpr ) { return toValues( (ArrayExpr) expr ); } else if ( expr instanceof ValueExpr ) { return new Object[]{toValue( (ValueExpr) expr )}; } else if ( expr instanceof FunctionExpr ) { return toValues( (FunctionExpr) expr ); } else { return new String[0]; } } public static Object toValue( final ValueExpr expr ) { if ( expr.isNumber() ) { return expr.getValue(); } else { final String stringValue = expr.getValue().toString(); return StringUtils.lowerCase( stringValue ); } } private static Object[] toValues( final ArrayExpr expr ) { final ValueExpr[] list = expr.getValues(); final Object[] result = new Object[list.length]; for ( int i = 0; i < list.length; i++ ) { result[i] = toValue( list[i] ); } return result; } private static Object[] toValues( final FunctionExpr expr ) { final FunctionEvaluator eval = new FunctionEvaluator(); return toValues( (Expression) expr.evaluate( eval ) ); } }