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.Scriptable;
import com.silverforge.elasticsearchrawclient.definition.Sortable;
import com.silverforge.elasticsearchrawclient.queryDSL.generator.SortQueryFactory;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.SortOperator;
import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList;
public class ScriptBasedSorting
implements Sortable {
private QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>();
ScriptBasedSorting(QueryTypeArrayList<QueryTypeItem> queryBag) {
this.queryBag = queryBag;
}
@Override
public String getSortableQuery() {
return SortQueryFactory
.scriptBasedSortingGenerator()
.generate(queryBag);
}
public static ScriptBasedSortingBuilder builder() {
return new ScriptBasedSortingBuilder();
}
public static class ScriptBasedSortingBuilder {
private QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>();
public ScriptBasedSortingBuilder script(Scriptable script) {
queryBag.addItem(Constants.SCRIPT, script);
return this;
}
public ScriptBasedSortingBuilder type(String type) {
queryBag.addItem(Constants.TYPE, type);
return this;
}
public ScriptBasedSortingBuilder order(SortOperator sortOperator) {
String value = sortOperator.toString();
queryBag.addItem(Constants.ORDER, value);
return this;
}
public ScriptBasedSorting build()
throws MandatoryParametersAreMissingException {
if (!queryBag.containsKey(Constants.SCRIPT))
throw new MandatoryParametersAreMissingException(Constants.SCRIPT);
return new ScriptBasedSorting(queryBag);
}
}
}