com.enonic.cms.core.search.facet.builder.AbstractElasticsearchFacetBuilder.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.core.search.facet.builder.AbstractElasticsearchFacetBuilder.java

Source

/*
 * 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;
    }

}