/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content.index.queryexpression; import java.math.BigDecimal; import java.util.List; import org.codehaus.jparsec.Tokens; import org.codehaus.jparsec.functors.Binary; import org.codehaus.jparsec.functors.Map; import org.codehaus.jparsec.functors.Map2; import org.codehaus.jparsec.functors.Map3; import org.codehaus.jparsec.functors.Unary; final class QueryMapper { public static Map<String, ValueExpr> stringToNumberExpr() { return new Map<String, ValueExpr>() { public ValueExpr map( final String from ) { return new ValueExpr( new BigDecimal( from.trim() ) ); } }; } public static Map<String, ValueExpr> stringToStringExpr() { return new Map<String, ValueExpr>() { public ValueExpr map( final String from ) { return new ValueExpr( from.trim() ); } }; } public static Map<String, FieldExpr> stringToFieldExpr() { return new Map<String, FieldExpr>() { public FieldExpr map( final String from ) { return new FieldExpr( from.trim() ); } }; } public static Map<String, Tokens.Fragment> stringToFragment( final String tag ) { return new Map<String, Tokens.Fragment>() { public Tokens.Fragment map( final String from ) { return Tokens.fragment( from, tag ); } }; } public static Map3<FieldExpr, Integer, Expression, CompareExpr> compareExprMapper() { return new Map3<FieldExpr, Integer, Expression, CompareExpr>() { public CompareExpr map( final FieldExpr a, final Integer b, final Expression c ) { return new CompareExpr( b, a, c ); } }; } public static Map<List<ValueExpr>, ArrayExpr> valuesToArrayExpr() { return new Map<List<ValueExpr>, ArrayExpr>() { public ArrayExpr map( final List<ValueExpr> from ) { return new ArrayExpr( from.toArray( new ValueExpr[from.size()] ) ); } }; } public static Map2<String, ArrayExpr, FunctionExpr> functionExprMapper() { return new Map2<String, ArrayExpr, FunctionExpr>() { public FunctionExpr map( final String a, final ArrayExpr b ) { return new FunctionExpr( a.trim(), b ); } }; } public static Map<ValueExpr, ValueExpr> prefixSuffixMapper( final String prefix, final String suffix ) { return new Map<ValueExpr, ValueExpr>() { public ValueExpr map( final ValueExpr from ) { String str = (String) from.getValue(); if ( prefix != null ) { str = prefix + str; } if ( suffix != null ) { str = str + suffix; } return new ValueExpr( str ); } }; } public static Binary<Expression> logicalExprMapper( final int op ) { return new Binary<Expression>() { public Expression map( final Expression left, final Expression right ) { return new LogicalExpr( op, left, right ); } }; } public static Unary<Expression> notExprMapper() { return new Unary<Expression>() { public Expression map( final Expression from ) { return new NotExpr( from ); } }; } public static Map<List<OrderFieldExpr>, OrderByExpr> orderByExprMapper() { return new Map<List<OrderFieldExpr>, OrderByExpr>() { public OrderByExpr map( final List<OrderFieldExpr> from ) { return new OrderByExpr( from.toArray( new OrderFieldExpr[from.size()] ) ); } }; } public static Map2<FieldExpr, Boolean, OrderFieldExpr> orderFieldExprMapper() { return new Map2<FieldExpr, Boolean, OrderFieldExpr>() { public OrderFieldExpr map( final FieldExpr a, final Boolean b ) { return new OrderFieldExpr( a, b ); } }; } public static Map2<Expression, OrderByExpr, QueryExpr> queryExprMapper() { return new Map2<Expression, OrderByExpr, QueryExpr>() { public QueryExpr map( final Expression a, final OrderByExpr b ) { return new QueryExpr( a, b ); } }; } }