/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content.index; import com.enonic.cms.core.content.index.queryexpression.ContentTypeEvaluator; import com.enonic.cms.core.content.index.queryexpression.DateCompareEvaluator; import com.enonic.cms.core.content.index.queryexpression.FunctionEvaluator; import com.enonic.cms.core.content.index.queryexpression.IntegerFieldEvaluator; import com.enonic.cms.core.content.index.queryexpression.QueryEvaluator; import com.enonic.cms.core.content.index.queryexpression.QueryExpr; import com.enonic.cms.core.content.index.queryexpression.QueryParser; import com.enonic.cms.store.dao.ContentTypeDao; public class ContentIndexQueryExprParser { private static QueryEvaluator functionEvaluator = new FunctionEvaluator(); private static QueryEvaluator dateCompareEvaluator = new DateCompareEvaluator(); private static QueryEvaluator numberFieldEvaluator = new IntegerFieldEvaluator(); public static QueryExpr parse( ContentIndexQuery query, ContentTypeDao contentTypeDao ) { return doParse( query, true, contentTypeDao ); } public static QueryExpr parse( ContentIndexQuery query, boolean convertNumerics, ContentTypeDao contentTypeDao ) { return doParse( query, convertNumerics, contentTypeDao ); } private static QueryExpr doParse( final ContentIndexQuery query, final boolean convertNumerics, ContentTypeDao contentTypeDao ) { QueryExpr expr = QueryParser.newInstance().parse( query.getQuery() ); // invoke any functions... expr = (QueryExpr) expr.evaluate( functionEvaluator ); // convert numbers given as strings to real numbers if ( convertNumerics ) { expr = (QueryExpr) expr.evaluate( numberFieldEvaluator ); } // do some tricks with dates in some special cases... expr = (QueryExpr) expr.evaluate( dateCompareEvaluator ); // do trick with contenttype expr = (QueryExpr) expr.evaluate( new ContentTypeEvaluator( contentTypeDao ) ); return expr; } }