/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.facet.builder; import java.util.regex.Pattern; import com.google.common.base.Strings; import com.enonic.cms.core.search.facet.model.FacetOrderBy; import com.enonic.cms.core.search.query.QueryField; import com.enonic.cms.core.search.query.QueryFieldNameResolver; abstract class AbstractElasticsearchFacetBuilder { protected String createQueryFieldName( final String field ) { return QueryFieldNameResolver.resolveQueryFieldName( field ); } protected String createDateFieldName( String fieldName ) { QueryField queryField = new QueryField( createQueryFieldName( fieldName ) ); return queryField.getFieldNameForDateQueries(); } protected String createNumericFieldName( String fieldName ) { QueryField queryField = new QueryField( createQueryFieldName( fieldName ) ); return queryField.getFieldNameForNumericQueries(); } public enum RegExpFlags { CASE_INSENSITIVE( Pattern.CASE_INSENSITIVE ), MULTILINE( Pattern.MULTILINE ), DOTALL( Pattern.DOTALL ), UNICODE_CASE( Pattern.UNICODE_CASE ), CANON_EQ( Pattern.CANON_EQ ), UNIX_LINES( Pattern.UNIX_LINES ), LITERAL( Pattern.LITERAL ), COMMENTS( Pattern.COMMENTS ); int value; private RegExpFlags( final int value ) { this.value = value; } public int getValue() { return value; } } protected static String[] getCommaDelimitedStringAsArraySkipWhitespaces( String commaSeparatedString ) { if ( Strings.isNullOrEmpty( commaSeparatedString ) ) { return null; } return commaSeparatedString.split( ",\\s*" ); } protected String createElasticsearchOrderByString( FacetOrderBy facetOrderBy ) { if ( facetOrderBy == null ) { return null; } StringBuilder builder = new StringBuilder(); appendDirection( facetOrderBy, builder ); String orderbyESStringValue = translateToEsSortValues( facetOrderBy ); builder.append( orderbyESStringValue ); return builder.toString(); } private void appendDirection( final FacetOrderBy facetOrderBy, final StringBuilder builder ) { if ( facetOrderBy.getDirection() != null && facetOrderBy.getDirection().equals( FacetOrderBy.Direction.ASC ) ) { builder.append( "reverse_" ); } } private String translateToEsSortValues( final FacetOrderBy facetOrderBy ) { String orderbyESStringValue = ""; final FacetOrderBy.Value value = facetOrderBy.getValue(); switch ( value ) { case HITS: orderbyESStringValue = "count"; break; case SUM: orderbyESStringValue = "total"; break; default: orderbyESStringValue = value.toString(); } return orderbyESStringValue; } }