package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries; import com.silverforge.elasticsearchrawclient.model.QueryTypeItem; import com.silverforge.elasticsearchrawclient.queryDSL.Constants; import com.silverforge.elasticsearchrawclient.definition.Queryable; import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory; import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList; import com.silverforge.elasticsearchrawclient.utils.StringUtils; public class IndicesQuery implements Queryable { private QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>(); IndicesQuery(QueryTypeArrayList<QueryTypeItem> queryBag) { this.queryBag = queryBag; } public static IndicesQueryBuilder builder() { return new IndicesQueryBuilder(); } @Override public String getQueryString() { return QueryFactory .indicesQueryGenerator() .generate(queryBag); } public static class IndicesQueryBuilder extends Init<IndicesQueryBuilder> { @Override protected IndicesQueryBuilder self() { return this; } } public static abstract class Init<T extends Init<T>> { private QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>(); protected abstract T self(); public T indices(String... indices) { String value = "[" + StringUtils.makeCommaSeparatedListWithQuotationMark(indices) + "]"; queryBag.addParentItem(Constants.INDICES, value); return self(); } public T query(Queryable query) { queryBag.addItem(Constants.QUERY, query); return self(); } public T noMatchQuery(Queryable query) { queryBag.addItem(Constants.NO_MATCH_QUERY, query); return self(); } public IndicesQuery build() { return new IndicesQuery(queryBag); } } }