/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content.index.queryexpression; public class QueryEvaluatorAdapter implements QueryEvaluator { public Object evaluate( ArrayExpr expr ) { final ValueExpr[] valueExpressions = expr.getValues(); final ValueExpr[] newEvaluatedValues = new ValueExpr[valueExpressions.length]; for ( int i = 0; i < valueExpressions.length; i++ ) { final ValueExpr valueExpression = valueExpressions[i]; if ( valueExpression != null ) { newEvaluatedValues[i] = (ValueExpr) valueExpression.evaluate( this ); } else { newEvaluatedValues[i] = null; } } return new ArrayExpr( newEvaluatedValues ); } public Object evaluate( ValueExpr expr ) { return expr; } public Object evaluate( FieldExpr expr ) { return expr; } public Object evaluate( FunctionExpr expr ) { return new FunctionExpr( expr.getName(), (ArrayExpr) expr.getArguments().evaluate( this ) ); } public Object evaluate( CompareExpr expr ) { Expression left = (Expression) expr.getLeft().evaluate( this ); Expression right = (Expression) expr.getRight().evaluate( this ); return new CompareExpr( expr.getOperator(), left, right ); } public Object evaluate( LogicalExpr expr ) { Expression left = (Expression) expr.getLeft().evaluate( this ); Expression right = (Expression) expr.getRight().evaluate( this ); return new LogicalExpr( expr.getOperator(), left, right ); } public Object evaluate( NotExpr expr ) { return new NotExpr( (Expression) expr.getExpr().evaluate( this ) ); } public Object evaluate( OrderByExpr expr ) { return expr; } public Object evaluate( OrderFieldExpr expr ) { return expr; } public Object evaluate( QueryExpr queryExpr ) { Expression expr = queryExpr.getExpr(); if ( expr != null ) { expr = (Expression) expr.evaluate( this ); } return new QueryExpr( expr, queryExpr.getOrderBy() ); } }