package com.silverforge.elasticsearchrawclient.queryDSL.queries.sorting; import com.silverforge.elasticsearchrawclient.exceptions.MandatoryParametersAreMissingException; import com.silverforge.elasticsearchrawclient.model.QueryTypeItem; import com.silverforge.elasticsearchrawclient.queryDSL.Constants; import com.silverforge.elasticsearchrawclient.definition.Queryable; import com.silverforge.elasticsearchrawclient.definition.Sortable; import com.silverforge.elasticsearchrawclient.queryDSL.generator.SortQueryFactory; import com.silverforge.elasticsearchrawclient.queryDSL.operators.MissingOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.SortModeOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.SortOperator; import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList; public class Sorting implements Sortable { private QueryTypeArrayList<QueryTypeItem> queryBag; public Sorting(QueryTypeArrayList<QueryTypeItem> queryBag) { this.queryBag = queryBag; } @Override public String getSortableQuery() { return SortQueryFactory .sortGenerator() .generate(queryBag); } public static SortBuilder builder() { return new SortBuilder(); } public static class SortBuilder { private QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>(); public SortBuilder fieldName(String fieldName) { queryBag.addParentItem(Constants.FIELD_NAME, fieldName); return this; } public SortBuilder order(SortOperator sortOperator) { String value = sortOperator.toString(); queryBag.addItem(Constants.ORDER, value); return this; } public SortBuilder mode(SortModeOperator sortModeOperator) { String value = sortModeOperator.toString(); queryBag.addItem(Constants.MODE, value); return this; } public SortBuilder nestedPath(String path) { queryBag.addItem(Constants.NESTED_PATH, path); return this; } public SortBuilder nestedFilter(Queryable queryable) { queryBag.addItem(Constants.NESTED_FILTER, queryable); return this; } public SortBuilder missing(MissingOperator missingOperator) { String value = missingOperator.toString(); queryBag.addItem(Constants.MISSING, value); return this; } public SortBuilder missing(String missing) { queryBag.addItem(Constants.MISSING, missing); return this; } public SortBuilder unmappedType(String type) { queryBag.addItem(Constants.UNMAPPED_TYPE, type); return this; } public Sorting build() throws MandatoryParametersAreMissingException { if (!queryBag.containsKey(Constants.FIELD_NAME)) throw new MandatoryParametersAreMissingException(Constants.FIELD_NAME); return new Sorting(queryBag); } } }