package com.silverforge.elasticsearchrawclient.queryDSL.queries; import com.silverforge.elasticsearchrawclient.model.QueryTypeItem; import com.silverforge.elasticsearchrawclient.queryDSL.Constants; import com.silverforge.elasticsearchrawclient.definition.ComposableQuery; import com.silverforge.elasticsearchrawclient.definition.Queryable; import com.silverforge.elasticsearchrawclient.definition.Sortable; import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory; import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList; public final class Query implements Queryable, ComposableQuery { private final QueryTypeArrayList<QueryTypeItem> queryBag; Query(QueryBuilder queryBuilder) { queryBag = queryBuilder.queryBag; } public static QueryBuilder builder() { return new QueryBuilder(); } @Override public String getQueryString() { return QueryFactory .queryGenerator() .generate(queryBag); } public static class QueryBuilder { private final QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>(); QueryBuilder() {} public QueryBuilder from(int from) { queryBag.addItem(Constants.FROM, from); return this; } public QueryBuilder size(int size) { queryBag.addItem(Constants.SIZE, size); return this; } public QueryBuilder query(Queryable query) { queryBag.addItem(Constants.QUERY, query); return this; } public QueryBuilder sort(Sortable... sortables) { queryBag.addItem(Constants.SORT, sortables); return this; } public QueryBuilder trackScores(boolean track) { queryBag.addItem(Constants.TRACK_SCORES, track); return this; } public Query build() { return new Query(this); } } }